過去問ドリル

LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問49

アクセスおよび権限制御の強化/Linux Capabilities による権限制御

setcap コマンドでファイルケーパビリティを設定するとき、ケーパビリティ指定に含まれる「e」(effective)フラグの役割として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)

正解:B

解説

Linuxのファイルケーパビリティは「許可(p)」「継承(i)」「実効(e)」の3つのビットセットで構成されます。許可(p)ビットはexecve後の許可セットに入れるものを決め、継承(i)ビットは呼び出し元の継承セットとのANDでケーパビリティを引き継ぐ仕組みに使います。実効(e)ビットが立っていると、許可セットに入ったケーパビリティが自動的に実効セットにも昇格します。setcap 'cap_net_bind_service=+ep' のように p と e の両方を指定するのが一般的です。

選択肢ごとの解説

  • A誤り。呼び出し元プロセスの継承セット(inheritable)からケーパビリティを受け取れるようにするのは「i」(inheritable)フラグの役割である。execve後の継承セットはファイルの i ビットと呼び出し元の継承セットの AND で決まる。
  • B正しい。ファイルの effective ビット(e)が立っていると、execve 後にファイルの permitted ビットを通じてプロセスの許可セットに入ったケーパビリティが自動的に実効セットにも昇格する。e ビットがなければプロセスは capset() 等で自ら実効セットへ昇格させる必要がある。
  • C誤り。バウンディングセット(bounding set)の制限を無効にするフラグは存在しない。バウンディングセットはカーネルが execve 時にファイルの permitted ビットとの AND をとる際に参照するものであり、フラグで無効にすることはできない。
  • D誤り。呼び出し元プロセスの実効セットを execve 後に引き継ぐ仕組みはない。execve 時に実効セットはリセットされ、ファイルの e ビットと p ビットによって新たに構成される。
LinuCレベル3 セキュリティスペシャリストの問題を演習モードで解く