
Eu tenho um script que verifica a presença de um arquivo e, se existir, lê uma lista de endereços de e-mail dele para enviar notificações. Quando não preciso ser notificado, por exemplo, quando estou no trabalho já monitorando a saída, vou renomeá-la. Só não quero que outros administradores o excluam.
Eu sei chattr +i
que tornará o arquivo imutável, mas só quero evitar que o arquivo seja excluído. Acho que o programa chattr usaria o número do inode para rastrear atributos e não o nome do arquivo.
Existe um utilitário que pode fazer isso acontecer?
Responder1
Aquele comentário sobre "outros administradores" sugere que vocêroot
privilégio no sistema onde você deseja armazenar o arquivo. Qualquer coisa que você possa configurar em termos de permissões pode ser desfeita por alguém com os mesmos privilégios.
Se isso não for uma preocupação e ninguém tiver privilégios estendidos, você poderá simplesmente colocar o arquivo em /tmp
or /var/tmp
, que geralmente tem o bit t definido (evitando que outrosnãousuários privilegiados deexcluindoisto. Você pode chmod o arquivo para torná-lo gravável em grupo (e modificável por outras pessoas no mesmo grupo).
Responder2
Os "outros administradores" são maliciosos? Eles estão atrás de você? Se sim, provavelmente não há nada que você possa fazer.
Caso contrário, talvez a solução mais simples seja alterar o script para colocar o arquivo em seu diretório inicial. Uma variação disso é criar links físicos para o arquivo em diferentes diretórios; contanto que eles não excluam (desvinculem)todosos links, o arquivo ainda estará intacto. (Você deve escrever outro script para percorrer todos os locais dos links, encontrar um que ainda exista e, em seguida, vincular novamente todos os que foram removidos.) Cuidado, pois alguns editores quebram os links (ou seja, se você editar o arquivo).
Isso pode resolver o problema mesmo que os "outros administradores" sejam maliciosos e/ou estejam atrás de você, se forem inexperientes e não minuciosos.
Ou torne o arquivo imutável e altere o script para usar algum outro teste para determinar se os e-mails devem ser enviados.
Responder3
Relativamente ao ponto levantado em algumas das outras respostas, você poderia usar o mv
utilitário para sugerir uma barreira social:
mv yourfile THIS_IS_user38537_FILE_PLEASE_DO_NOT_REMOVE
Responder4
[Substituição da resposta antiga]
Você poderia simplesmente criar um link físico para o arquivo:
ln email_file hard_link
Então, se for excluído, ele ainda existirá e poderá ser facilmente restaurado.
[Resposta antiga, baseada no mal-entendido do problema]
Uma solução seria tornar o próprio script imutável com chattr
, mas ligá-lo e desligá-lo, não renomeando-o, mas com a presença ou ausência de um arquivo vazio que você pode perder. Chame-o, digamos,
snoozebutton
. Se existir, o script não notifica. Se não estiver lá, o script notifica. Fazer isso dessa maneira não é seguro se alguém o excluir acidentalmente: você recebe suas notificações e também é notificado de que algo aconteceu com snoozebutton
.
Isso pressupõe que você não precise modificar o script com frequência, é claro. Se fizer isso, você desejará que um pequeno script utilitário seja executado chattr
, execute o editor e execute chattr
para bloqueá-lo novamente.