Como executo um processo que deseja se tornar root de um serviço do systemd que é um usuário comum?

6

Eu tenho um serviço que eu começo a usar o systemd. O usuário e o grupo de serviços são alterados para um usuário não privilegiado.

[Service]
...
User=regular_user
Group=regular_user
...

Em algum momento, o serviço precisa iniciar outro processo, que deve se tornar root. Esse outro processo tem seu bit 'set' e usa setuid() para se tornar root.

O processo funciona bem se eu iniciá-lo. No entanto, de alguma forma, quando o serviço tenta iniciá-lo, a função setuid() retorna com um erro:

Operation not permitted.

Eu já vi algumas opções sobre os recursos, mas não tenho idéia se isso é necessário para manter o recurso setuid() funcionando no meu serviço. Eu tentei algumas coisas e nenhuma ajudou até agora.

Por exemplo, tentei isso:

AmbientCapabilities=CAP_SETGID CAP_SETUID
SecureBits=keep-caps

E, embora o processo pareça não gerar mais um erro, ele ainda não faz o que deve fazer (novamente, se eu executar esse processo no meu console, ele funcionará bem!)

    
por Alexis Wilke 07.10.2016 / 02:05