XDG_RUNTIME_DIR
systemctl --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
すればsudoers
sudoingユーザーの環境だけが保存されるので、私は望むものではありません。欲しいターゲットユーザー環境。
しかし、私が本当に知りたいのは、or_set_session_properlyをssh
使用する代わりにset_session_properlyを使用する理由です。su
sudo -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-run
machinectlのドキュメントで参照されていますが、期待どおりに動作しないようです。
現在SELinuxを有効にしている場合、特定のmachinectlコマンドは機能せず、これらの特定のコマンドは有効になるまで機能しませんでしたsetenforce 0
。しかし、私はSELinuxで動作したいので、machinectlが動作するようにする回避策を試しているので、タイムアウトの原因になる可能machinectl shell
性があります。
編集:このコードは次の後に導入されたようです。この議論。明らかにsu -
/sudo -i
動作することができますが、誰も(まだ)それを実装していません。
関連コミットはhttps://cgit.freedesktop.org/systemd/systemd/commit/?id=baae0358f349870544884e405e82e4be7d8add9f