File capabilites

root に権限が集中し過ぎていることが UNIX 系 OSの弱点で、あるプロセスの nice 値をちょっと下げたい場合にも root 権限が必要で、そのために root 権限を渡してしまうとマシンを再起動するのもファイルを消すのもしたい放題になってしまう。
そこで POSIX では root 権限に選択的に蓋をすることができるケーパビリティ(capabilities)という仕様が策定している。

ケーパビリティの機能は大きく二種類あるようだ。

Process capabilites
プロセスが特権が必要なシステムコールを呼び出す場合に、実行UID/GIDの他にケーパビリティのチェックを行う。例えば chown(2) を呼び出す場合、CAP_CHOWN ケーパビリティが欠けていれば、root の実行 UID を持つプロセスでも chown は実行できない。
File capabilites
ファイルに対して setuid root を行う替わりに、特定のケーパビリティを設定できる機能。当然、ファイルシステムサポートが必要。

Linux の場合、2.6 系で process capabilites が漸近的にサポートされ 2.6.14 でcapabilities(7)までサポートされていたが、2.6.24 からは file capabilites もサポートされるそうな。上のIBMの記事では /bin/ping に CAP_NET_RAW ケーパビリティを与えて setuid root を外す例が紹介されている*1

*1:ただ file capabilites が導入された場合、ケーパビリティを付与したファイルを、tar や cp のような既存コマンドはちゃんと扱えるのだろうか?