web-dev-qa-db-ja.com

rootアクセスで実行するためのSystemdサービスの設定

Raspbian JessieのSystemdで設定されたnode.jsアプリケーションの形式のサービスがあり、独自のユーザーアカウントを使用しています。ただし、必要な権限がないため、サービスが正しく実行されないことがわかりました。インストールしたノードモジュールの1つにルートアクセスが必要です。 Sudoを使用してアプリケーションを手動で実行すると、すべてが正常に動作します。

Systemdにsudoでサービスを実行するように指示する方法はありますか?

22
Luke

systemdにSudo

Sudoはそれとは何の関係もありません。

通常、systemdに、ユニットファイルのUser=セクションにあるGroup=および[Service]ディレクティブを使用して、特定のユーザー/グループとしてサービスを実行するように指示します。

それらをrootに設定します(またはrootとして実行することがデフォルトであるため、それらを削除します)。

34
HBruijn

クリアするために、systemdシステムサービスはデフォルトでrootとして実行されますが、デフォルトの動作とUser=rootを使用したシステムサービスの実行には違いがあります。

生成されたプロセスの環境変数 に記載されているように、これらの変数はUser=が設定されている場合にのみ設定されます。

$USER, $LOGNAME, $HOME, $Shell

私はこの発見を確認するためにテストしました。したがって、上記の変数のいずれかを必要とするsystemdサービスをrootとして実行する場合は、User=rootを設定する必要があります。

15
Mark Stosberg

一時的な解決策ですが、ピンチで機能するようになりました:

/usr/bin/Sudo /bin/bash -lc 'bundle exec Rails server -e demo -p 80'

次のように、systemdユニットファイルでSudo権限を持つユーザーで実行できます。

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/Sudo /bin/bash -lc 'bundle exec Rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target
2
daino3

この場合、システムユーザーとして実行します。デフォルトでは、サービスはrootとして実行されます。

1
Umut