web-dev-qa-db-ja.com

別のユーザーとしてサービスを起動する前に、systemdがrootとしてコマンドを実行するにはどうすればよいですか?

次のsystemdサービスファイルを使用して、Fedora 17マシンでsvnserveを実行しています。

[Unit]
Description=Subversion Server
After=syslog.target network.target

[Service]
User=svn
Type=forking
Environment=HOME=/repos/svn
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /repos/svn
PIDFile=/run/svnserve/svnserve.pid

[Install]
WantedBy=multi-user.target

/ var/run/svnserveがsvn:svnによって所有されている限り、これは正常に機能しますが、その所有権がroot:rootにリセットされると、再起動時に中断します。私が欲しいのは、ディレクトリを変更する起動前のステップを追加することです。

残念ながら、systemdユニットファイルに関する実際のドキュメントは見つかりませんが、「ExecStartPre」を使用しているものがあるので、これを試しました。

ExecStartPre=/bin/chown svn:svn /run/svnserve

残念ながら、これは「操作が許可されていません」エラーで失敗するため、ユニットファイルで指定されたユーザーとしてExecStartPreも実行されているようです。

また、ユニットファイルをrootとして実行してから、svnserveをsuを介してsvnユーザーとして起動しようとしましたが、コマンドラインが無効であるという漠然としたエラーが発生しました。

Systemdユニットは、特定のユーザーとして実行する前にrootとしてアクションをどのように実行できますか?

7
DNS

FedoraのSubversionパッケージはsystemdのtmpfilesメカニズムを使用して、ブート時にルート所有権で/run/svnserveを作成します(パッケージ化された.serviceファイルは明らかにデーモンをルートとして実行するため)。 /usr/lib/tmpfiles.d/svnserve.conf/etc/tmpfiles.d/svnserve.confにコピーして、所有者を変更できます。詳細については、man tmpfiles.dをご覧ください。

8
Chris Williams

ExecStartPreをスクリプトへのSudo呼び出しにして、このスクリプトのユーザーsvnを構成できます。

0
Hauke Laging