Posso pensar em duas maneiras de fazer isso:
Uma é tornando o serviço um serviço de usuário em vez de um serviço de sistema.
Em vez de criar uma unidade do sistema, a unidade do systemd será colocada no diretório inicial do usuário do serviço, em $HOME/.config/systemd/user/daemon-name.service
. O mesmo usuário pode então gerenciar o serviço com systemctl --user <action> daemon-name.service
.
Para permitir que a unidade de usuário inicie na inicialização , a raiz deve ativar o linger da conta, ou seja, sudo loginctl enable-linger username
. A unidade também deve ser WantedBy=default.target
.
A outra maneira é permitir que o usuário acesse para gerenciar a unidade do sistema via PolicyKit. Isso requer o systemd 226 ou superior (e PolicyKit > = 0.106 para os arquivos JavaScript rules.d - verifique com pkaction --version
).
Você criaria um novo arquivo de configuração do PolicyKit, por exemplo, /etc/polkit-1/rules.d/57-manage-daemon-name.rules
, que verifica os atributos que você deseja permitir. Para exemplo :
// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
O usuário nomeado pode então gerenciar o serviço nomeado com systemctl
e sem usar sudo
.