Linux - Existe uma maneira de impedir / proteger um arquivo de ser excluído mesmo pela raiz?


89

Eu tenho um arquivo muito importante usado por um aplicativo no meu local de trabalho. Preciso garantir que ele não seja excluído, como posso fazer isso?

linux  files 

13
Faça um backup, para que você possa restaurá-lo ... Fora isso, chattr +ipode ajudar, mas tornará o arquivo somente leitura (e pode ser substituído chattr -i), também é possível tentar protegê-lo com o SELInux etc.
Sven

43
O root pode criar um processo que nem mesmo o root pode matar?
Mark Gabriel

4
@MarkGabriel Sim. Uma bomba de garfo. :)
reirab


8
O administrador do HW pode vir e remover o disco, rasgá-lo, queimar os restos e alimentá-los com hoghs. Ou, melhor, algum programador C (++) pode induzir alguns demônios nasais. O que for importante para você, faça o backup. Duas vezes.
Pavel

Respostas:


133

Sim, você pode alterar os atributos do arquivo para somente leitura.

O comando é:

chattr +i filename

E para desativá-lo:

chattr -i filename

De man chattr:

Um arquivo com o iatributo não pode ser modificado: não pode ser excluído ou renomeado, nenhum link pode ser criado para esse arquivo e nenhum dado pode ser gravado no arquivo. Somente o superusuário ou um processo que possui o CAP_LINUX_IMMUTABLErecurso pode definir ou limpar esse atributo.


11
Para os interessados, o equivalente bsd échflags schg
Andrew Domaszek

85
Observe que um usuário com acesso root pode desmarcar esse sinalizador e excluir o arquivo. É improvável que isso aconteça por acidente, mas não é contra a exclusão intencional.
Grant

6
@ Granant, não se o Securelevel estiver alto o suficiente. O processo de inicialização define o nível de segurança como 2 antes da rede ser ativada, portanto, redefinir o sinalizador requer acesso à máquina local (mas isso significa que os arquivos usados ​​no processo de inicialização antes desse período também precisam ser imutáveis).
Simon Richter

16
@Grant Se alguém quiser levá-la ao extremo, você não pode impedir que a partição é excluída ou o disco é colocado em um forno ou prótons decadência em 10 ^ 30 anos ...
Hagen von Eitzen

2
@Itai Ganot, eu gostaria de ter lido há 4 dias. Eu era uma pergunta em um exame que fiz = /
vfbsilva

84

Grave em um CD. Coloque o CD em uma unidade de CD-ROM e acesse-o a partir daí.


15
+1 por pensar fora da caixa. Além disso, ele também já foi usado em algumas circunstâncias (unidade de CD-ROM de caixa preta com o CD enviado para o seu destino). Pode não ser apropriado se alguém puder desconectar a unidade.
Alex Mazzariol 4/04

1
BEIJO Eu amo isso! 1
MonkeyZeus

2
Eu acho que é a resposta correta para esta pergunta. Alterar o atributo do arquivo (chattr -i) não pode impedir ações maliciosas.
Bruno von Paris

7
Hoje em dia, um cartão SD de tamanho normal em um leitor de cartão embutido pode ser uma solução melhor - menor consumo de energia, acesso mais rápido em muitos casos e mais durável no uso sem gravação.
Chris H

3
@ jpmc26, portanto, unidade de CD-ROM. Aqueles são somente leitura / leitura.
Thorbjørn Ravn Andersen

29
  1. Crie uma imagem do sistema de arquivos.
  2. Monte a imagem.
  3. Copie o arquivo para a imagem montada.
  4. Desmonte a imagem e remonte-a como somente leitura.
  5. Agora você não pode excluí-lo.

Exemplo:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system

3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Kaz Wolfe

3
Levando isso um pouco mais longe, você pode usar squashfsou cramfsque são compactados e somente leitura. Ele precisa de uma ferramenta especial para construir o sistema de arquivos.
Zan Lynx

