テクノロジー · 実用ガイド

systemd の status=226/NAMESPACE?強化を無効にする前に失敗した名前空間操作を証明する

最初の詳細な journal エラーを保存し、各名前空間設定を実資源へ対応付け、証明された境界だけを直します。

オリジナルイラスト:systemd の有効設定、最初の journal errno、資源、host 制約を対応付ける。
オリジナルイラスト:systemd の有効設定、最初の journal errno、資源、host 制約を対応付ける。 Watch at Ease

status=226/NAMESPACE は、systemd が mount、UTS、IPC 名前空間を準備する段階で失敗したことを示します。サービス本体は通常実行を始めていないため、アプリの引数やログから始めるのは層が違います。

統合後 unit、最初の詳細な journal errno、設定と資源の対応表、ホストまたはコンテナ境界という四つの証拠を結びます。最初に切れた接続だけを修正し、無関係な sandbox は残します。

有効 unit と最初の失敗を固定する

systemctl cat と systemctl show を保存し、drop-in、systemd と kernel の版、manager の種類、container の有無を記録します。

失敗した起動の先頭から journal を読み、「Failed to set up … namespacing」の原文、パス、errno を 226 の要約より先に保存します。

設定を名前空間操作へ対応付ける

PrivateTmp、ProtectHome、ProtectSystem、path list、bind mount、一時 filesystem、root directory/image、PrivateIPC、ProtectHostname を列挙します。

各設定について source、destination、期待する型、symlink、供給 mount、任意の「-」prefix を記録し、直近の一行だけに絞りません。

ポリシーを弱めず資源を検証する

manager の host view で全 source と destination の存在と型を確認し、findmnt と path 解決で typo、node type、missing mount、permission を分けます。

EACCES/EPERM は親 directory、mount flag、MAC denial を調べ、EINVAL は対象と環境を保存してから変更します。

host と container の制約を分ける

Docker、LXC、user manager、user namespace は必要な所有権や capability を持たない場合があります。production を privileged にせず、検証環境で最小 unit を比較します。

user namespace、kernel support、container policy、AppArmor/SELinux 証拠を記録します。拒否ログがないことは全操作可能の証明ではありません。

一つの限定修復で閉じる

証明した typo、path、mount order、node type、policy、環境制約だけを直します。sandbox を緩めるなら、より狭い bind path や writable path を優先します。

daemon-reload と再起動後、元の行と 226 が消え、他の強化が有効なままか確認し、前後の証拠を保存します。

オリジナルイラスト:決定木で path/mount 失敗と kernel、container、MAC 制約を分離する。
オリジナルイラスト:決定木で path/mount 失敗と kernel、container、MAC 制約を分離する。 Watch at Ease