Controle de atributos de arquivos com chattr e lsattr
Em alguns cenários, mesmo com permissões de superusuário (root), é impossível modificar ou excluir um arquivo. A causa mais comum está no uso do comando chattr, que bloqueia o arquivo por meio de atributos de sistema de arquivos. Esses atributos operam em nível mais baixo do que as permissões tradicionais gerenciadas por chmod, oferecendo um controle mais rígido sobre a integridade dos dados.
O chattr permite definir propriedades que são suportadas pelo kernel Linux, sendo amplamente utilizado em ambientes produtivos com versões acima do 2.6. Embora seja uma ferramenta poderosa para aumentar a segurança do sistema, ela não deve ser aplicada indiscriminadamente — especialmente em diretórios críticos como /, /dev, /tmp ou /var, onde operações dinâmicas são frequentes.
O lsattr é o complemento direto: exibe os atributos atuais configurados via chattr.
Modos de operação do chattr
Sua sintaxe básica é:
chattr [ -RVf ] [ -v version ] [ mode ] arquivos
O campo mode é o mais importante e consiste em combinações de operadores (+/-/=) com caracteres que representam atributos específicos:
- +: Adiciona atributos ao conjunto existente.
- -: Remove atributos do conjunto atual.
- =: Define o conjunto de atributos exatamente como especificado.
- a: Permite apenas anexação de dados (append-only). O arquivo só pode receber novos conteúdos, mas não pode ser modificado ou excluído.
- i: Torna o arquivo imutável. Nenhum processo pode modificá-lo, renomeá-lo, apagá-lo ou adicionar conteúdo. Apenas root ou processos com o privilégio
CAP_LINUX_IMMUTABLEpodem alterar esse estado. - A: Impede alterações no tempo de acesso (access time), útil para reduzir I/O desnecessário em dispositivos móveis.
- S: Garante escrita sincronizada no disco, semelhante ao
sync. - c: Habilita compressão transparente durante armazenamento.
- d: Evita que o arquivo seja incluído em backups feitos pelo utilitário
dump. - j: Ativa journaling em ssitemas montados com
data=orderedoudata=writeback. - s: Apaga o conteúdo do arquivo de forma segura, sobrescrevendo todos os blocos de dados.
- u: Mantém o conteúdo no disco após exclusão, permitindo recuperação posterior.
Exemplos práticos
Proteger um arquivo crítico contra alterações:
chattr +i /etc/resolv.conf
Após isso, tentativas de mover, renomear ou editar o arquivo falharão com "Operation not permitted". Editores como vim exibirão avisos como W10: Warning: Changing a readonly file. Para reverter, use:
chattr -i /etc/resolv.conf
Verifique os atributos atuais com:
lsattr /etc/resolv.conf
# Saída esperada: ----i-------- /etc/resolv.conf
Garantir que um log só aceite novos registros:
chattr +a /var/log/messages
Essa configuração é ideal para arquivos de log, pois impede que qualquer usuário (inclusive root) remova ou substitua o conteúdo existente, preservando a integridade histórica.