7

O Linux possui a chamada opção bind-mount, que é um recurso bastante poderoso e útil para saber :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

- o que está sendo feito aqui é um arquivo de montagem de ligação para si mesmo (sim, você pode fazer isso no Linux), depois é remontado no modo R / O. Obviamente, isso também pode ser feito no diretório.


6

Você também deve criar vários links físicos para o arquivo. Eles devem estar em vários locais que os usuários comuns não podem acessar.

Dessa forma, mesmo que eles consigam substituir a proteção do seu chattr, os dados permanecerão e você poderá restaurá-los facilmente onde o aplicativo estiver procurando.


11
Os links físicos não protegem o conteúdo do arquivo.
200

No entanto, eles fornecerão proteção adicional contra DELETION, que era a pergunta original.
churrasco

2
@barbecue Se o arquivo estiver desvinculado do nome que o aplicativo procura, não importa se o conteúdo do arquivo existe com outro nome. Para qualquer coisa que procure o arquivo com o nome esperado, o arquivo ainda foi excluído.
a CVn

5

Outros responderam sua pergunta como você pediu. Como o @Sven mencionou em um comentário, a solução geral para a pergunta "Como garantir que nunca perco um arquivo?" é criar um backup do arquivo. Faça uma cópia do arquivo e armazene-o em vários locais. Além disso, se o arquivo for extremamente importante e sua empresa tiver uma política para fazer backup de dados importantes com um serviço de backup, você poderá incluir esse arquivo no serviço.


2
Bem, é claro que o arquivo está sendo copiado regularmente, eu só queria outra camada de proteção contra usuários que às vezes estão trabalhando na caixa com permissões de usuário root.

5

No Linux o imutável bandeira é suportado apenas em alguns tipos de sistema de arquivos (a maioria dos nativos, como ext4, xfs, btrfs...)

Em sistemas de arquivos nos quais não há suporte, outra opção é montar o arquivo sobre ele próprio no modo somente leitura. Isso deve ser feito em duas etapas:

mount --bind file file
mount -o remount,bind,ro file

Isso precisa ser feito em cada inicialização, por exemplo, via /etc/fstab.


Espero que alguém umountno arquivo obtenha permissões de gravação novamente
whoan

3

Em um comentário à resposta de Kevin , Jerry menciona:

Bem, é claro que o arquivo está sendo copiado regularmente, eu só queria outra camada de proteção contra usuários que às vezes estão trabalhando na caixa com permissões de usuário root. -

Vou assumir que você não pode mudar essa prática, pois é uma idéia muito, muito ruim.

Todas as sugestões sobre o uso de um dispositivo somente leitura têm o mesmo problema - isso faz com que seja uma PITA fazer alterações legítimas quando necessário. No caso de uma unidade com bloqueio, como um cartão SD, você enfrenta o problema que fica subitamente vulnerável ao desbloqueá-lo para fazer suas alterações.

O que eu recomendaria é configurar outra máquina como um servidor NFS e compartilhar o diretório com os arquivos importantes nas máquinas nas quais os usuários têm raiz. Compartilhe a montagem como somente leitura, para que as máquinas com usuários em que você não confia não possam fazer modificações. Quando precisar fazer alterações legitimamente, você pode se conectar ao servidor NFS e fazer nossas alterações lá.

Usamos isso para nossos servidores da Web, para que uma exploração bem-sucedida contra o servidor da Web não consiga inserir ou alterar nenhum arquivo que o servidor enviaria novamente ou alterar a configuração.

Observe que isso pode ser ignorado da mesma maneira que todos os relacionados ao ponto de montagem:

  • Faça uma cópia do diretório protegido
  • Desmonte o diretório
  • Mova a cópia no lugar da montagem ou ligue-a novamente se essa montagem não tiver espaço suficiente.

