為什麼 sudo -i 沒有為目標使用者設置 XDG_RUNTIME_DIR?
XDG_RUNTIME_DIR
是工作所必需的systemctl --user
。我已經設置了 ubuntu server 16.04 來執行 systemd 使用者會話。現在,當嘗試管理它們時,我發現當通過
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
insudoers
,但這只會保留 sudoing 使用者的環境,這不是我想要的。我想要目標使用者的環境。不過,我真正想知道的是,如何正確設置會話
ssh
,而不是使用su
orsudo -i
?
我已經在我的 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
。但是,我正在嘗試解決方法以使 machinectl 正常工作,因為我希望它能夠執行 SELinux,因此我的擺弄可能是導致例如machinectl shell
超時的原因。編輯:我認為這段程式碼是在討論之後介紹的。顯然
su -
/sudo -i
可以工作,但沒有人實施它(仍然)。