我正在尝试确定哪个 Linux 用户/组运行 systemd 作业,以便我可以相应地设置 D-Bus 权限。
当我这样做时:
sudo systemctl start myservice
这最终会调用一个可执行文件,该文件会尝试在 D-Bus 上注册自身,但要使其正常工作,我需要在 D-Bus 配置中提供用户权限。如何判断哪个 Linux 用户/组与上述内容相关联?
答案1
您可以在单元文件中使用 User= 和 Group= 指令。
http://www.freedesktop.org/software/systemd/man/systemd.exec.html
Systemd 单元文件的文档记录得相当好(与许多其他开源软件相比)。单元文件中使用的指令分散在许多手册页中,因此信息可能不太容易找到和理解,特别是如果读者对 systemd 概念不太清楚的话。
但所有指令都有一个索引页:
http://www.freedesktop.org/software/systemd/man/systemd.directives.html
还有更多可用文档:
http://www.freedesktop.org/wiki/Software/systemd/
我读它已经有一段时间了,但如果我记得正确的话,Systemd for Administrators 博客系列对这些概念提供了合理的背景介绍。
对于所有类型的问题
我怎么知道……
只需添加 ExecStartPre= 指令以及适合测试/查询所需项目的命令。
例如
ExecStartPre=/usr/bin/whoami
请注意,systemd 默认不使用 shell,但您始终可以手动使用。
ExecStartPre=/bin/sh -c "if true;then echo true;fi"
systemctl status <myunit>
您可以使用或通过命令查看日志journalctl
(以 root 身份!)来查看此类命令的输出。