「ケイパビリティ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:Capabilitiesへの転送ページ)
 
1行目: 1行目:
  +
[[Category:セキュリティ]]
#redirect[[en:Capabilities]]
 
  +
[[en:Capabilities]]
  +
[[zh-cn:Capabilities]]
  +
'''ケイパビリティ''' (POSIX 1003.1e, capabilities(7)) はスーパーユーザー権限の細かい制御を提供することで、root ユーザーの使用を減らすことができます。ソフトウェアの開発者はシステムバイナリの強力な [[wikipedia:ja:Setuid|setuid]] 属性を最小セットのケイパビリティで置き換えることが推奨されています。多数のパッケージがケイパビリティを利用しており、例えば CAP_NET_RAW は {{pkg|iputils}} に含まれている {{ic|ping}} と {{ic|ping6}} バイナリで使われています。これによって ('''setuid''' と同じように) 通常ユーザーで {{ic|ping}} を実行することができ、同時に、{{ic|ping}} の脆弱性によるセキュリティ上の影響を緩和することが可能となっています。
  +
  +
== 要件 ==
  +
  +
''setcap'' ユーティリティを使って、拡張属性であるファイルケイパビリティを設定するには {{Pkg|libcap}} を[[pacman|インストール]]する必要があります。
  +
  +
== 実装 ==
  +
  +
Linux ではケイパビリティは ''security'' 名前空間の''[[ファイルのパーミッションと属性#拡張属性|拡張属性]]'' ({{ic|man 7 xattr}}) を使って実装されています。拡張属性は Ext2, Ext3, Ext4, Btrfs, JFS, XFS, Reiserfs など全ての主要な Linux ファイルシステムでサポートされています。以下の例では {{ic|getcap}} を使って ping のケイパビリティを出力してから、{{ic|getfattr}} を使ってエンコードされた同じデータを出力しています:
  +
  +
$ getcap /bin/ping
  +
/bin/ping = cap_net_raw+ep
  +
$ getfattr -d -m "^security\\." /bin/ping
  +
# file: bin/ping
  +
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=
  +
  +
{{ic|cp -a}} を使うと拡張属性は自動的にコピーされますが、プログラムによっては特殊なフラグが必要な場合もあります: {{ic|rsync -X}}。
  +
  +
ケイパビリティは Arch のパッケージのインストールスクリプトによって設定されます (例: {{ic|iputils.install}})。
  +
  +
== 管理とメンテナンス ==
  +
  +
パッケージのケイパビリティが過度に権限を与えている場合はバグと考えられます。ここに記載するのではなくバグとして報告してください。root アクセスと同等 (CAP_SYS_ADMIN) または root アクセスの許可と同等 (CAP_DAC_OVERRIDE) なケイパビリティはバグではありません。Arch は MAC/RBAC システムをサポートしていないためです。
  +
  +
{{Warning|Many capabilities enable trivial privilege escalation. For examples and explanations see Brad Spengler's post [http://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271 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
  +
  +
== 便利なコマンド ==
  +
  +
setuid-root ファイルを検索:
  +
$ find /usr/bin /usr/lib -perm /4000 -user root
  +
  +
setgid-root ファイルを検索:
  +
$ find /usr/bin /usr/lib -perm /2000 -group root
  +
  +
== 参照 ==
  +
  +
* Man Page capabilities(7) setcap(8) getcap(8)
  +
* [[en2:DeveloperWiki:Security#Replacing setuid with capabilities|DeveloperWiki:Security#Replacing setuid with capabilities]]

2015年10月29日 (木) 23:51時点における版

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

要件

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

実装

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

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

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

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

管理とメンテナンス

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

警告: Many capabilities enable trivial privilege escalation. For examples and explanations see Brad Spengler's post 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

便利なコマンド

setuid-root ファイルを検索:

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

setgid-root ファイルを検索:

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

参照