sudo -iがターゲットユーザーにXDG_RUNTIME_DIRを設定しないのはなぜですか?

sudo -iがターゲットユーザーにXDG_RUNTIME_DIRを設定しないのはなぜですか?

XDG_RUNTIME_DIRsystemctl --user仕事に必要です。

システムユーザーセッションを実行するためにUbuntu Server 16.04を設定しました。これで、管理しようとしたときにsudo -u $user -iユーザーを転送または変更したときにsu - $user環境がXDG_RUNTIME_DIR設定されていないため、機能しないことがわかりましたsystemctl --user。ところでsshユーザーに直接行ってみると正しく設定されていますね。

ドキュメントを正しく理解したら、libpam-systemdユーザーセッションの作成時に設定する必要があります。ユーザーフラグメントXDG_RUNTIME_DIRが指す必要があるディレクトリ()が存在するため、ユーザーフラグメントが正しく開始されます/run/users/$uid。たとえば、私はこれをハードコーディングすることを躊躇します。.bash_profileなぜならそれは陳腐に見え(有効ですが)、pamがこれを処理しなければならないからです。

もちろん、追加することもできますが、XDG_RUNTIME_DIRそうenv_keepすればsudoerssudoingユーザーの環境だけが保存されるので、私は望むものではありません。欲しいターゲットユーザー環境。

しかし、私が本当に知りたいのは、or_set_session_properlyをssh使用する代わりにset_session_properlyを使用する理由です。susudo -i

ベストアンサー1

私のFedora 25システムでこの問題を再現しました。

ソースコードで非常に疑わしい状況を見つけました。 https://github.com/systemd/systemd/blob/f97b34a/src/login/pam_systemd.c#L439 普通の気持ちで書いたようですが、sudoそうではありませんsudo -u non-root-user

machinectl shell --uid=non-root-userあなたの仕様に合わせて作業してください。

systemd-runmachinectlのドキュメントで参照されていますが、期待どおりに動作しないようです。

現在SELinuxを有効にしている場合、特定のmachinectlコマンドは機能せず、これらの特定のコマンドは有効になるまで機能しませんでしたsetenforce 0。しかし、私はSELinuxで動作したいので、machinectlが動作するようにする回避策を試しているので、タイムアウトの原因になる可能machinectl shell性があります。

編集:このコードは次の後に導入されたようです。この議論。明らかにsu -/sudo -i動作することができますが、誰も(まだ)それを実装していません。

関連コミットはhttps://cgit.freedesktop.org/systemd/systemd/commit/?id=baae0358f349870544884e405e82e4be7d8add9f

おすすめ記事