GNU/Linux >> Tutoriales Linux >  >> Linux

systemd:Otorgue a un usuario sin privilegios permiso para modificar un servicio específico

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.


Linux
  1. Cómo crear un servicio Systemd en Linux

  2. ¿Cómo cambiar de usuario para un montón de archivos de servicio de Systemd?

  3. Permiso SELECCIONAR EN OUTFILE denegado pero el usuario puede escribir en el directorio

  4. Cómo detener el servicio systemd

  5. permiso docker.sock denegado

Administrar el inicio usando systemd

Comandos Systemctl para administrar el servicio Systemd

Uso de las funciones de systemd para proteger los servicios

Administrar cgroups con systemd

activación de socket systemd frente a xinetd

SSH:una Authorized_keys para varias cuentas de servicio