为什么“systemctl show -p ActiveState $some_service”仅对某些用户给出权限被拒绝错误?

为什么“systemctl show -p ActiveState $some_service”仅对某些用户给出权限被拒绝错误?

我有一个运行良好的名为“core”的服务,它具有以下服务文件:

# /etc/systemd/system/core.service
[Unit]
Description=ExampleCo Core Service

[Service]
Type=simple
ExecStart=/home/example/backend/bin/python3 /home/example/core/core.py
WorkingDirectory=/home/example/core
User=example
Group=example

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

该服务运行完美。

我编写了一个运行以下命令的服务状态脚本:

systemctl show -p ActiveState core

example当、root和调用此命令时,此命令运行完美user1,但是当user2运行它时,它们会收到此错误:

Failed to get properties: Access denied

如果 user2 用 调用它sudo,那么它就可以工作。

运行strace -e trace=connect,sendmsg,recvmsg systemctl show -p ActiveState core表明它正在与/run/dbus/system_bus_socket、 发送AUTH EXTERNAL 12345\r\nNEGOTIATE_UNIX_FD\r\nBEGIN\r\n和接收REJECTED EXTERNAL\r\nERROR "Need to authenticate first"\r\n

运行fuser /run/dbus/system_bus_socket显示有两个进程正在监听:systemd (pid=1) 和 dbus-daemon (pid=474)。运行strace -p 474显示 dbus-daemon 正在获取消息,打开并读取 passwd 文件,并拒绝请求而不记录任何内容。

问题:如何解决这个问题以便 user2 可以调用它?

元问题:

  • systemd 在哪里记录这些失败?
    • 当每秒运行一次命令时,我在系统上查找不到一分钟的日志文件,但没有发现任何提及该服务或用户的信息。
  • systemd 如何决定谁可以运行命令?
    • 我们正在使用 IPA/sssd/IDM,如果这有影响的话。

操作系统:Ubuntu 18.04 Systemd版本:systemd-237-3ubuntu10.52.deb

谢谢!

答案1

一旦我比较了 user1 和 user2 之间的 strace 输出,答案就变得显而易见了:dbus-daemon 不知道任何不在 /etc/passwd 中的用户,并且会拒绝他们的请求,并显示“需要首先进行身份验证”错误(该错误已损坏)进入 systemctl 命令的“权限被拒绝”)。

user1 位于 /etc/passwd 中,而 user2 是 IDM 用户(LDAP,/etc/passwd 中没有条目)。

采取行动getent passwd user2 >> /etc/passwd就足以使他们能够进入。现在我只需要弄清楚如何正确地做到这一点。 :-/

相关内容