FreeBSD QandA 596

FreeBSD QandA

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


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。