GNU/Linux >> Tutoriels Linux >  >> Linux

systemd :accorder à un utilisateur non privilégié l'autorisation de modifier un service spécifique

Solution 1 :

Je peux penser à deux façons de procéder :

L'une consiste à faire du service un service utilisateur plutôt qu'un service système.

Au lieu de créer une unité système, l'unité systemd sera placée sous le répertoire personnel de l'utilisateur du service, à $HOME/.config/systemd/user/daemon-name.service . Le même utilisateur peut alors gérer le service avec systemctl --user <action> daemon-name.service .

Pour permettre à l'unité utilisateur de démarrer au démarrage, root doit activer la persistance pour le compte, c'est-à-dire sudo loginctl enable-linger username . L'unité doit également être WantedBy=default.target .

L'autre méthode consiste à autoriser l'utilisateur à gérer l'unité centrale via PolicyKit. Cela nécessite systemd 226 ou supérieur (et PolicyKit>=0.106 pour les fichiers JavaScript rules.d - vérifiez avec pkaction --version ). Notez que Debian a délibérément retenu PolicyKit à une version 0.105 vieille de près de dix ans qui ne prend pas en charge cette fonctionnalité, apparemment à cause de l'opinion personnelle d'une personne, et ni lui ni les distributions qui en sont dérivées (comme Ubuntu) ne peuvent utiliser cette méthode.

Vous créeriez un nouveau fichier de configuration PolicyKit, par ex. /etc/polkit-1/rules.d/57-manage-daemon-name.rules qui vérifie les attributs que vous souhaitez autoriser. Par exemple :

// 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;
    }
});

L'utilisateur nommé peut alors gérer le service nommé avec systemctl et sans utiliser sudo .

Solution 2 :

sudo est fait pour ça. Modifiez votre /etc/sudoers fichier avec visudo pour ajouter un Cmd_alias pour les commandes que vous souhaitez que l'utilisateur non privilégié puisse utiliser :

# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>

et ajoutez une ligne pour permettre à l'utilisateur non privilégié d'utiliser les commandes définies avec l'alias comme ceci :

unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS

Lisez plus de documentation sur le sujet pour les différents paramètres de la commande sudo.

Vous devrez peut-être installer sudo paquet pour avoir sudo disponible sur votre système.


Linux
  1. Comment créer un service Systemd sous Linux

  2. Ajouter un nouveau service à Linux systemd

  3. Autorisation SELECT INTO OUTFILE refusée mais l'utilisateur peut écrire dans le répertoire

  4. Comment démarrer un service systemd après la connexion de l'utilisateur et l'arrêter avant la déconnexion de l'utilisateur

  5. activation de socket systemd vs xinetd

Gérer le démarrage à l'aide de systemd

Commandes Systemctl pour gérer le service Systemd

Utiliser les fonctionnalités de systemd pour sécuriser les services

Gestion des cgroups avec systemd

Upstart :exécuter le service en tant qu'utilisateur non privilégié et pré-démarrer le script en tant que root

Rendre le service utilisateur systemd dépendant de la cible système