LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問11
アクセスおよび権限制御の強化/システムコールの制御systemdのサービスユニットに次の設定を記述した。このサービスがmount(2)を呼び出したときの動作として適切なものはどれか。 SystemCallFilter=~@mount @reboot SystemCallErrorNumber=EPERM
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- A~ は許可リストの意味なので、@mount と @reboot のシステムコールだけが呼べる状態になる
- BSystemCallFilterに違反したため、プロセスはSIGSYSシグナルで即座に強制終了させられる
- C違反の記録だけが監査ログに残され、mount(2)自体は通常どおり成功して処理が続行される
- Dmount(2)は実行されずにEPERMのエラーが返り、プロセスは終了させられずに処理を続ける
正解:D
解説
SystemCallFilterは、値の先頭に ~ を付けると列挙したシステムコールを禁止する拒否リストになり、付けなければ列挙したものだけを許可する許可リストになります。@mount や @reboot は、systemdが用意しているシステムコールのグループです。フィルタに違反した場合、既定ではプロセスがSIGSYSで終了させられますが、SystemCallErrorNumberを指定すると終了させずに指定したエラー番号を返すようになります。32ビットABI経由の迂回を防ぐため、SystemCallArchitectures=native を併用するのが一般的です。
選択肢ごとの解説
- A誤り。~ は反転の意味で、列挙したシステムコールを禁止する拒否リストになります。~ を付けない場合が許可リストです。
- B誤り。SIGSYSでの終了はSystemCallErrorNumberを指定しない場合の既定の動作です。この設定ではエラー番号が返ります。
- C誤り。違反を記録するだけで実行を許すのは、この設定の動作ではありません。mount(2)は実行されません。
- D正しい。SystemCallErrorNumber=EPERMにより、禁止されたシステムコールは実行されずにEPERMが返り、プロセスは続行します。