fbpx

Comandos Linux – Comando chattr

Comandos Linux chattr e lsattr

Atualizado: 05/04/2019 por Computer Hope

Comandos chattr e lsattr

Nos sistemas operacionais Linux , o comando chattr modifica os atributos dos arquivos e lsattr os lista (os exibe).

No Linux, atributos de arquivo são sinalizadores que afetam como o arquivo é armazenado e acessado pelo sistema de arquivos . Eles são metadados armazenados no inode associado do arquivo.

Descrição

chattr e lsattr fazem parte do pacote de software e2fsprogs , disponível com esse nome na maioria dos gerenciadores de pacotes. A página inicial do e2fsprogs está localizada em http://e2fsprogs.sourceforge.net .

NotaOs atributos não são iguais às permissões de arquivo. Para obter informações sobre como definir permissões, consulte chmod .

Sintaxe: chattr

  chattr [ -R ] [ -V ] [ -f ] [ -v versão ] [ -p projeto ] modo ... arquivo ...

Opções

O chattr utiliza as seguintes opções:

-RAltere recursivamente os atributos dos diretórios e seu conteúdo.
-VForneça saída detalhada e exiba a versão do programa.
-fSuprima a maioria das mensagens de erro.
-v versionDefina o número da versão / geração do arquivo. Este é um número arbitrário de nove dígitos atribuído a um arquivo quando ele é criado. Não é único. Pode ser alterado para qualquer outro número arbitrário.
projeto -pDefina o número do projeto do arquivo.
mode …Uma ou mais seqüências de modo. Para mais informações, consulte Strings de modo , abaixo.
arquivo …O arquivo ou arquivos a serem alterados.

Cordas de modo

Uma string de modo consiste em um operador e um ou mais atributos . Assume a forma:

  { + |  - |  = } [ aAcCdDeijsStTu ]

Um dos seguintes operadores deve aparecer no início de uma string de modo :

characterOperação
+Os atributos listados serão adicionados ao arquivo.
Os atributos listados serão removidos do arquivo.
=Os atributos listados serão adicionados; quaisquer atributos omitidos serão removidos.

O restante da string de modo é uma série de caracteres, cada um representando um atributo. Eles diferenciam maiúsculas de minúsculas, não podem ser separados por espaços em branco e podem aparecer em qualquer ordem. Para uma lista de caracteres de atributo, consulte Atributos , abaixo.

As seqüências de modo de exemplo são ” + caS “, ” -Asd ” e ” = eAsS “.

É possível especificar várias seqüências de modo para combinar operadores + e  em um único comando, por exemplo, ” + asD -c ” e ” -a + s + D -c ” são válidos.

Sintaxe: lsattr

  lsattr [ -R ] [ -V ] [ -a ] [ -d ] [ -v ] arquivo ...

Opções

-RListe recursivamente os atributos dos diretórios e seu conteúdo.
-VExibe a versão do programa.
-aListe todos os arquivos em um diretório, incluindo aqueles cujo nome começa com um ponto (‘ . ‘).
-dListar diretórios como arquivos regulares , em vez de listar seu conteúdo.
-vListe o número da versão / geração do arquivo, além de seus atributos.

Lista de Atributos

Os seguintes caracteres representam atributos que podem ser modificados pelo chattr ou listados com lsattr .

