Pesquisa de site

5 comandos 'chattr' para tornar arquivos importantes IMUTÁVEIS (inalteráveis) no Linux


chattr (Change Attribute) é um utilitário de linha de comando do Linux usado para definir/desativar certos atributos de um arquivo no sistema Linux para proteger a exclusão ou modificação acidental de arquivos e pastas importantes, mesmo que você esteja logado como usuário root.

Em sistemas de arquivos nativos do Linux, ou seja, ext2, ext3, ext4, btrfs, etc. suporta todos os sinalizadores, embora todos os sinalizadores não suportem todos os FS não nativos. Não é possível excluir ou modificar arquivo/pasta uma vez que os atributos são definidos com o comando chattr, mesmo que se tenha permissão total sobre ele.

Isso é muito útil para definir atributos em arquivos de sistema, como arquivos passwd e shadow, onde estão contidas as informações do usuário.

Sintaxe do chattr
chattr [operator] [flags] [filename]
Atributos e sinalizadores

A seguir está a lista de atributos comuns e sinalizadores associados que podem ser ativados/desativados usando o comando chattr.

  1. Se um arquivo for acessado com o atributo ‘A’ definido, seu registro atime não será atualizado.
  2. Se um arquivo for modificado com o conjunto de atributos ‘S’, as alterações serão atualizações sincronizadas no disco.
  3. Um arquivo é definido com o atributo ‘a’ e só pode ser aberto no modo anexar para gravação.
  4. Um arquivo é definido com o atributo ‘i’, não pode ser modificado (imutável). Significa sem renomeação, sem criação de link simbólico, sem execução, sem permissão de escrita, apenas o superusuário pode cancelar a definição do atributo.
  5. Um arquivo com o atributo ‘j’ é definido, todas as suas informações são atualizadas no diário ext3 antes de serem atualizadas no próprio arquivo.
  6. Um arquivo é definido com o atributo ‘t’, sem fusão final.
  7. Um arquivo com o atributo ‘d’ não será mais candidato para backup quando o processo de dump for executado.
  8. Quando um arquivo tem o atributo ‘u’ excluído, seus dados são salvos. Isso permite que o usuário solicite sua recuperação.
Operador
  1. + : Adiciona o atributo ao atributo existente dos arquivos.
  2. : Remove o atributo do atributo existente dos arquivos.
  3. = : Mantém os atributos existentes que os arquivos possuem.

Aqui, vamos demonstrar alguns exemplos de comando chattr para definir/desativar atributos em um arquivo e pastas.

1. Como adicionar atributos em arquivos para evitar exclusão

Para fins de demonstração, usamos a pasta demo e o arquivo important_file.conf respectivamente. Antes de configurar atributos, certifique-se de verificar se os arquivos existentes possuem algum atributo definido usando o comando ‘ls -l’. Você viu os resultados? Atualmente nenhum atributo está definido.

[root@tecmint tecmint]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf

Para definir o atributo, usamos o sinal + e para desdefini-lo usamos o sinal com o comando chattr. Então, vamos definir bits imutáveis nos arquivos com sinalizadores +i para evitar que alguém exclua um arquivo, mesmo um usuário root não tenha permissão para excluí-lo.

[root@tecmint tecmint]# chattr +i demo/
[root@tecmint tecmint]# chattr +i important_file.conf

Nota: O bit imutável +i só pode ser definido pelo usuário superusuário (ou seja, root) ou um usuário com privilégios sudo pode ser capaz de definir .

Depois de definir o bit imutável, vamos verificar o atributo com o comando ‘lsattr‘.

[root@tecmint tecmint]# lsattr
----i----------- ./demo
----i----------- ./important_file.conf

Agora, tentei excluir à força, renomear ou alterar as permissões, mas não foi permitido, diz “Operação não permitida“.

[root@tecmint tecmint]# rm -rf demo/
rm: cannot remove âdemo/â: Operation not permitted
[root@tecmint tecmint]# mv demo/ demo_alter
mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[root@tecmint tecmint]# chmod 755 important_file.conf
chmod: changing permissions of âimportant_file.confâ: Operation not permitted

2. Como cancelar atributos em arquivos

No exemplo acima, vimos como definir o atributo para proteger e evitar que os arquivos sejam excluídos acidentalmente. Aqui neste exemplo, veremos como redefinir (desativar o atributo) as permissões e permitir tornar os arquivos alteráveis ou alteráveis usando < forte>-i flag.

[root@tecmint tecmint]# chattr -i demo/ important_file.conf

Após redefinir as permissões, verifique o status imutável dos arquivos usando o comando ‘lsattr’.

[root@tecmint tecmint]# lsattr
---------------- ./demo
---------------- ./important_file.conf

Você vê nos resultados acima que o sinalizador ‘-i’ foi removido, o que significa que você pode remover com segurança todos os arquivos e pastas que residem na pasta tecmint.

[root@tecmint tecmint]# rm -rf *

[root@tecmint tecmint]# ls -l
total 0

3. Como proteger arquivos /etc/passwd e /etc/shadow

Definir atributos imutáveis em arquivos /etc/passwd ou /etc/shadow os torna protegidos contra remoção acidental ou adulteração e também desabilitará a criação de contas de usuário.

[root@tecmint tecmint]# chattr +i /etc/passwd
[root@tecmint tecmint]# chattr +i /etc/shadow

Agora tente criar um novo usuário do sistema, você receberá uma mensagem de erro dizendo 'não é possível abrir /etc/passwd'.

[root@tecmint tecmint]# useradd tecmint
useradd: cannot open /etc/passwd

Dessa forma, você pode definir permissões imutáveis em seus arquivos importantes ou arquivos de configuração do sistema para evitar exclusão.

4. Anexar dados sem modificar os dados existentes em um arquivo

Suponha que você queira apenas permitir que todos anexem dados em um arquivo sem alterar ou modificar os dados já inseridos. Você pode usar o atributo ‘a’ da seguinte forma.

[root@tecmint tecmint]# chattr +a example.txt

[root@tecmint tecmint]# lsattr example.txt
-----a---------- example.txt

Depois de definir o modo de acréscimo, o arquivo pode ser aberto para gravação de dados somente no modo de acréscimo. Você pode cancelar a definição do atributo anexar da seguinte maneira.

[root@tecmint tecmint]# chattr -a example.txt

Agora tente substituir o conteúdo já existente em um arquivo example.txt, você receberá um erro dizendo ‘Operação não permitida‘.

[root@tecmint tecmint]# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

Agora tente anexar novo conteúdo a um arquivo existente example.txt e verifique-o.

[root@tecmint tecmint]# echo "replace contain on file." >> example.txt
[root@tecmint tecmint]# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.

5. Como proteger diretórios

Para proteger todo o diretório e seus arquivos, usamos a opção ‘-R’ (recursivamente) com o sinalizador ‘+i’ junto com o caminho completo da pasta.

[root@tecmint tecmint]# chattr -R +i myfolder

Após definir o atributo recursivamente, tente excluir a pasta e seus arquivos.

[root@tecmint tecmint]# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted

Para cancelar a permissão, usamos a mesma opção ‘-R’ (recursivamente) com o sinalizador ‘-i’ junto com o caminho completo da pasta.

[root@tecmint tecmint]# chattr -R -i myfolder

É isso! Para saber mais sobre os atributos, sinalizadores e opções do comando chattr, use as páginas man.