web-dev-qa-db-ja.com

「chattr + a」がディレクトリに与える影響

a Linuxファイル属性は、ファイルに適用できるものとして文書化されていることがよくあります。

chattr(1)マンページ:

「a」属性が設定されたファイルは、書き込みのために追加モードでのみ開くことができます。

ext4 wiki

0x20ファイルは追加のみ可能です( EXT4_APPEND_FL )。

私の質問は:

  • chattr +aファイルのみに制限されていますか?
  • 新しいサブディレクトリとファイルで再帰的ですか?
4
Franklin Piat

append onlyフラグ(chattr +a)ディレクトリの削除を禁止しますaと同様にそのディレクトリ内に直接作成されたファイルとディレクトリ:

テストディレクトリとファイルを作成します。

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

そのディレクトリは削除できません:

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

その中にファイルとディレクトリを作成します:

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

それを調べてみましょう:

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

ものを消去してみてください:

# 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

最後に、サブサブディレクトリとサブディレクトリ内のファイル保護されていません

# 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

繰り返しますが、/tmp/fooに追加フラグがありました:

# lsattr -d  /tmp/foo /tmp/foo/baz
-----a-------e-- /tmp/foo
-------------e-- /tmp/foo/baz
8
Franklin Piat