Q. /kernel など一部のシステムファイルに対して、削除、上書き、名前の変更を しようとすると、Operation not permitted といわれてしまいました。 A. まず、Operation not permitted というエラーメッセージが表示される状況に は二つのケースが考えられます。 1. スティッキービット: sticky(8) 具体的には /tmp ディレクトリなどの様に、ファイルモードの最後が `t' に なっているディレクトリで、ファイルのオーナとは異なる一般ユーザが rm し ようとした場合です。スーパユーザにはこの制限はありません。 % ls -ld /tmp drwxrwxrwt 13 root wheel 1024 Oct 29 22:56 /tmp/ % ls -l /tmp/list -rw-r--r-- 1 foo wheel 18561 Sep 21 14:58 /tmp/list % su bar % rm -f /tmp/list rm: /tmp/list: Operation not permitted 2. ファイルフラグ: chflags(1) これはそれらのファイルに schg フラグが設定されているからです。実際に どのファイルにフラグが設定されているかは、FreeBSD のバージョンにより異 なりますが、このフラグが付いているファイルは、スーパユーザでも変更する ことができません。フラグを確認するには ls(1) に -lo オプションを付けて 実行します。また、find(1) を使えばファイル一覧を得ることができます。 # ls -lo /kernel -r-xr-xr-x 1 root wheel schg 2383647 Sep 19 22:30 /kernel* # find / -flags schg -exec ls -lo {} \; -r-sr-xr-x 1 root wheel schg 354504 Sep 21 22:05 /bin/rcp -r-x------ 1 root wheel schg 388072 Sep 21 22:13 /sbin/init -r-sr-xr-x 1 man wheel schg 28944 Sep 21 22:08 /usr/bin/man ...省略... これらのファイルを変更するには、例えば # mv /kernel /kernel.old mv: rename /kernel to /kernel.old: Operation not permitted # chflags noschg /kernel # mv /kernel /kernel.old と chflags(1) コマンドで schg フラグを消去してから操作します。カーネル については make installkernel したとき自動的に行われます。注意点として、 カーネルのセキュリティレベルが 1 以上では、chflags でフラグを消去する ことも禁止されます。この場合、システムをシングルユーザ・モードでブート し必要な作業を行なってください。securelevel(8), security(7) を参照。 # sysctl kern.securelevel kern.securelevel: 2 # chflags noschg /kernel chflags: /kernel: Operation not permitted
グループ名: boot-s