personagematributodescrição
aacrescentar apenasO arquivo pode ser aberto apenas para gravação no modo de acréscimo : seus dados existentes podem não ser substituídos . Não pode ser excluído ou renomeado ; links físicos não podem ser criados para este arquivo; a maioria dos seus metadados não pode ser alterada. Modificar este atributo requer privilégios de root.
Asem atualizações atimeQuando o arquivo é acessado, seu registro atime não é modificado, o que em algumas situações pode reduzir a E / S do disco.
ccomprimidoArquivos com este atributo são compactados automaticamente pelo kernel quando gravados no disco. Seu conteúdo é descompactado quando lido. Nota: Este atributo não tem efeito nos sistemas de arquivos ext2, ext3 e ext4.
Cnenhuma cópia na gravaçãoOs arquivos com este atributo não estão sujeitos a atualizações de cópia na gravação. Se esse atributo estiver definido em um diretório, novos arquivos criados nesse diretório terão esse atributo definido. Nota: Este atributo é eficaz apenas em sistemas de arquivos que executam cópia na gravação. No btrfs, esse atributo deve ser definido em arquivos novos ou vazios. Se esse atributo for definido após um arquivo btrfs já conter dados, o tempo em que seus dados estarão estáveis ​​será indefinido.
dsem lixeiraOs arquivos com esse atributo são ignorados em qualquer backup iniciado pelo dump , uma ferramenta herdada para sistemas de arquivos ext2.
Datualizações de diretório síncronasAs alterações em um diretório com esse atributo são gravadas de forma síncrona no disco. Ou seja, o sistema aguarda a conclusão da gravação antes de fazer outra coisa. Equivalente à opção dirsync do comando mount , aplicada a um subconjunto de arquivos em um sistema de arquivos.
eextensões de blocoIndica que um arquivo deve ser armazenado usando extensões de bloco . Os dados são armazenados contiguamente entre dois blocos, e somente esses dois blocos devem ser conhecidos para localizar os dados do arquivo. O mapeamento da extensão do bloco pode economizar potencialmente espaço em disco, pois reduz o número de blocos que devem ser listados no inode do arquivo.
iimutávelArquivos com este atributo não podem ser excluídos ou renomeados; links físicos não podem ser criados para este arquivo; a maioria de seus metadados não pode ser alterada; os dados não podem ser gravados no arquivo. A modificação desse atributo requer raiz ou um processo com o recurso CAP_LINUX_IMMUTABLE, conforme definido com setcap .
jdiário de dadosUm arquivo com esse atributo tem todos os seus dados gravados em seu diário antes de serem gravados no próprio arquivo. Somente é eficaz nos sistemas de arquivos ext3 e ext4 que têm o diário ativado e as opções “data = ordenado” ou “data = writeback” definidas. Se o registro no diário estiver ativado nesses sistemas, mas a opção “data = journal” estiver configurada, esse atributo não terá efeito. Somente a raiz ou um processo com o recurso CAP_SYS_RESOURCE, conforme configurado com setcap, pode alterar esse atributo.
Phierarquia do projetoUm diretório com esse atributo aplicará uma estrutura hierárquica para os IDs do projeto. Os arquivos e diretórios criados no diretório herdarão a ID do projeto. As operações de renomeação são restritas; portanto, quando esses arquivos ou diretórios forem movidos para outro diretório, os IDs do projeto corresponderão. Os links físicos para esses arquivos só podem ser criados se o ID do projeto do destino e destino corresponderem.
sexclusão seguraSe um arquivo com este atributo for excluído, seus dados serão substituídos por zeros, semelhante a um fragmento simples. Este atributo é ignorado pelos sistemas de arquivos ext2, ext3 e ext4.
Satualizações síncronasQuando arquivos com este atributo são modificados, as alterações são gravadas de forma síncrona no disco. Equivalente à opção de sincronização do comando mount , para arquivos individuais.
tsem cauda se fundindoUm arquivo com esse atributo não terá nenhum fragmento de bloco parcial no final do arquivo compartilhado com os dados de outro arquivo. Esse atributo é necessário para softwares como o LILO , que lê o sistema de arquivos diretamente e não tem conhecimento da mesclagem final. Alguns sistemas de arquivos não suportam mesclagem de cauda, ​​caso em que este atributo não tem efeito.
Ttopo da hierarquia de diretóriosUm diretório com esse atributo é considerado o topo das hierarquias de diretório pelo alocador de blocos Orlov, usado pelo ext2 e ext3. O atributo fornece uma dica para o alocador de que os subdiretórios não estão relacionados na maneira como são usados ​​e seus dados devem ser separados quando os blocos são alocados. Por exemplo, o diretório / home pode ter esse atributo, indicando que / home / mary e / home / john devem ser colocados em grupos de blocos separados.
uundeletableQuando um arquivo com esse atributo é excluído, seu conteúdo é salvo, possibilitando sua remoção posterior. As ferramentas de exclusão que podem tirar vantagem desse atributo incluem extundelete .

Atributos somente leitura

Os seguintes atributos são somente leitura. Eles não podem ser definidos ou desabilitados pelo chattr , mas podem ser listados por lsattr .

personagemsignificadodescrição
Eerro de compressãoO sistema de arquivos não pode compactar automaticamente esse arquivo.
harquivo enormeO arquivo está armazenando seus blocos em unidades do tamanho do bloco do sistema de arquivos em vez de em setores . O arquivo é, ou era anteriormente, maior que 2 TB .
Idiretório indexadoO diretório está sendo indexado com uma árvore de hash (htree).
Ndados em linhaO arquivo possui dados armazenados em linha, dentro do próprio inode.
Xacesso bruto de compactaçãoUm atributo experimental indicando que o conteúdo bruto de um arquivo compactado pode ser acessado diretamente.
Zarquivo sujo compactadoUm atributo experimental que indica que um arquivo compactado está sujo (gravado incompletamente).

