rootでも削除できないファイルの作成

ja-manのpkg_addに失敗?したせいか、/var/tmp/以下にrootでも削除できないファイルができた。
調べてみたところ、実際そういうファイルは作成できるようだ。
http://blog.livedoor.jp/tuzzy92/archives/51935480.html


chflagsコマンドを使用して、システムの変更禁止フラグを設定することで削除できなくなる。
このシステムの変更禁止フラグはls -loで確認できる。


とりあえず元のファイルを作成

# touch a
# ls -lo a
-rw-r--r--  1 root  wheel  - 0 Aug 17 19:39 a

設定

# chflags schg a
# ls -lo a
-rw-r--r--  1 root  wheel  schg 0 Aug 17 19:39 a

削除してみるができない

# rm -f a
rm: a: Operation not permitted

設定解除

# chflags noschg a
# ls -lo a
-rw-r--r--  1 root  wheel  - 0 Aug 17 19:39 a

削除

# rm -f a
# ls a
ls: a: No such file or directory

削除できた。


インストール失敗で消せなくなったファイルの変更禁止フラグを確認してみる。

# find /var/tmp/ -name 'jman' |xargs ls -lo
-r-sr-xr-x  1 man  wheel  schg 35256 Jul 10 21:31 /var/tmp/instmp.8PtGSM/bin/jman
-r-sr-xr-x  1 man  wheel  schg 35256 Jul 10 21:31 /var/tmp/instmp.YPMbyi/bin/jman
-r-sr-xr-x  1 man  wheel  schg 35256 Jul 10 21:31 /var/tmp/instmp.aLa7dH/bin/jman

変更禁止フラグが立っていた。変更禁止フラグを解除後に削除してみる。

# find /var/tmp/ -name 'jman' |xargs chflags noschg
# find /var/tmp/ -name 'jman' |xargs ls -lo
-r-sr-xr-x  1 man  wheel  - 35256 Jul 10 21:31 /var/tmp/instmp.8PtGSM/bin/jman
-r-sr-xr-x  1 man  wheel  - 35256 Jul 10 21:31 /var/tmp/instmp.YPMbyi/bin/jman
-r-sr-xr-x  1 man  wheel  - 35256 Jul 10 21:31 /var/tmp/instmp.aLa7dH/bin/jman
# find /var/tmp/ -name 'jman' |xargs rm -rf
# find /var/tmp/ -name 'jman' |xargs ls -lo

削除できた。