Как systemd может запустить команду от имени пользователя root перед запуском службы от имени другого пользователя?
Я запускаю svnserve на машине с Fedora 17 со следующим служебным файлом systemd:
[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. То, что я хочу, это добавить шаг перед запуском, который разбивает каталог.
К сожалению, я не могу найти никакой реальной документации по файлам системного модуля, но я увидел, что некоторые используют ExecStartPre, поэтому я попробовал это:
ExecStartPre=/bin/chown svn:svn /run/svnserve
К сожалению, это завершается с ошибкой "операция не разрешена", поэтому похоже, что ExecStartPre также выполняется от имени пользователя, указанного в файле модуля.
Я также попытался запустить файл модуля от имени пользователя root, а затем запустить svnserve как пользователь svn через su, но это привело к неопределенной ошибке, связанной с недопустимой командной строкой.
Как модули systemd могут выполнять действия от имени пользователя root перед выполнением от имени конкретного пользователя?
2 ответа
Пакет subversion в Fedora использует механизм systemd tmpfiles для создания /run/svnserve
при загрузке с владением root (поскольку упакованный файл.service, по-видимому, запускает демон от имени root). Вы могли бы скопировать /usr/lib/tmpfiles.d/svnserve.conf
в /etc/tmpfiles.d/svnserve.conf
и сменить владельца. Увидеть man tmpfiles.d
для деталей.
Вы можете сделать ExecStartPre sudo-вызовом сценария и настроить пользователя svn для этого сценария.