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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
2行目: 2行目:
 
[[en:Capabilities]]
 
[[en:Capabilities]]
 
[[zh-hans:Capabilities]]
 
[[zh-hans:Capabilities]]
'''ケイパビリティ''' (POSIX 1003.1e, capabilities(7)) はスーパーユーザー権限の細かい制御を提供することで、root ユーザーの使用を減らすことができます。ソフトウェアの開発者はシステムバイナリの強力な [[wikipedia:ja:Setuid|setuid]] 属性を最小セットのケイパビリティで置き換えることが推奨されています。多数のパッケージがケイパビリティを利用しており、例えば CAP_NET_RAW は {{pkg|iputils}} に含まれている {{ic|ping}} バイナリで使われています。これによって ('''setuid''' と同じように) 通常ユーザーで {{ic|ping}} を実行することができ、同時に、{{ic|ping}} の脆弱性によるセキュリティ上の影響を緩和することが可能となっています。
+
'''ケイパビリティ''' (POSIX 1003.1e, {{man|7|capabilities}}) はスーパーユーザー権限の細かい制御を提供することで、root ユーザーの使用を減らすことができます。ソフトウェアの開発者はシステムバイナリの強力な [[wikipedia:ja:Setuid|setuid]] 属性を最小セットのケイパビリティで置き換えることが推奨されています。多数のパッケージがケイパビリティを利用しており、例えば CAP_NET_RAW は {{pkg|iputils}} に含まれている {{ic|ping}} バイナリで使われています。これによって ('''setuid''' と同じように) 通常ユーザーで {{ic|ping}} を実行することができ、同時に、{{ic|ping}} の脆弱性によるセキュリティ上の影響を緩和することが可能となっています。
   
 
== 要件 ==
 
== 要件 ==
10行目: 10行目:
 
== 実装 ==
 
== 実装 ==
   
Linux ではケイパビリティは ''security'' 名前空間の''[[ファイルのパーミッションと属性#拡張属性|拡張属性]]'' ({{ic|man 7 xattr}}) を使って実装されています。拡張属性は Ext2, Ext3, Ext4, Btrfs, JFS, XFS, Reiserfs など全ての主要な Linux ファイルシステムでサポートされています。以下の例では {{ic|getcap}} を使って ping のケイパビリティを出力してから、{{ic|getfattr}} を使ってエンコードされた同じデータを出力しています:
+
Linux ではケイパビリティは ''security'' 名前空間の''[[ファイルのパーミッションと属性#拡張属性|拡張属性]]'' ({{man|7|xattr}}) を使って実装されています。拡張属性は Ext2, Ext3, Ext4, Btrfs, JFS, XFS, Reiserfs など全ての主要な Linux [[ファイルシステム]]でサポートされています。以下の例では {{ic|getcap}} を使って ping のケイパビリティを出力してから、{{ic|getfattr}} を使ってエンコードされた同じデータを出力しています:
   
$ getcap /bin/ping
+
{{hc|$ getcap /usr/bin/ping|2=
/bin/ping = cap_net_raw+ep
+
/usr/bin/ping = cap_net_raw+ep
  +
}}
$ getfattr -d -m "^security\\." /bin/ping
 
  +
# file: bin/ping
 
  +
{{hc|$ getfattr -d -m "^security\\." /usr/bin/ping|2=
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=
 
  +
# file: usr/bin/ping
  +
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=
  +
}}
   
 
{{ic|cp -a}} を使うと拡張属性は自動的にコピーされますが、プログラムによっては特殊なフラグが必要な場合もあります: {{ic|rsync -X}}。
 
{{ic|cp -a}} を使うと拡張属性は自動的にコピーされますが、プログラムによっては特殊なフラグが必要な場合もあります: {{ic|rsync -X}}。
24行目: 27行目:
 
== 管理とメンテナンス ==
 
== 管理とメンテナンス ==
   
パッケージのケイパビリティが過度に権限を与えている場合はバグと考えられます。ここに記載するのではなくバグとして報告してください。root アクセスと同等 (CAP_SYS_ADMIN) または root アクセスの許可と同等 (CAP_DAC_OVERRIDE) なケイパビリティはバグではありません。Arch は MAC/RBAC システムをサポートしていないためです。
+
パッケージのケイパビリティが過度に権限を与えている場合はバグと考えられます。ここに記載するのではなくバグとして報告してください。root アクセスと同等 ({{ic|CAP_SYS_ADMIN}}) または root アクセスの許可と同等 ({{ic|CAP_DAC_OVERRIDE}}) なケイパビリティはバグではありません。Arch は [[セキュリティ#強制アクセス制御|MAC/RBAC]] システムをサポートしていないためです。
   
 
{{Warning|特権昇格が可能になるケイパビリティは多数あります。詳しい例や説明は Brad Spengler による [http://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271 False Boundaries and Arbitrary Code Execution] を参照してください。}}
 
{{Warning|特権昇格が可能になるケイパビリティは多数あります。詳しい例や説明は Brad Spengler による [http://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271 False Boundaries and Arbitrary Code Execution] を参照してください。}}
58行目: 61行目:
 
== 参照 ==
 
== 参照 ==
   
* Man ページ: capabilities(7) setcap(8) getcap(8)
+
* Man ページ: {{man|7|capabilities}}, {{man|8|setcap}}, {{man|8|getcap}}
* [[en2:DeveloperWiki:Security#Replacing setuid with capabilities|DeveloperWiki:Security#Replacing setuid with capabilities]]
 
 
* [https://en.wikibooks.org/wiki/Grsecurity/Appendix/Capability_Names_and_Descriptions Grsecurity Appendix: Capability Names and Descriptions]
 
* [https://en.wikibooks.org/wiki/Grsecurity/Appendix/Capability_Names_and_Descriptions Grsecurity Appendix: Capability Names and Descriptions]
 
* [https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt The Linux Kernel Archives: SECure COMPuting with filters]
 
* [https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt The Linux Kernel Archives: SECure COMPuting with filters]

2018年4月20日 (金) 23:28時点における版

ケイパビリティ (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

便利なコマンド

setuid-root ファイルを検索:

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

setgid-root ファイルを検索:

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

参照