ケイパビリティ

提供: ArchWiki
2021年7月30日 (金) 15:23時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎nethogs: === wavemon === を追加(英語版より))
ナビゲーションに移動 検索に移動

ケイパビリティ (POSIX 1003.1e, capabilities(7)) はスーパーユーザー権限の細かい制御を提供することで、root ユーザーの使用を減らすことができます。ソフトウェアの開発者はシステムバイナリの強力な setuid 属性を最小セットのケイパビリティで置き換えることが推奨されています。多数のパッケージがケイパビリティを利用しており、例えば CAP_NET_RAW は iputils に含まれている ping バイナリで使われています。これによって (setuid と同じように) 通常ユーザーで ping を実行することができ、同時に、ping の脆弱性によるセキュリティ上の影響を緩和することが可能となっています。

要件

setcap ユーティリティを使って、拡張属性であるファイルケイパビリティを設定するには libcapインストールする必要があります。

実装

Linux ではケイパビリティは security 名前空間の拡張属性 (xattr(7)) を使って実装されています。拡張属性は Ext2, Ext3, Ext4, Btrfs, JFS, XFS, Reiserfs など全ての主要な Linux ファイルシステムでサポートされています。以下の例では getcap を使って ping のケイパビリティを出力してから、getfattr を使ってエンコードされた同じデータを出力しています:

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
$ getfattr -d -m "^security\\." /usr/bin/ping
# file: usr/bin/ping
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=

cp -a を使うと拡張属性は自動的にコピーされますが、プログラムによっては特殊なフラグが必要な場合もあります: rsync -X

ケイパビリティは Arch のパッケージのインストールスクリプトによって設定されます (例: iputils.install)。

管理とメンテナンス

パッケージのケイパビリティが過度に権限を与えている場合はバグと考えられます。ここに記載するのではなくバグとして報告してください。root アクセスと同等 (CAP_SYS_ADMIN) または root アクセスの許可と同等 (CAP_DAC_OVERRIDE) なケイパビリティはバグではありません。Arch は MAC/RBAC システムをサポートしていないためです。

警告: 特権昇格が可能になるケイパビリティは多数あります。詳しい例や説明は Brad Spengler による False Boundaries and Arbitrary Code Execution を参照してください。

ケイパビリティを利用できる他のプログラム

以下のパッケージには setuid 属性が設定されたファイルがありませんが、実行するには root 権限を必要とします。ケイパビリティを有効にすることで、権限昇格を行わなくても通常ユーザーでプログラムを使うことが可能になります。

beep

# setcap cap_dac_override,cap_sys_tty_config+ep /usr/bin/beep

chvt

# setcap cap_dac_read_search,cap_sys_tty_config+ep /usr/bin/chvt

iftop

# setcap cap_net_raw+ep /usr/bin/iftop

mii-tool

# setcap cap_net_admin+ep /usr/bin/mii-tool

mtr

# setcap cap_net_raw+ep /usr/bin/mtr-packet

nethogs

# setcap cap_net_admin,cap_net_raw+ep /usr/bin/nethogs

wavemon

# setcap cap_net_admin+ep /usr/bin/wavemon

便利なコマンド

setuid-root ファイルを検索:

$ find /usr/bin /usr/lib -perm /4000 -user root

setgid-root ファイルを検索:

$ find /usr/bin /usr/lib -perm /2000 -group root

参照