PAM 会话如何应用于 systemd 用户服务?

PAM 会话如何应用于 systemd 用户服务?

每次以用户身份登录时,您都会获得一个新的 PAM 会话。例如,我相信人们已经习惯pam_group将会话的进程添加到组中以访问某些设备,如果您登录到本地终端。

pam_systemd启动一个systemd --user实例,该实例在所有用户的登录会话之间共享。如今,例如在 Fedora 26 中,您将看到所有 gnome 终端进程实际上都是由 启动的systemd --user。这就是您的终端命令运行的地方。它们不在为每个单独登录创建的 systemd 会话范围中运行...

PAM 会话如何systemd --user影响单个实例及其创建的进程?

答案1

pam_systemd 被记录为开始systemd --user使用[email protected].

[email protected]使用PAMName=,因此它在专用的 PAM 会话中运行。 pam_systemd有一个特殊情况PAMName=systemd-user,因此启动[email protected]不会无限递归或死锁。 (此外,这个过程不会被放入新的会话范围单元中)。

$ systemctl cat user@
# /usr/lib/systemd/system/[email protected]

[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service

[Service]
User=%i
PAMName=systemd-user
Type=notify
ExecStart=-/usr/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
TimeoutStopSec=120s

pam_systemd 并不真正使用与 PAM 会话相关的功能,这些功能根据各个 TTY 的不同而有所不同。相反,logind使用 ACL 授予登录权限用户访问某些设备。只要 PAM 会话打开,任何具有该 UID 的进程将能够访问它们。

Logind 还有一个 DBus 接口,允许该用户的一个进程打开某些设备,用于显示服务器,例如 X Windows。它具有处理切换 VT 和多个“席位”(设备组)的代码。

相关内容