Introdução
No Linux, certos atributos de ficheiros e diretórios só podem ser consultados ou modificados com comandos específicos. Estes atributos permitem restringir as operações com ficheiros, como impedir a eliminação ou modificação, mesmo pelo utilizador root. Esta funcionalidade é particularmente útil para proteger ficheiros e diretórios críticos.
Neste guia, vamos abordar dois comandos essenciais:
chattr: usado para definir ou remover atributos de ficheiro.lsattr: usado para ver os atributos de ficheiro.
Estes comandos são habitualmente usados em sistemas de ficheiros ext2, ext3 e ext4 e são ferramentas fundamentais para os administradores de sistemas.
O que é o comando chattr ?
O comando chattr permite-te alterar os atributos de ficheiro num sistema de ficheiros Linux. Usa modos simbólicos para adicionar, remover ou definir atributos específicos. Estes atributos podem controlar o comportamento dos ficheiros, por exemplo, tornando-os imutáveis ou só de adição.
Principais funcionalidades de chattr:
- Proteger ficheiros contra eliminações ou modificações acidentais.
- Restringir as operações com ficheiros, mesmo para utilizadores root.
- Permitir gestão avançada de ficheiros e segurança.
Documentação oficial de chattr
Para mais detalhes, consulta a documentação oficial de chattr :
Linux Man Pages – chattr
O que é o comando lsattr ?
O comando lsattr lista os atributos de ficheiros e diretórios num sistema de ficheiros ext2, ext3 ou ext4 . É particularmente útil para resolver problemas quando encontras problemas de acesso a ficheiros.
Principais funcionalidades de lsattr:
- Ver os atributos de ficheiro num formato fácil de ler.
- Resolver problemas de acesso e modificação causados pelos atributos de ficheiro.
Documentação oficial de lsattr
Para mais detalhes, consulta a documentação oficial de lsattr :
Linux Man Pages – lsattr
Sintaxe dos comandos
chattr Sintaxe do comando
chattr [ -RVf ] [ -v version ] [ -p project ] [ + | - | = [attributes] ] files...
Explicação:
-R: alterar recursivamente os atributos dos diretórios e do seu conteúdo.-V: mostrar a saída detalhada e a versão do programa.-f: suprimir a maioria das mensagens de erro.-v version: definir o número de versão/geração do ficheiro.-p project: definir o número de projeto do ficheiro.+: adicionar os atributos especificados.-: remover os atributos especificados.=: definir os atributos exatamente como especificado.attributes: uma combinação de indicadores de atributo (por exemplo,i,a, etc.).files...: ficheiros ou diretórios de destino.
Exemplos:
- Adicionar o atributo imutável:
chattr +i filename - Remover o atributo só de adição:
chattr -a filename - Definir os atributos exatamente (por exemplo, imutável e só de adição):
chattr =ia filename
lsattr Sintaxe do comando
lsattr [ -RVadlpv ] [ files... ]
Explicação:
-R: listar recursivamente os atributos dos diretórios e do seu conteúdo.-V: mostrar a versão do programa.-a: listar todos os ficheiros, incluindo ficheiros ocultos (os que começam por.).-d: listar os diretórios como ficheiros normais, em vez de listar o seu conteúdo.-l: imprimir as opções com nomes longos em vez de abreviaturas de uma só letra.-p: listar o número de projeto do ficheiro.-v: listar o número de versão/geração do ficheiro.files...: ficheiros ou diretórios de destino.
Exemplos:
- Mostrar os atributos de um ficheiro:
lsattr filename - Mostrar os atributos de todos os ficheiros de um diretório:
lsattr /path/to/directory
Atributos de ficheiro comuns e os seus indicadores
A tabela abaixo resume os atributos de ficheiro mais comuns e os seus significados:
| Atributo | Indicador | Descrição |
|---|---|---|
| Só de adição | a | O ficheiro só pode ser aberto em modo de adição para escrita. |
| Imutável | i | O ficheiro não pode ser modificado, eliminado nem renomeado. |
| Sem atime | A | A hora de acesso ao ficheiro (atime não é atualizada para reduzir a E/S de disco. |
| Sem dump | d | O ficheiro é excluído das cópias de segurança feitas com o programa dump . |
| Registo de dados | j | Os dados do ficheiro são escritos no journal antes de serem escritos no próprio ficheiro. |
| Atualizações síncronas | S | As atualizações do ficheiro são escritas de forma síncrona no disco. |
| Ineliminável | u | Quando o ficheiro é eliminado, os seus dados são guardados para uma possível recuperação. |
Para veres a lista completa de atributos, consulta a página de manual de chattr :
Linux Man Pages – chattr
Resolução de problemas com chattr e lsattr
Problema: não é possível modificar nem eliminar um ficheiro
Se encontrares um erro como este:
E212: Can't open file for writing
Segue estes passos:
- Verificar as permissões do ficheiro
Verifica as permissões do ficheiro com:ls -l filename - Verificar os atributos do ficheiro
Usa o comandolsattrpara verificar se há atributos que possam restringir as modificações:lsattr filename - Remover os atributos restritivos
Se o ficheiro tiver o atributoi(imutável) oua(só de adição), remove-o com o comandochattr:chattr -i filename chattr -a filename - Verificar as alterações
Volta a executar o comandolsattrpara confirmar que os atributos foram removidos:lsattr filename
Exemplo prático: a Atributo
Cenário:
Não consegues modificar nem renomear o ficheiro /etc/ssh/known_hosts.
Passos para resolver:
- Verifica os atributos do ficheiro:
lsattr /etc/ssh/known_hosts - Se o atributo
aestiver definido, remove-o:chattr -a /etc/ssh/known_hosts - Verifica que o atributo foi removido:
lsattr /etc/ssh/known_hosts - Agora já deves conseguir guardar ou renomear o ficheiro.
Conclusão
O comando chattr e lsattr são ferramentas inestimáveis para gerir os atributos de ficheiro no Linux. Proporcionam uma camada adicional de proteção para ficheiros e diretórios críticos, o que os torna essenciais para os administradores de sistemas. Quer estejas a proteger ficheiros de configuração, quer a resolver problemas de acesso a ficheiros, dominar estes comandos vai melhorar a tua experiência com Linux.