LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問13
アクセスおよび権限制御の強化/Linux Capabilities による権限制御一般ユーザーで実行する /usr/local/bin/webapp に、80番ポートで待ち受けさせたい。setuid rootにせず、必要最小限の権限だけをファイルに付与するコマンドとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- Asetcap 'cap_net_bind_service=+ep' /usr/local/bin/webapp
- Bsetcap 'cap_net_admin=+ep' /usr/local/bin/webapp
- Csetcap 'cap_net_bind_service=+i' /usr/local/bin/webapp
- Dsetcap 'cap_net_raw=+ep' /usr/local/bin/webapp
正解:A
解説
1024未満の特権ポートへのbindに必要なのはCAP_NET_BIND_SERVICEです。setcapでファイルケーパビリティとして許可セット(p)と実効フラグ(e)に付けると、一般ユーザーが実行してもそのケーパビリティを持った状態で動作します。付与状況はgetcapで確認できます。setuid rootにするとすべての特権を与えてしまうため、ケーパビリティで必要なものだけを渡すのが最小権限の考え方です。
選択肢ごとの解説
- A正しい。CAP_NET_BIND_SERVICEを許可セットと実効フラグに付与すると、一般ユーザーの実行でも特権ポートにbindできます。
- B誤り。CAP_NET_ADMINはインタフェースやルーティング、ファイアウォール等のネットワーク設定を変更する権限で、特権ポートへのbindには不要です。
- C誤り。継承可能セット(i)だけでは、実行したプロセスの許可セットに入るのは呼び出し元も同じケーパビリティを継承可能セットに持つ場合に限られ、一般ユーザーの通常の実行では有効になりません。
- D誤り。CAP_NET_RAWはRAWソケットやPACKETソケットを使う権限で、特権ポートへのbindを許すものではありません。