mka*_*ito 21 ssh pam sudo systemd
XDG_RUNTIME_DIR
是systemctl --user
工作所必需的。
我已经设置了 ubuntu 服务器 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
in sudoers
,但这只会保留 sudoing 用户的环境,这不是我想要的。我想要目标用户的环境。
不过,我真正想知道的是,会话如何正确设置为ssh
,而不是su
或sudo -i
?
sou*_*edi 12
我已经在我的 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
可以工作,但没有人实施它(仍然)。
不过,我真正想知道的是,如何使用 ssh 正确设置会话,而不是使用 su 或 sudo -i 设置?
https://github.com/systemd/systemd/issues/7451#issuecomment-346787237
抱歉,“su”是一种用于临时更改用户身份和很少其他进程凭据的工具。它不是用于打开全新登录会话的工具。一个新的登录会话有一个非常明确的、原始的设置,没有从任何其他会话继承任何东西,但对于“su”uid 更改来说,情况确实不是这样:大部分执行环境都被继承了,在许多且不明显的情况下方式,例如 MAC 上下文、审计上下文、cgroup 上下文、命名空间上下文、调度、计时器粒度……
如果您想要一个全新的会话,请使用诸如“machinectl login”或“machinectl shell”之类的东西,这实际上将为您提供一个完全干净、独立、分离的环境,并且不会从您调用它的地方泄漏隐藏的进程属性。
logind session 多是绑定到审计会话的概念,审计会话不受“su”的影响,实际上它们被定义为“密封的”,即一个进程一旦进入一个会话,它就会一直停留有了它,它的孩子也将如此,即获得新会话的唯一方法是从从未参与过会话的 PID 1(或类似的东西)中分出一些东西。
或者换一种说法:您通过“su”调用的内容将在“loginctl”中正常显示,但是,它仍然是您最初登录的原始会话的一部分。您可以通过在原始会话的 ID(您可以通过 echo $XDG_SESSION_ID 看到)上调用“loginctl status”来验证这一点
归档时间: |
|
查看次数: |
7342 次 |
最近记录: |