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

systemd の status=217/USER:権限変更の前に ID 境界を証明する

最初の journal エラー、実効ユニット、User=/Group=、NSS、ID プロバイダーの準備状態、PrivateUsers の順に確認します。

ja original systemd identity-chain diagram
オリジナルイラスト:verify the pre-exec identity chain. Watch at Ease

status=217/USER はアプリのクラッシュではなく、systemd の実行前エラーです。上流仕様では、ユーザー資格情報の決定・変更またはユーザー名前空間の設定失敗を示します。

ユニットとログを保存し、実効設定、NSS 解決、外部プロバイダーの準備、名前空間、安全な事前実行マーカーを一つの証拠列として確認します。

最初の journal エラーから始める

systemctl status と journalctl -b -u を保存し、Failed at step USER、資格情報、名前空間、errno を記録します。

最初に chmod、chown、アプリ変更を行わないでください。217 ではまだ ExecStart の失敗は証明されていません。

一つのファイルではなく実効ユニットを読む

systemctl cat と systemctl show で User=、Group=、DynamicUser=、drop-in を確認します。

テンプレートや構成管理ではインスタンス名と配備済み上書きも記録します。構文成功は ID 解決の証明ではありません。

NSS で ID 解決を証明する

getent passwd、getent group、id を実行します。getent は SSSD や LDAP を含む NSS 経路を通ります。

同じブート段階で UID、GID、補助グループ、home、shell を再確認し、後の手動成功と区別します。

起動と準備完了を分ける

ディレクトリ ID では getent が初めて成功する時刻とプロバイダーの ready 証拠を保存します。After= は非同期検索の準備を保証しません。

sleep は一時実験に限定し、最終的には有効な準備完了シグナルを使います。

ユーザー名前空間を別分岐で検査する

journal が user namespacing を示す場合、PrivateUsers=、コンテナ方針、UID マップ、カーネル制限を調べます。

安全な試験以外でハードニングを恒久的に無効化しないでください。

終了証拠を得てからアプリを調査する

同じブート経路で ID と名前空間が成功したら、一時的な ExecStartPre=/usr/bin/id で実行到達を証明します。

証拠を保存して一時上書きを削除し、その後に実行ファイルやアプリログを調査します。

ja original systemd 217 decision tree
オリジナルイラスト:classify the first journal failure. Watch at Ease