systemd用户实例用于ssh登录有什么用

What is the use of systemd user instance for ssh logins

当您使用 SSH 登录时,pam_systemd 模块会在用户登录时自动启动一个 systemd --user 实例首次。我们可以屏蔽 user@.service 来停用它。即使我们停用 user@.service,也没有明显的影响。

屏蔽服务有影响吗?

disablemask是不同的东西。

  • disable 表示单元的 [Install] 部分被忽略。这通常意味着 WantedBy=multi-user.target 将被忽略,从而阻止设备在启动时启动。
  • mask表示无法激活该单元。这包括当另一个单元 Wants= 它时,或者即使您尝试手动启动它。 masking 肯定会阻止 user@.service 启动。

当您 sudo systemctl mask user@.service 时,您将禁用 systemd--user 总线。 unmaskstart单位,然后看systemctl --user status看看有什么不可用。

在我的桌面环境中,这看起来像:

$ systemctl --user status
● desktop
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Sun 2022-02-13 13:09:28 CET; 3 days ago
   CGroup: /user.slice/user-1000.slice/user@1000.service
           ├─app.slice
           │ ├─at-spi-dbus-bus.service
           │ ├─dbus.service
           │ ├─dconf.service
           │ ├─dunst.service
           │ ├─gvfs-afc-volume-monitor.service
           │ ├─gvfs-daemon.service
           │ ├─gvfs-goa-volume-monitor.service
           │ ├─gvfs-gphoto2-volume-monitor.service
           │ ├─gvfs-metadata.service
           │ ├─gvfs-mtp-volume-monitor.service
           │ ├─gvfs-udisks2-volume-monitor.service
           │ ├─vnc.service
           │ ├─xdg-desktop-portal-gnome.service
           │ ├─xdg-desktop-portal-gtk.service
           │ └─xdg-permission-store.service
           ├─background.slice
           │ ├─plasma-kglobalaccel.service
           │ └─tracker-miner-fs-3.service
           ├─init.scope
           └─session.slice
             ├─pipewire-media-session.service
             ├─pipewire.service
             ├─pulseaudio.service
             ├─xdg-desktop-portal.service
             └─xdg-document-portal.service

在没有桌面环境的无头服务器上,这实际上什么都不包括。

$ systemctl --user status
● server
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Wed 2022-02-16 13:29:30 CET; 3s ago
   CGroup: /user.slice/user-1000.slice/user@1000.service
           └─init.scope
             ├─581 /lib/systemd/systemd --user
             └─583 (sd-pam)

如果我要 systemctl mask user@.service:

  • 在我的桌面上,很多这些东西都是我的桌面环境安装的。我会注意到诸如 desktop-integrated 身份验证代理和通知之类的事情将停止工作。我的 VNC 服务将不可用,我的 U 盘将不可用 auto-mount,我的密钥环将不可用,等等
  • 在我的服务器上,我根本不会注意到任何东西(甚至没有性能提升,因为列出的所有进程都处于空闲状态。

在这两种情况下,如果需要,我将放弃定义 user-bus 单位的能力。 user 单位可用于以下用途:

  • 运行 备份脚本
  • 安装中user-ownedfile-systems
  • 运行 脚本以响应 files/directories
  • 中的更改

编辑:我差点忘了一些坐骑。 systemd 在用户登录时创建 $XDG_RUNTIME_DIR。如果屏蔽 user@.service,则不会在登录时创建该运行时用户目录。任何依赖它的东西都可能有问题。

有关加载到用户总线上的更多单元,请参阅 systemctl --user list-units