LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問39
アクセスおよび権限制御の強化/Linux Capabilities による権限制御現在のシェルプロセスが保持するケーパビリティセット(許可・実効・継承・バウンディング・アンビエントのすべて)を人間が読みやすい形式で一括確認したい。コマンドとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- Acapsh --print
- Bgetcap /proc/self/exe
- Ccat /proc/$$/status | grep '^Cap'
- Dsetcap -l /proc/self/exe
正解:A
解説
`capsh --print` は現在のプロセスが持つ許可(permitted)・実効(effective)・継承(inheritable)・バウンディング(bounding)・アンビエント(ambient)の各ケーパビリティセットを、CAP_NET_ADMIN などの名前で人間が読みやすい形式で表示します。`getcap` はファイルに付与されたファイルケーパビリティを表示するコマンドで、プロセスのケーパビリティセットは表示しません。`/proc/$$/status` の Cap* 行は各セットを64ビット16進数マスクで表示するため、名前への変換なしには読みにくい形式です。`setcap` はファイルにケーパビリティを設定するコマンドで、読み取りには使いません。
選択肢ごとの解説
- A正しい。capsh --print は現在のプロセスのすべてのケーパビリティセット(許可・実効・継承・バウンディング・アンビエント)をCAP_SYS_ADMINなどの名前付きで一括表示するコマンドである。
- B誤り。getcap はファイルシステム上の実行ファイルに付与されたファイルケーパビリティを表示するコマンドであり、プロセスが現在保持しているケーパビリティセットの状態は表示しない。
- C誤り。/proc/$$/status の CapInh・CapPrm・CapEff・CapBnd・CapAmb 行は各セットを64ビットの16進数マスクとして表示し、名前付きのケーパビリティとして読み取るには capsh --decode などで変換が必要である。
- D誤り。setcap はファイルにケーパビリティを設定するコマンドで、-l というオプションは存在しない。ファイルのケーパビリティを表示するには getcap を使う。