ルートアクセスで実行するためのSystemdサービスの構成


21

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

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


2
ユニットファイルはどのように見えますか、質問に追加しますか?通常systemd、ルート権限でユニットファイルを実行します。
トーマス

回答:


31

systemdにサービスを実行するように伝えsudoますか?

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

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

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


ガイドを使用して構成するため、特定のユーザーを使用するようにセットアップしました。しかし、私の場合、これは適切ではありませんでした。これを削除して、デフォルトでrootとして実行し、すべてが機能するようになりました!
ルーク

2
rootとして実行することは、で実行することとはまったく異なりUser=rootます。私の答えをご覧ください。
マークストースバーグ

このファイルはどこで編集できますか?
マシュー


15

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

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

$USER, $LOGNAME, $HOME, $SHELL

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


ありがとうございました!それは私が持っていることをアプリケーションに私のために働いただけのものだった
ペドロ・トーレス

NB User = rootを設定する場合、おそらくGroup = rootも設定する必要があります
rogerdpack

2

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

/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つの答えは、ユーザーを使用してからsudoを使用する必要がない理由を説明し、正しい方法を示しています。第二に、とにかくルートとしてwebappを実行するべきではありません。3番目に、Webアプリはnginxなどの通常のWebサーバーの背後にある必要があります。
マイケルハンプトン

私はあなたのポイントのいずれかであなたに反対しません。しかし、私のような誰かが、できるだけ早く、できるだけ早くサーバーのスタンドアップを望んでいた場合、これは実行可能な実行可能なオプションです。
daino3

できるだけ早く。明らかに使用sudoすると、起動が少し遅くなります。そして、それは不要です。
マイケルハンプトン

@MichaelHamptonバックドアを作成しようとしているので、この回答が役立つことがわかりました!
P. Soutzikevich

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.