Por que é uma "idéia muito, muito ruim" fazer backup de um arquivo importante regularmente e também fazer um esforço para proteger o original contra exclusão acidental? Na pergunta original do OP e no comentário do OP sobre a resposta que você mencionou, fica claro que a preocupação não é uma atividade maliciosa, mas uma atividade acidental / incompetente.
Craig

1
@ Craig: é uma má idéia ter muitos usuários com root, especialmente se eles não são confiáveis ​​para não mexer com arquivos críticos.
Joe H.

Ah ... bem, claro que é. :-) Mas esse não era o cerne da pergunta do OP. O OP afirmou que não são usuários com acesso de raiz que devem ser protegidos contra a exclusão acidental de um arquivo.
Craig

@ Craig: pode não ser o cerne da questão, mas é o cerne do problema (problema XY?) ... mas não tenho idéia do que eles estão fazendo como raiz, por isso, se pudessem usar setuid e / ou privilégios limitados de sudo. E você deve reler a pergunta, pois não vejo menção a Jerry de que ele está apenas tentando se proteger contra a remoção não intencional ("preciso garantir que não seja excluído") e ele apenas deu um acompanhamento que eu veja (o que desencadeou minha resposta).
Joe H.


2

Por que não criar uma imagem ISO 9660, que é somente leitura por design?

Monte a imagem ISO e ela se parecerá com um CD-ROM, mas com o desempenho de um disco rígido, e os arquivos na imagem montada estarão tão seguros quanto a exclusão como os arquivos em um CD-ROM físico.

A idéia de gravar o arquivo confidencial em um CD e executá-lo a partir de um CD-ROM é interessante, assumindo que definir o bit imutável no arquivo não seja suficiente.

Existem problemas negativos em potencial com a execução de um CD físico, incluindo o desempenho (as unidades de CD-ROM são muito, muito mais lentas que os discos rígidos ou SSDs). Existe a probabilidade de o CD-ROM ser removido por um indivíduo bem-intencionado e substituído por um disco diferente ao qual eles precisam acessar. É provável que uma pessoa mal-intencionada apenas retire o disco e jogue-o no microondas (ou na lixeira), "excluindo" seu arquivo. Existe o inconveniente de ter que ter uma unidade de CD-ROM de hardware dedicada apenas para esse arquivo e outros fatores.

Porém, o OP deixou claro que o objetivo principal é proteger contra exclusão acidental, não contra atos maliciosos, e que o (s) arquivo (s) em questão é copiado e recuperável em caso de acidente, mas é altamente desejável que o arquivo nunca acidentalmente excluído.

Parece que a execução do arquivo a partir de uma imagem ISO montada satisfaria o requisito.


1
O Root ainda pode excluir um arquivo manipulando a imagem diretamente. É apenas um arquivo normal que está montado.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Como assim? ISO 9660 por design é imutável. A parte que fez essa alteração teria que excluir e substituir o arquivo ISO inteiro. Não que eles não pudessem fazer isso. Mas eles não puderam entrar e excluir cirurgicamente um arquivo sem uma tremenda experiência, se ainda assim. Seria muito mais fácil remover um CD-ROM físico de uma unidade e jogá-lo em uma lixeira. ;-)
Craig

Não precisa ser sofisticado - basta substituir o arquivo de imagem com zeros.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Vou admitir esse ponto com bastante facilidade. A ressalva é que seria necessário desmontar intencionalmente a imagem e substituí-la. Um criminoso completo seria justamente shrednesse ponto. Mas, a menos que você esteja negando acesso físico à máquina, ainda parece mais fácil retirar um CD físico da unidade e jogá-lo no dumpster do que desmontar e substituir o arquivo ISO, embora seja fácil. E o OP declarou que o arquivo importante é copiado regularmente, portanto, essa é apenas uma medida extra contra danos acidentais, não contra travessuras maliciosas.
Craig

Mencionei como alterar uma imagem ISO9660, mesmo que seja imutável. Meu argumento é que, se um pouco é gravável, o root pode escrevê-lo.
Thorbjørn Ravn Andersen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.