为什么 systemd 用户会话不是由“su”启动的?

为什么 systemd 用户会话不是由“su”启动的?

当我使用 ssh 登录服务器上的 root 用户时,0会创建一个条目,/var/run/user因为pam_systemd告诉我systemd-logind要执行此操作。这是一个指示符,表明 uid 0 的用户会话已启动。

然后,当我运行时su jack,我仍然只看到;0中的条目。/var/run/user本次会议没有任何条目。

但是,journalctl显示 pam 会话已打开,并且/etc/pam.d/su包括common-session,其中添加了session optional pam_systemd.so。所以我认为应该创建一个用户会话。

如何创建su用户会话?

如果相关的话,我使用的是 Debian 11。

答案1

如果当前进程已经是现有会话的成员,则 PAM 模块不会创建会话。我找到了以下解决方法来从现有会话创建会话:

systemd-run --system --scope \
    su -l

基本上,您su -l在系统级范围内运行,这不是当前用户会话的一部分,因此 PAM 模块将为该su -l进程创建一个会话。一旦进程被移动到会话,临时范围就为空并将被删除。

唯一的问题是您的当前用户必须拥有在系统级别创建范围的权限,并且您必须进行两次身份验证,一次是当前用户验证范围的创建,然后是您要为其创建会话的用户再次进行身份验证。

相关内容