você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito sobre Programação Shell Linux

Protegendo arquivos e diretórios contra apagamento inadvertido

Colaboração: Sydnei Lucchesi Le Petit

Data de Publicação: 21 de maio de 2020

Quem já escreveu um script que roda em ambiente texto provavelmente já deve ter se deparado com a triste constatação de ter apagado, inadvertidamente aquele programa tão necessário, importante e especialmente, utilizado. Dá um frio na barriga e uma sensação de ter perdido o chão, não é mesmo? Ainda mais se não se tem o hábito de realizar backup.

Eu sei bem disso, pois passei por isso algumas vezes e pesquisando, descobri um comando ótimo para evitar que tragédias assim aconteçam novamente e deu certo, pois inadvertidamente eu teria repetido o erro.

O comando é o chattr, que com duas de suas opções, impede que os arquivos sejam apagados, até mesmo pelo root.

Mas o comando é muito mais eficiente do que isso e com um pouco de atenção e dedicação, identificará aqueles atributos que lhe são mais convenientes.

O comando chattr serve para incrementar segurança no arquivo ou diretório, usando atributos e não permissões como o chmod. Esses atributos são extensões que proíbem que o arquivo seja alterado, removido, renomeado e esses atributos pode ser atribuídos para o dono do arquivo e até mesmo para o root, mas, apenas o root é quem pode mudar essas atribuições, seja pelo usuário root propriamente dito ou através do comando sudo.

Sintaxe:

chattr [opção] [atributo] [arquivo/diretório] 

Opções:

-R modifica atributos em subdiretórios.
-V Mostra detalhes sobre a modificação do atributo:

Atributos de arquivo / diretório

+ adiciona atributo
- remove atributo
= define o atributo igual especificado

Os atributos são os seguintes:

A Não modifica a hora de acesso ao arquivo (somente em kernel 2.2)
a Append Only, arquivo pode somente ser gravado em modo incrementado, ou seja, pode ser adicionado conteúdo somente no final do arquivo, não pode ser removido ou renomeado.
c Permite compactação nos arquivos especificados de forma transparente.
d Protege para o dump não fazer backup do arquivo.
i Imutáveis. Arquivos Imutáveis não podem ser modificados, gravados, removidos, renomeados. Até mesmo o usuário root com poder máximo não pode alterar.
s É chamado de apagamento seguro, quando eliminado o arquivo é zerado sem possibilidade de recuperação.
S Faz a gravação imediatamente para o arquivo especificado, como sync, ex: igual aos disquetes.
u É marcado como recuperável, quando apagado é salva uma copia para permitir recuperação.

OBS: Quem utiliza Kernel 2.6 ou mais recentes não precisa se preocupar com os atributos, somente kernel abaixo de 2.6 que precisa de compilação em alguns casos.

Exemplos



Com arquivo:

$ sudo chattr +AsdiSu teste.txt
--S-iadA---------- teste.txt

Análise:

+ Adiciona o atributo que se segue.
A Não modifica a hora de acesso ao arquivo (somente em kernel 2.2).
d Protege para o dump não fazer backup do arquivo.
i Imutáveis. Arquivos Imutáveis não podem ser modificados, gravados, removidos, renomeados. Até mesmo o usuário root com poder máximo não pode alterar.
S Faz a gravação imediatamente para o arquivo especificado, como sync, ex: igual aos disquetes.
u É marcado como recuperável, quando apagado é salvo uma copia para permitir recuperação.
$ sudo chattr -SdA teste.txt
----ia------------ teste.txt

Análise

- Remove o atributo que se segue
S Faz a gravação imediatamente para o arquivo especificado, como sync, ex: igual aos disquetes.
d Protege para o dump não fazer backup do arquivo.
A Não modifica a hora de acesso ao arquivo (somente em kernel 2.2).

Com diretório:

$ sudo chattr +iAd diretório
----i-dA---------- diretório

Análise:

+ Adiciona o atributo que se segue.
A Não modifica a hora de acesso ao arquivo (somente em kernel 2.2).
d Protege para o dump não fazer backup do arquivo.

Caso deseje apenas proteger seu script contra eventual apagamento, até mesmo pelo root, como foram os meus casos:

$ sudo chattr +i backup.sh 

E se, por ventura, quiser fazer alguma atualização no script.

$ sudo chattr -i backup.sh

Faça a atualização no código, mas não se esqueça de protegê-lo novamente...

$ sudo chattr + i backup.sh

Agora, se não precisa mais desse script e quer apenas apagá-lo...

$ sudo chattr -i backup.sh 

Daí é só apagar o arquivo.

LEMBRE-SE: Os atributos só podem ser alterados pelo root ou então através do comando sudo.

O comando chattr tem um amigo chamado lsattr que lista os atributos atribuídos a um arquivo/diretório.

O comando lsattr

Comando que lista os atributos atribuídos a um arquivo/diretório.

Sintaxe



lsattr [opção] [arquivo/diretório]

Opções:

-a Lista todos os arquivo, incluindo os ocultos.
-d Lista os atributos de diretórios.
-R Lista um diretório e seus subdiretórios.
-v Mostra versões dos arquivos.

Exemplos



# lsattr -d diretório
----i-dA---------- diretório
# lsattr -v teste.txt
54 ----ia--------- teste.txt
# lsattr -dv diretório
15 ----i-dA------- diretório/

Remoção de um diretório com atributo i adicionado:

# lsattr -d diretório
----i------------- diretório/

Comando com usuário root:

# rm -rfv diretório
rm: cannot remove directory `diretório/': Operação não permitida

OBS: Não deixou remover o diretório mesmo sendo com usuário root.

Referências



Veja a relação completa dos artigos de Sydnei Lucchesi Le Petit