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?
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?
Respostas:
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
i
atributo 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 oCAP_LINUX_IMMUTABLE
recurso pode definir ou limpar esse atributo.
chflags schg
Grave em um CD. Coloque o CD em uma unidade de CD-ROM e acesse-o a partir daí.
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
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
squashfs
ou cramfs
que são compactados e somente leitura. Ele precisa de uma ferramenta especial para construir o sistema de arquivos.
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.
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.
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.
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
.
umount
no arquivo obtenha permissões de gravação novamente
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:
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.
shred
nesse 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.
chattr +i
pode ajudar, mas tornará o arquivo somente leitura (e pode ser substituídochattr -i
), também é possível tentar protegê-lo com o SELInux etc.