Solución 1:
Se me ocurren dos formas de hacerlo:
Una es hacer que el servicio sea un servicio de usuario en lugar de un servicio de sistema.
En lugar de crear una unidad del sistema, la unidad systemd se colocará en el directorio de inicio del usuario del servicio, en $HOME/.config/systemd/user/daemon-name.service
. El mismo usuario puede administrar el servicio con systemctl --user <action> daemon-name.service
.
Para permitir que la unidad de usuario comience en el arranque, la raíz debe habilitar la persistencia para la cuenta, es decir, sudo loginctl enable-linger username
. La unidad también debe ser WantedBy=default.target
.
La otra forma es permitir que el usuario acceda a administrar la unidad del sistema a través de PolicyKit. Esto requiere systemd 226 o superior (y PolicyKit>=0.106 para los archivos de JavaScript rules.d; consulte con pkaction --version
). Tenga en cuenta que Debian ha retenido deliberadamente PolicyKit a una versión 0.105 de casi una década que no es compatible con esta funcionalidad, aparentemente debido a la opinión personal de una persona, y ni él ni las distribuciones derivadas de él (como Ubuntu) pueden usar este método.
Crearía un nuevo archivo de configuración de PolicyKit, p. /etc/polkit-1/rules.d/57-manage-daemon-name.rules
que comprueba los atributos que desea permitir. Por ejemplo:
// 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;
}
});
El usuario designado puede administrar el servicio designado con systemctl
y sin usar sudo
.
Solución 2:
sudo
esta hecho para eso. Edita tu /etc/sudoers
archivo con visudo
para agregar un Cmd_alias
para los comandos que desea que el usuario sin privilegios pueda usar:
# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>
y agregue una línea para permitir que el usuario sin privilegios use los comandos definidos con el alias como este:
unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS
Lea más documentación sobre el tema para los diversos parámetros del comando sudo.
Es posible que deba instalar sudo
paquete para tener sudo
disponible en su sistema.