LinuCレベル3 セキュリティスペシャリスト アクセスおよび権限制御の強化 問14
アクセスおよび権限制御の強化/Linux Capabilities による権限制御systemdのサービスユニットで NoNewPrivileges=yes を指定したときの動作として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「アクセスおよび権限制御の強化」に対応。実際の試験問題ではありません)
- Aサービスのバウンディングセットからすべてのケーパビリティが外され、起動時から一切の特権を持たない
- BUser= の指定にかかわらず、サービスをroot(UID 0)として起動することができなくなる
- Cサービスや子プロセスがexecveしたsetuidプログラムやファイルケーパビリティで特権を得られなくなる
- Dサービスのプロセスが新しいファイルやディレクトリを作成できなくなり、既存ファイルの更新だけが許される
正解:C
解説
NoNewPrivileges=yesは、サービスのプロセスと子プロセスに no_new_privs フラグを設定し、execve()によって新しい特権を得られないようにします。具体的には、setuid・setgidビットやファイルケーパビリティが付いたプログラムを実行しても、権限は昇格しません。既に持っている権限を取り上げるものではないので、保持するケーパビリティを絞るにはCapabilityBoundingSetを、一般ユーザーのサービスに特定のケーパビリティを渡すにはAmbientCapabilitiesを併用します。
選択肢ごとの解説
- A誤り。ケーパビリティを制限するのはCapabilityBoundingSetの役割です。NoNewPrivilegesは既に持っている権限を取り上げません。
- B誤り。NoNewPrivilegesは起動ユーザーを制限しません。rootで起動したサービスはrootのままで、execveによる追加の昇格だけが防がれます。
- C正しい。no_new_privsが設定されると、setuid・setgidビットやファイルケーパビリティによる権限の昇格が起こらなくなります。
- D誤り。ファイルの作成可否はNoNewPrivilegesとは無関係です。書き込みを制限するにはProtectSystemやReadOnlyPaths等を使います。