Qual é o efeito de “chattr + a” em um diretório

4

O atributo a do arquivo Linux é documentado como aplicável a arquivos.

chattr (1) manpage:

A file with the 'a' attribute set can only be open in append mode for writing.

wiki do ext4 :

0x20 File can only be appended (EXT4_APPEND_FL).

Minhas perguntas são:

  • O chattr +a está restrito apenas a arquivos?
  • É recursivo em novos subdiretórios e arquivos?
por Franklin Piat 10.03.2016 / 22:13

1 resposta

8

O sinalizador somente ( chattr +a ) impede a remoção do diretório, bem como arquivos e diretórios criados diretamente dentro desse diretório:

Crie um diretório e arquivos de teste:

# mkdir     /tmp/foo
# chattr +a /tmp/foo

Esse diretório não pode ser excluído:

# rmdir     /tmp/foo
rmdir: failed to remove ‘/tmp/foo’: Operation not permitted

Agora crie arquivos e diretório dentro dele:

# touch     /tmp/foo/bar
# mkdir     /tmp/foo/baz

Vamos inspecionar isso:

# lsattr -d /tmp/foo /tmp/foo/ba*
-----a-------e-- /tmp/foo
-------------e-- /tmp/foo/bar
-------------e-- /tmp/foo/baz

Tente apagar coisas:

# rm     /tmp/foo/bar
rm: cannot remove ‘/tmp/foo/bar’: Operation not permitted
# rmdir  /tmp/foo/baz
rmdir: failed to remove ‘/tmp/foo/baz’: Operation not permitted
rm -Rf /tmp/foo
rm: cannot remove ‘/tmp/foo/bar’: Operation not permitted
rm: cannot remove ‘/tmp/foo/baz’: Operation not permitted

Por fim, o subdiretório secundário e os arquivos nos subdiretórios não são protegidos :

# mkdir            /tmp/foo/baz/bat
# touch            /tmp/foo/baz/baff
# rm --verbose -Rf /tmp/foo/baz
removed directory: ‘/tmp/foo/baz/bat’
removed ‘/tmp/foo/baz/baff’
rm: cannot remove ‘/tmp/foo/baz’: Operation not permitted

Novamente, observe que somente /tmp/foo tinha o sinalizador de acréscimo:

# lsattr -d  /tmp/foo /tmp/foo/baz
-----a-------e-- /tmp/foo
-------------e-- /tmp/foo/baz
    
por 10.03.2016 / 22:13