systemd 用户= 与 --user

systemd 用户= 与 --user

User=someuser在单元配置中指定与将其作为服务运行的用例有哪些?在服务中--user指定是否有意义?User=--user

答案1

User=someuserin a system service 定义了一个不以 root 用户身份启动的系统服务。系统服务将独立于用户登录运行;即使没有人登录系统,它也会继续运行。尽可能在专用服务帐户上运行服务是很好的安全性,但有时服务需要以 root 身份启动,并可能在执行一些传统上需要 root 访问权限的初始操作(例如打开 TCP 或 UDP 端口)之后自行转换到服务帐户端口号低于 1024。

--user为登录用户启动服务。默认假设是,当拥有这些服务的用户从系统上最后一个剩余会话注销时,所有用户服务都会停止;但是,系统管理员可以允许用户进程在注销后保留。一些发行版甚至默认允许它,因为 Unix/Linux 系统历史上在注销时获取用户进程并不严格,并且用户可能期望他们可以在注销时让后台进程保持运行而不需要执行任何操作任何systemd特定的东西。

(另一方面,多用户系统的管理员传统上必须实施各种解决方案来清理遗留的旧用户进程,例如,当笔记本电脑用户实际上并未注销,而只是合上笔记本电脑的盖子并走开时允许在需要时准确地终止每个会话的进程,但结果是系统管理员需要就systemd是否以及何时需要自动会话清理做出策略决定。)

如果同一用户同时登录多个会话,他们将只--user运行一份服务副本。因此,--user服务并不真正与用户的任何特定会话相关联,而仅与用户本身相关联。

我认为,以会话所属的登录用户以外的身份运行服务--user仅在非常有限的情况下有用。如果服务的访问需要仅限于某个共享帐户,那么我认为通常最好将其设为系统服务,因此将有一个选项来共享管理服务的访问权限(以及管理责任)如果需要的话,向有权访问共享帐户的其他人提供。

答案2

问题是谁 systemd 实例正在运行该服务以及谁应该执行其中的命令。

您可能希望服务在用户登录时启动joe,但命令本身是由普通帐户运行的shared_account。在这种情况下,服务从 的用户实例运行joe,但对命令的访问可能仅限于shared_account

一般来说,--user和之间的区别User=可以归结为谁拥有服务实例与哪个 UID 在服务中运行命令。如果User=未指定,则默认为 systemd 实例的所有者。

相关内容