De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
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
.