a
Linuxファイル属性は、ファイルに適用できるものとして文書化されていることがよくあります。
chattr(1)マンページ:
「a」属性が設定されたファイルは、書き込みのために追加モードでのみ開くことができます。
0x20ファイルは追加のみ可能です( EXT4_APPEND_FL )。
私の質問は:
chattr +a
ファイルのみに制限されていますか?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