Como o systemd pode executar um comando como root antes de iniciar um serviço como um usuário diferente? [fechadas]

6

Estou executando o svnserve em uma máquina Fedora 17 com o seguinte arquivo de serviço 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

Isso funciona bem, desde que o / var / run / svnserve seja de propriedade de svn: svn, mas quebre durante a reinicialização quando essa propriedade for redefinida para root: root. O que eu quero é adicionar uma etapa de pré-lançamento que chowns o diretório.

Infelizmente não encontrei nenhuma documentação real sobre os arquivos unitários do systemd, mas vi que alguns estavam usando 'ExecStartPre', então tentei fazer isso:

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

Infelizmente, isso falha com um erro de 'operação não permitida', então parece que o ExecStartPre também é executado como o usuário especificado no arquivo de unidade.

Eu também tentei rodar o arquivo unitário como root, e então iniciar o svnserve como o usuário svn via su, mas isso gerou um erro vago sobre a linha de comando ser inválida.

Como as unidades do systemd podem executar ações como raiz antes de executar um usuário específico?

    
por DNS 25.02.2013 / 17:57

2 respostas

8

O pacote subversion no Fedora está usando o mecanismo tmpfiles do systemd para criar /run/svnserve no boot com a propriedade root (já que o arquivo .service empacotado aparentemente executa o daemon como root). Você pode copiar /usr/lib/tmpfiles.d/svnserve.conf para /etc/tmpfiles.d/svnserve.conf e alterar o proprietário. Veja man tmpfiles.d para detalhes.

    
por 26.02.2013 / 05:11
0

Você pode fazer do ExecStartPre uma chamada sudo para um script e configurar o usuário svn para esse script.

    
por 26.02.2013 / 04:47