Exemplos

Exibir atributos de arquivos

Neste exemplo, criaremos três arquivos vazios com o toque :

  touch file file2 .file

Podemos visualizar suas permissões com ls , usando a opção -l :

  ls -l
  total 8
  -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file
  -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2

Os nomes de arquivos que começam com um ponto (ponto) não são listados por ls , a menos que a opção -a seja usada:

  ls -a
  total 28
  -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file
  -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 .file
  -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2

Agora vamos ver os atributos executando lsattr :

  lsattr
  ------------- e-- ./file
 ------------- e-- ./file2

Assim como em ls , devemos usar a opção -a para visualizar arquivos cujo nome começa com um ponto:

  lsattr -a
  ------------- e-- ./file
 ------------- e-- ./file2
 ------------- e-- ./.file
 ------------- e-- ./.
 ------------- e-- ./ ..

Para visualizar os atributos de um ou mais arquivos específicos, especifique seus nomes:

  arquivo lsattr
  ------------- e-- arquivo
  lsattr - um arquivo file2 .file
  ------------- e-- arquivo
 ------------- e-- arquivo2
 ------------- e-- .file

Exibir atributos de diretórios

Agora vamos criar um diretório e subdiretório com mkdir -p :

  mkdir -p dir / subdir

E crie alguns arquivos vazios nesses diretórios:

  toque dir / arquivo3 dir / arquivo4 dir / subdir / arquivo5

Por padrão, lsattr não percorre diretórios:

  lsattr
  ------------- e-- ./file
 ------------- e-- ./file2
 ------------- e-- ./dir

Para percorrer recursivamente e mostrar o conteúdo dos diretórios, use -R :

  lsattr -R
  ------------- e-- ./file
 ------------- e-- ./file2
 ------------- e-- ./dir
 ./dir:
 ------------- e-- ./dir/file3
 ------------- e-- ./dir/file4
 ------------- e-- ./dir/subdir
 ./dir/subdir:
 ------------- e-- ./dir/subdir/file5

Alterar atributos

Por padrão, os arquivos e diretórios que criamos nos exemplos acima (no Ubuntu 16.04) têm o atributo “block extents” ( e ) definido.

  lsattr
  ------------- e-- ./file
 ------------- e-- ./file2
 ------------- e-- ./dir

Vamos dar a eles o atributo d (um atributo herdado, sem sentido em nosso sistema), usando + d .

  chattr + d *
  lsattr
  ------ d ------ e-- ./arquivo
 ------ d ------ e-- ./file2
 ------ d ------ e-- ./dir

Alguns atributos, como um (somente anexar), podem ser modificados apenas pelo usuário root :

  sudo chattr + um arquivo
  lsattr
  ----- ad ------ e-- ./file
 ------ d ------ e-- ./file2
 ------ d ------ e-- ./dir

Atributos que se aplicam apenas a diretórios, como D , não serão configurados em arquivos regulares com êxito – nenhum erro será retornado. Por exemplo, se você tentar executar o chattr + D em um arquivo normal, o chattr não fará nada com esses arquivos e retornará um status de saída bem-sucedido.

Observe no próximo comando que tentamos definir o atributo D em um arquivo regular e um diretório. O atributo está definido no diretório, não está no arquivo regular e o chattr retorna com sucesso.

  dir do arquivo chattr + D && lsattr
  ----- ad ------ e-- ./file
 ------ d ------ e-- ./file2
 --- D - d ------ e-- ./dir

(O operador && control executará o próximo comando apenas se o comando anterior retornar um status de saída bem-sucedido. Para obter mais informações, consulte Gramática do shell no bash. )

Para desarmar um atributo, use o operador  antes da sua lista de atributos.

  chattr -D dir && lsattr
  ----- ad ------ e-- ./file
 ------------- e-- ./file2
 ------------- e-- ./dir

Apenas um operador pode ser especificado por sequência de modos , mas você pode especificar vários atributos, um após o outro (sem espaço em branco ), em qualquer ordem. Você pode especificar várias seqüências de modo , cada uma com seu próprio operador.

  chattr + sSc -d * && lsattr
  sS - a - c ----- e ---- ./arquivo
 sS ----- c ----- e ---- ./file2
 sS ----- c ----- e ---- ./dir

Se um atributo exigir privilégios de root, mas você não estiver executando o comando como root, o chattr não alterará nenhum atributo para esse arquivo. Ele continuará tentando operar em outros arquivos e, quando concluído, retornará um status de saída com falha (um erro).

