每次以用户身份登录时,您都会获得一个新的 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 和多个“席位”(设备组)的代码。