ファイルを削除できないようにしたい
Linux の rm
コマンドでファイルを削除できないようにしたいです。
結論
chmod 0 [ファイル名]
でファイルの書き込み権限を無効にしても実行時に確認メッセージが表示されるだけで、普通に削除できてしまいます。ファイル削除を禁止するには chattr +i [ファイル名]
でファイル属性に変更不可属性を追加してやればよいです。
書き込み不可の権限では削除できてしまう
$ touch a.txt
$ chmod 0 a.txt
$ ls -l
total 0
---------- 1 tm tm 0 Feb 20 00:11 a.txt
$ rm a.txt
rm: remove write-protected regular empty file 'a.txt'? y
上の例では、適当なファイルを作成し、書き込み不可の権限を設定後、削除コマンド rm
を実行しています。
rm: remove write-protected regular empty file 'a.txt'? というメッセージで書き込み保護されているけど削除していいか聞かれます。'y' と入力すれば削除が実行されます。
chattr: ファイルに削除不可の属性を付与する
上で見た通り単純に書き込み権限の設定では削除を防ぐことはできません。代わりに chattr というコマンドでファイルの削除不可属性を付与すれば削除禁止にできます。
chattr +i [ファイルパス]
とすることで指定ファイルの属性に変更不可の属性 i
を新たに追加できます。属性 i
を保持するファイルは変更不可なので削除もできません。
chattr -i [ファイルパス]
とすれば属性 i
を削除できます。
試しに以下のコマンドで確認してみます。
$ touch a.txt
$ chattr +i a.txt
$ lsattr
----i----------- ./a.txt
$ rm a.txt
rm: remove regular empty file ‘a.txt’? y
rm: cannot remove ‘a.txt’: Operation not permitted
rm: cannot remove ‘a.txt’: Operation not permitted とパーミッションエラーで削除に失敗していることが確認できます。
属性にはいろいろあります。
a
: 追記モードでのみファイルを開けるi
: ファイルの更新、削除、リネーム、リンク作成を禁止するA
: atime(アクセス時刻)を更新しない
わかりやすい属性はこのあたりです。ほかの属性もたくさんあります。man chattr
で確認してください。
lsattr
でファイルの属性を確認できます。
$ lsattr
----i----------- ./a.txt
----i-----------
となっている個所がファイルの属性です。この例では i
属性(更新不可)のみが設定されています。
コメントを書く