chownでsticky bitが壊れる
実際にやってしまった痛い失敗です。
root権限で以下のような処理を実行するツールを書き捨てでつくって実行しました。
#!/bin/sh chown -R ${NEW_USER}:${NEW_GROUP} ${TARGET_DIR}/*
もし、変数が空だったらどうなるでしょうか。
そう、以下のようなコマンド実行になってしまいます。
chown -R : /*
ユーザもグループも指定されていないので、オーナーが変更されることはありませんがls -lcでctimeを確認するとファイルは更新されてしまっています。
通常のファイルには特に悪影響がなくてすみますが、sticky bitの立っている以下のようなファイルはsticky bitがoffにされてしまい、動作に大きな影響を与えてしまいます。
[webmaster@localhost work]$ ls -l /bin/ | grep rws -rwsr-xr-x 1 root root 87016 May 4 2007 mount -rwsr-xr-x 1 root root 33272 May 3 2007 ping -rwsr-xr-x 1 root root 30924 May 3 2007 ping6 -rwsr-xr-x 1 root root 61168 May 5 2007 su -rwsr-xr-x 1 root root 23844 Nov 23 2006 traceroute -rwsr-xr-x 1 root root 12300 May 3 2007 traceroute6 -rwsr-xr-x 1 root root 53612 May 4 2007 umount [webmaster@localhost work]$
具体的には、root権限を持たずにpingを打っても「権限がないので実行できない」と言われるようになったり、suを許容している場合だとsuコマンドを実行してもrootユーザ以外は正しいパスワードを入れてもPAM認証で蹴られたりといった事が起きます。
root権限での作業は、どんなに急ぎの用件であっても「十分すぎるくらいの準備と最新の注意が必要」ということを改めて教訓として胸に刻みました。
#追記:コマンド書き間違えていたので直しました。