LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問20
アクセスおよび権限制御の強化/Linux Capabilities による権限制御systemdのサービスユニットに User=webapp を指定し、一般ユーザーの権限で /usr/local/bin/webapp を動かしている。実行ファイルにファイルケーパビリティを付けずに、このサービスが80番ポートで待ち受けられるようにしたい。[Service] セクションに追加する設定として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- ACapabilityBoundingSet=CAP_NET_BIND_SERVICE
- BAmbientCapabilities=CAP_NET_BIND_SERVICE
- CSecureBits=keep-caps
- DRestrictAddressFamilies=AF_INET AF_INET6
正解:B
解説
AmbientCapabilities= は、起動するプロセスのアンビエントセットに入れるケーパビリティを指定します。アンビエントセットのケーパビリティは、非特権ユーザーとしてexecveしたあとも許可セット・実効セットに残るため、User= で一般ユーザーを指定したサービスにも必要な権限だけを与えられます。これに対してCapabilityBoundingSet= は持てるケーパビリティの上限を絞る設定で、それだけでは権限を与えません。1024未満のポートでの待ち受けに必要なのは CAP_NET_BIND_SERVICE です。
選択肢ごとの解説
- A誤り。CapabilityBoundingSet= はバウンディングセット(持てるケーパビリティの上限)を制限する設定で、一般ユーザーで動くプロセスにケーパビリティを与える働きはありません。
- B正しい。アンビエントセットに CAP_NET_BIND_SERVICE を入れると、一般ユーザーとして実行されたプロセスもこのケーパビリティを持ち、80番ポートで待ち受けられます。
- C誤り。keep-caps はUIDを変更するときに許可セットを保持させるフラグですが、その後のexecveではケーパビリティが失われるため、これだけでは実行したプログラムに権限が残りません。
- D誤り。RestrictAddressFamilies= は使用できるソケットのアドレスファミリーを制限する設定で、特権ポートで待ち受ける権限を与えるものではありません。