Fedora

systemd 如何在以不同使用者身份啟動服務之前以 root 身份執行命令?

  • February 26, 2013

我正在使用以下 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 時會在重新啟動時中斷。我想要的是添加一個 chowns 目錄的預啟動步驟。

不幸的是,我找不到關於 systemd 單元文件的任何真實文件,但我看到有些人正在使用“ExecStartPre”,所以我嘗試了這個:

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

遺憾的是,這失敗並出現“不允許操作”錯誤,因此看起來 ExecStartPre 也以單元文件中指定的使用者身份執行。

我還嘗試讓單元文件以 root 身份執行,然後通過 su 以 svn 使用者身份啟動 svnserve,但這會產生一個關於命令行無效的模糊錯誤。

在以特定使用者身份執行之前,systemd 單元如何以 root 身份執行操作?

Fedora 中的 subversion 包使用 systemd 的 tmpfiles 機制/run/svnserve在啟動時以 root 所有權創建(因為打包的 .service 文件顯然以 root 身份執行守護程序)。您可以複製/usr/lib/tmpfiles.d/svnserve.conf/etc/tmpfiles.d/svnserve.conf更改所有者。詳情請參閱man tmpfiles.d

您可以使 ExecStartPre 成為對腳本的 sudo 呼叫,並為此腳本配置使用者 svn。

引用自:https://serverfault.com/questions/482319