LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問40
アクセスおよび権限制御の強化/Linux Capabilities による権限制御Linux Capabilitiesのケーパビリティセットに関する説明として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- A許可セット(permitted set)に含まれるケーパビリティは、プロセスの実効セット(effective set)に自動的に追加される
- Bアンビエントセット(ambient set)はsetUIDビットが立った実行ファイルを経由することで子プロセスに引き渡せる
- Cバウンディングセット(bounding set)は、execve時にファイルケーパビリティを通じて新しいプロセスが許可セットに取り込めるケーパビリティの上限を定める
- D継承セット(inheritable set)に含まれるケーパビリティは、execve時に自動的に子プロセスの実効セットに加わる
正解:C
解説
バウンディングセット(bounding set)は、execve 時にファイルケーパビリティの許可ビット(file permitted)との AND を取ることで、新しいプロセスが許可セットに取り込めるケーパビリティを制限します。バウンディングセットにないケーパビリティは、ファイルの許可ビットが立っていても実行後の許可セットに入りません。許可セットのケーパビリティは実効セットに自動追加されるわけではなく、プロセスが cap_set_proc() 等で明示的に設定します。アンビエントセットはsetUID実行ファイルを経由するとクリアされます。継承セットから実効セットへの昇格には、実行ファイルの実効ビットと継承ビットが揃う必要があります。
選択肢ごとの解説
- A誤り。許可セットはプロセスが実効セットに設定できるケーパビリティの上限を定めるが、自動的に実効セットへ追加されるわけではない。プロセスが cap_set_proc() などのAPIを使い明示的に実効セットへ設定する。
- B誤り。アンビエントセット(ambient set)はsetUIDビットが立った実行ファイルを経由するとクリアされる。アンビエントセットが子プロセスに引き継がれるのは、setUIDビットもファイルケーパビリティも持たない通常の実行ファイルを介したときである。
- C正しい。バウンディングセット(bounding set)は execve 時にファイルの許可ビットとのANDを通して新プロセスが許可セットに取り込めるケーパビリティを上限付けする。バウンディングセットにないケーパビリティはファイルケーパビリティで付与できない。
- D誤り。継承セット(inheritable set)は execve をまたいで引き継がれるセットだが、それが自動的に新プロセスの実効セットに加わるわけではない。実効セットへの昇格には実行ファイルの実効ビットとファイルの継承ビットとの積が必要である。