Fedora
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 時會在重新啟動時中斷。我想要的是添加一個 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。