Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
ケイパビリティのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
ケイパビリティ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:セキュリティ]] [[en:Capabilities]] [[pt:Capabilities]] [[ru:Capabilities]] [[zh-hans:Capabilities]] ケイパビリティ (POSIX 1003.1e, {{man|7|capabilities}}) はスーパーユーザー権限の細かい制御を提供することで、root ユーザーの使用を減らすことができます。ソフトウェアの開発者は、システムバイナリの強力な [[wikipedia:ja:Setuid|setuid]] 属性を、より最低限のケイパビリティのセットに置き換えることが推奨されています。多数のパッケージがケイパビリティを利用しており、例えば {{ic|CAP_NET_RAW}} は {{Pkg|fping}} バイナリで使われています。これによって ('''setuid''' と同じように) 通常ユーザーで {{ic|fping}} を実行することができ、それと同時に、{{ic|fping}} に脆弱性があった場合のセキュリティ上の影響を緩和することができます。 == 実装 == Linux ではケイパビリティは[[拡張属性]] ({{man|7|xattr}}) の ''security'' 名前空間を使って実装されています。拡張属性は Ext2、[[Ext3]]、[[Ext4]]、[[Btrfs]]、[[JFS]]、[[XFS]]、そして Reiserfs など全ての主要な Linux [[ファイルシステム]]でサポートされています。以下の例では {{ic|getcap}} を使って fping のケイパビリティを出力し、さらに {{ic|getfattr}} を使ってエンコードされた同じデータを出力しています: {{hc|$ getcap /usr/bin/fping|2= /usr/bin/fping cap_net_raw=ep }} {{hc|1=$ getfattr --dump --match="^security\\." /usr/bin/fping|2= # file: usr/bin/fping security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA= }} 一部のプログラムは拡張属性を自動的にコピーしますが、他のプログラムでは特別なフラグが必要です。両方のクラスの例については、[[拡張属性# 拡張属性を保持する]]を参照してください。 Arch では、ケイパビリティは [[PKGBUILD#インストール|パッケージインストールスクリプト]] によって設定されます。例としては [https://gitlab.archlinux.org/archlinux/packaging/packages/fping/-/blob/main/fping.install fping.install] が挙げられます。 == 管理とメンテナンス == パッケージが過度に強力なケイパビリティを持っている場合はバグと考えられます。なので、ここに記載するのではなくバグとして報告してください。Arch は [[セキュリティ#強制アクセス制御|MAC]]/[[w:Role-based access control|RBAC]] システムをサポートしていないため、root アクセスと本質的に等価なケイパビリティ ({{ic|CAP_SYS_ADMIN}}) や root アクセスを容易にするケイパビリティ ({{ic|CAP_DAC_OVERRIDE}}) はバグではありません。 {{Warning|1=特権昇格が可能になるケイパビリティは多数あります。詳しい例や説明は Brad Spengler による [https://forums.grsecurity.net/viewtopic.php?f=7&t=2522&sid=c6fbcf62fd5d3472562540a7e608ce4e#p10271 False Boundaries and Arbitrary Code Execution] を参照してください。}} == ケイパビリティを利用できる他のプログラム == 以下のパッケージには setuid 属性が設定されたファイルがありませんが、実行するには root 権限を必要とします。ケイパビリティを有効にすることで、権限昇格を行わなくても通常ユーザーでプログラムを使うことが可能になります。 ケイパビリティの後ろにある {{ic|+ep}} は、ケイパビリティセットの ''effective'' と ''permitted'' を示しています。詳細は {{man|7|capabilities|File capabilities}} を参照してください。 {| class=wikitable ! プログラム || コマンド(root で実行) |- | [[Beep]] || {{ic|setcap cap_dac_override,cap_sys_tty_config+ep /usr/bin/beep}} |- | {{man|1|chvt}} || {{ic|setcap cap_dac_read_search,cap_sys_tty_config+ep /usr/bin/chvt}} |- | {{man|8|iftop}} || {{ic|setcap cap_net_raw+ep /usr/bin/iftop}} |- | {{man|8|mii-tool}} || {{ic|setcap cap_net_admin+ep /usr/bin/mii-tool}} |- | {{man|8|mtr}} || {{ic|setcap cap_net_raw+ep /usr/bin/mtr-packet}} |- | {{man|8|nethogs}} || {{ic|setcap cap_net_admin,cap_net_raw+ep /usr/bin/nethogs}} |- | {{man|1|wavemon}} || {{ic|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 == ケイパビリティを一時的に付与してプログラムを実行する == {{man|1|capsh}} を使用すると、バイナリの拡張属性を変更せずに、特定のケイパビリティを持つプログラムを実行することが可能です。以下の例では、{{ic|CAP_SYS_PTRACE}} ケイパビリティを使用して [[GDB]] を使用してプロセスにアタッチする方法を示しています: $ sudo -E capsh --caps="cap_setpcap,cap_setuid,cap_setgid+ep cap_sys_ptrace+eip" --keep=1 --user="$USER" --addamb="cap_sys_ptrace" --shell=/usr/bin/gdb -- -p <pid> 上記の {{ic|sudo}} に渡される {{ic|-E}} は、現在のユーザーのログイン環境、たとえば {{ic|PATH}} 変数などを子プロセスに引き継ぐために使用されます。 以下は、[[netcat]] を使用して低いポート、今回は 123 にバインドする例です: $ sudo -E capsh --caps="cap_setpcap,cap_setuid,cap_setgid+ep cap_net_bind_service+eip" --keep=1 --user="$USER" --addamb="cap_net_bind_service" --shell=/usr/bin/nc -- -lvtn 123 Listening on 0.0.0.0 123 上記の例はどちらも実際には説明目的のものであり、ほとんどのシステムでは、他のユーザーが所有するプロセスにデバッガーをアタッチするか、root ユーザーとしてポート 1024 未満を開くことが可能です。それでも、{{ic|capsh}} を使用することはある程度のセキュリティメリットを提供します。なぜなら、{{ic|capsh --user}} は指定されたユーザーとして、通常のカーネルケイパビリティ(つまり、制限)を持って実行されるためです。 == systemd == {{ic|AmbientCapabilities}} と {{ic|CapabilityBoundingSet}} を使用することで、systemd ユニットにケイパビリティを割り当てることが可能です。これは、バイナリにケイパビリティを設定するよりも安全です。詳細は {{man|5|systemd.exec}} を参照してください。 == 参照 == * Man ページ: {{man|7|capabilities}}、{{man|8|setcap}}、{{man|8|getcap}} * [[Wikibooks:Grsecurity/Appendix/Capability Names and Descriptions]] * [https://docs.kernel.org/userspace-api/seccomp_filter.html Seccomp BPF (SECure COMPuting with filters)] {{TranslationStatus|Capabilities|2024-08-21|808245}}
このページで使用されているテンプレート:
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
ケイパビリティ
に戻る。
検索
検索
ケイパビリティのソースを表示
話題を追加