通过 sudo 启动非 root 用户 systemd 和 systemd 服务,无需 enable-linger

通过 sudo 启动非 root 用户 systemd 和 systemd 服务,无需 enable-linger

我希望能够为给定的非 root 用户启动systemd会话(例如systemd --user),然后通过会话启动服务(例如systemctl --user start SERVICE.servicesudo -iu USER,但不在该调用loginctl enable-linger USER之前使用。sudo

我知道如果我要ssh USER@host,PAM 会很乐意systemd为我创建/启动一个“会话”,但我既不想也不能使用ssh。我也知道我可以使用loginctl enable-linger USER,但我也不想这样做。

但是,如果用户已经登录,我想使用现有会话,而不是启动新会话。我想要的是这样的:

sudo -iu USER     # or possibly sudo -su USER
# then in sudo subshell...

# setup pointers to correct DBUS session:
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

# then start a systemd session, if not already running
loginctl show-user $(id -u) || systemd --user

不幸的是,systemd --user命令出现错误,例如:

Failed to create /user.slice/user-NNN.slice/session-NNN.scope/init.scope control group: Permission denied
Failed to allocate manager object: Permission denied

我遗漏了什么?pam_systemd当 headless/ssh会话启动时,显然可以完成我想要的工作。我可能缺少一些基础知识,因此还需要指向相关文档的指针,尽管我认为我已经阅读了大多数相关手册页。

为了额外加分——就像pam_systemd,如果一个会话尚未运行,而我们必须启动一个会话,那么当sudo会话结束时,该会话应该自动关闭。

相关内容