Ssh

為什麼 sudo -i 沒有為目標使用者設置 XDG_RUNTIME_DIR?

  • February 13, 2018

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_DIRenv_keepin sudoers,但這只會保留 sudoing 使用者的環境,這不是我想要的。我想要目標使用者的環境。

不過,我真正想知道的是,如何正確設置會話ssh,而不是使用suor sudo -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可以工作,但沒有人實施它(仍然)。

引用自:https://unix.stackexchange.com/questions/346841