"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

exampleroot이 명령은 를 호출할 때 완벽하게 실행되지만 실행 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_socketsystemd(pid=1) 및 dbus-daemon(pid=474)이라는 두 개의 프로세스가 수신 대기하고 있음을 알 수 있습니다. 실행하면 strace -p 474dbus-daemon이 메시지를 받고, passwd 파일을 열고 읽고, 아무것도 기록하지 않고 요청을 거부하고 있음을 보여줍니다.

질문: user2가 호출할 수 있도록 이 문제를 어떻게 수정합니까?

메타 질문:

  • systemd는 이러한 실패를 어디에 기록합니까?
    • 1초마다 명령을 실행할 때 시스템의 1분 로그 파일을 찾아봤지만 서비스나 사용자에 대한 언급은 찾지 못했습니다.
  • systemd는 명령을 실행할 수 있는 사람을 어떻게 결정합니까?
    • 중요한 경우 IPA/sssd/IDM을 사용하고 있습니다.

운영 체제: Ubuntu 18.04 시스템 버전: 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것만으로도 진입할 수 있습니다. 이제 올바르게 수행하는 방법만 알아내면 됩니다. :-/

관련 정보