Para ilustrar isso, no próximo comando, tentaremos definir o atributo a em todos os arquivos no diretório atual sem usar o sudo . Isso deve falhar (a menos que estejamos logados como root), porque definir a requer privilégios de superusuário.

Observe também que no próximo comando usamos echo para exibir o valor do parâmetro especial bash ? (uma interrogação). ? O parâmetro contém o status de saída do comando anterior e, portanto, informa se o chattr foi bem-sucedido ( 0 ) ou falhou ( 1 ). Como todos os parâmetros bash, nos referimos a seu valor prefixando seu nome com $ .

  chattr -sS + a *;  eco $?
  chattr: operação não permitida ao definir sinalizadores no diretório
 chattr: operação não permitida ao definir sinalizadores no arquivo2
 1

O status de saída 1 indica que ocorreu um erro.

Vejamos como os atributos mudaram:

  lsattr
  ----- a - c ----- e ---- ./arquivo
 sS ----- c ----- e ---- ./file2
 sS ----- c ----- e ---- ./dir

Observe que o arquivo não causou um erro. Ele já tinha o sinalizador a de um comando anterior, portanto não causa erro; e assim o restante das alterações ( -sS ) passou muito bem. O outro arquivo e diretório causaram um erro e não foram alterados.

Para definir cada arquivo para corresponder a um conjunto explícito de atributos, use o operador = . Quaisquer atributos listados serão definidos e os não listados serão desabilitados.

  sudo chattr -R = es * && lsattr -R
  s ---------- e ---- ./arquivo
 s ---------- e ---- ./arquivo2
 s ---------- e ---- ./dir
 ./dir:
 s ---------- e ---- ./dir/file3
 s ---------- e ---- ./dir/file4
 s ---------- e ---- ./dir/subdir
 ./dir/subdir:
 s ---------- e ---- ./dir/subdir/file5

Tornar arquivos imutáveis

Se você definir o atributo i , um arquivo será marcado como “imutável”, ou seja, seus dados (e alguns metadados vitais) não poderão ser alterados, nem mesmo pela raiz, até que o atributo seja desabilitado.

  imutável ao toque && lsattr imutável
  -------------- e ---- imutável
  sudo chattr + i imutável && lsattr imutável
  ---- i --------- e ---- imutável
  mv imutável newname
  mv: não é possível mover 'imutável' para 'newname': operação não permitida
  rm imutável
  rm: não é possível remover 'imutável': operação não permitida
  sudo rm -f imutável
  rm: não é possível remover 'imutável': operação não permitida

Você não pode criar um link físico para um arquivo imutável:

  No hardlink imutável
  ln: falha ao criar o link físico 'hardlink' => 'imutável': operação não permitida

Links simbólicos estão OK, no entanto:

  link simbólico imutável do ln && link simbólico do ls -l
  lrwxrwxrwx 1 esperança esperança 6 jun 29 07:49 symlink -> immutable

Este é um bom momento para observar que os links simbólicos não têm atributos próprios:

  lsattr symlink
  lsattr: operação não suportada ao ler sinalizadores no link simbólico

Para tornar os arquivos mutáveis ​​novamente, use -i :

  sudo chattr -i imutável && mv imutável novo nome && lsattr novo nome
  -------------- e ---- newname

Tornar arquivos somente anexados

O atributo somente anexar ( a ) torna um arquivo imutável, exceto que os dados podem ser adicionados a ele.

  toque appendonly && lsattr appendonly
  -------------- e ---- appendonly
  sudo chattr + a appendonly && lsattr appendonly
  ----- a -------- e ---- apendonly

Você não pode substituir o arquivo com redirecionamento ( > ):

  eco "Substituir não é permitido."  > apendonly
  bash: appendonly: operação não permitida

Mas o redirecionamento somente de acréscimo ( >> ) está OK:

  eco "Anexar é permitido."  >> appendonly && cat appendonly
  Anexar é permitido.
  eco "Anexar é permitido."  >> appendonly && cat appendonly
  Anexar é permitido.
 Anexar é permitido.

Arquivos somente anexados não podem ser movidos, removidos, renomeados ou vinculados.

  sudo rm -f appendonly
  rm: não é possível remover 'appendonly': operação não permitida
  sudo em anexo hardlink
  ln: falha ao criar o link físico 'hardlink' => 'appendonly': operação não permitida

Para obter mais informações sobre redirecionamento, consulte Redirecionamento no bash .

chown – Altere a propriedade dos arquivos ou diretórios.
chmod – Altere as permissões de arquivos e diretórios.
ls – lista o conteúdo de um diretório ou diretórios.

14 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.