「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)という2つのプロセスがリッスンしていることがわかります。実行すると、strace -p 474dbus-daemonがメッセージを受け取り、passwdファイルを開いて読み込み、何も記録せずに要求を拒否していることを示します。

Q: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だけで入ることができます。これで、正しく実行する方法だけを調べることができます。 :-/

おすすめ記事