他のユーザーのシステム単位の管理

他のユーザーのシステム単位の管理

あるユーザー(またはルート)が別のユーザーのユーザーレベルのシステムサービスを制御できますか?

私はこれを試しましたが、sudo -u <some user> systemctl --user restart <some service>dbus:について文句を言いますFailed to get D-Bus connection: Connection refused

答え1

SSH経由でリモートでGentooボックスにログインしたときも同じ問題に直面しました。私の場合は、不足しているXDG_RUNTIME_DIR環境変数が原因でした。DBUS_SESSION_BUS_ADDRESS次のコマンドを実行して再試行してください。

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

役に立つ場合は、これらのコマンドを.bashrcに入れることができます。 .bashrcよりもエレガントなソリューションが必要だと思いますが、これはディストリビューションによって異なります。

これが私が解決策を見つけた場所です。

編集する:

rootとしてログインした後、次のようにsystemctl --user他のユーザーとして正常に実行しましたsu

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

または、以下を使用しますsudo(注意して、そのユーザーUID(1000)を「/run/user/」パスに明示的に追加する必要がありましたが、bashスクリプトで実行している場合は$ SUDO_UIDを代わりに使用できます)。

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

答え2

システム248-M username@(2021年3月リリース)他のユーザーを指定するための構文サポートが導入されました。

別のユーザー名が次のようになっているとします。テストユーザーサービスはfoob​​ar.service、今実行できます

sudo systemctl -M testuser@ --user restart foobar.service

答え3

仮想のsomeuser使用強く打つログインシェルとして以下を追加します。出口到着~someuser/.bashrc:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

その後、ルート/Sudosomeuser次のようにコマンドをラップして、権限をsystemdと対話することができますrunuser

sudo runuser -l someuser -c "systemctl --user restart some-template@$some-service.service"

答え4

Failed to connect to bus: No such file or directoryUbuntu 20.04()で次のコマンドを実行すると同じエラーが発生しました。

systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service

問題はエイリアシングによって発生します。

alias systemctl='sudo systemctl'

systemctlsudoと交換するとsudo systemctlエラーが発生しました。

環境変数:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

ので使用されませんsudo

mkaitoに書く上記のコメント:

sudoは基本的に環境を消去するので、これらのホワイトリストが必要だと思います。

関連情報