Estoy ejecutando un servidor de juegos privado en una caja de linux sin cabeza. Como no soy un idiota, dicho servidor se está ejecutando como su propio usuario sin privilegios con los derechos mínimos de acceso que necesita para descargar actualizaciones y modificar la base de datos mundial.
También creé un archivo de unidad systemd para iniciar, detener y reiniciar correctamente el servidor cuando sea necesario (para dichas actualizaciones, por ejemplo).
Sin embargo, para llamar realmente systemctl
o service <game> start/stop/restart
todavía necesito iniciar sesión como sudo
usuario root o como un usuario capaz.
¿Hay alguna manera de decirle a systemd que, para el <game>
servicio, un usuario sin privilegios gamesrv
puede ejecutar los comandos de inicio / detención / reinicio?
Respuestas:
Se me ocurren dos formas de hacer esto:
Una es hacer que el servicio sea un servicio de usuario en lugar de un servicio del 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 consystemctl --user <action> daemon-name.service
.Para permitir que la unidad de usuario se inicie en el arranque , root debe habilitar la demora para la cuenta, es decir
sudo loginctl enable-linger username
. La unidad también debe serWantedBy=default.target
.La otra forma es permitiendo 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 JavaScript rules.d - verifique con
pkaction --version
).Crearía un nuevo archivo de configuración de PolicyKit, por ejemplo,
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
que verifica los atributos que desea permitir. Por ejemplo :El usuario nombrado puede administrar el servicio nombrado con
systemctl
y sin usarsudo
.fuente
loginctl
trabajado.sudo
está hecho para eso. Edite su/etc/sudoers
archivo convisudo
para agregar unCmd_alias
para los comandos que desea que el usuario sin privilegios pueda usar:y agregue una línea para permitir que el usuario sin privilegios use los comandos definidos con el alias de esta manera:
Lea más documentación sobre el tema para los diversos parámetros del comando sudo.
Es posible que deba instalar el
sudo
paquete para tenersudo
disponible en su sistema.fuente
systemd
archivo de la unidad es especificar que debe ejecutarse comogamesrv
.Puede asociarse
sudo
con proporcionar acceso equivalente aroot
, pero también se puede usar para permitir un acceso raíz de usuario específico para un conjunto específico y limitado de comandos.¿Cómo se ha respondido eso en Server Fault, en [ Dar acceso a un conjunto de comandos a un usuario no root sin sudo? Acceder a un conjunto de comandos a un usuario no root sin sudo).
Usar PolicyKit sigue siendo poco común. El uso de una "unidad de usuario" de systemd debería funcionar bien, pero históricamente su objetivo se ha cumplido muchas veces mediante la capacidad de
sudo
permitir que un usuario ejecute comandos específicos como root.fuente