J'exécute un serveur de jeu privé sur une boîte Linux sans tête. Parce que je ne suis pas un idiot, ledit serveur fonctionne comme son propre utilisateur non privilégié avec les droits d'accès minimum nécessaires pour télécharger les mises à jour et modifier la base de données mondiale.
J'ai également créé un fichier d'unité systemd pour démarrer, arrêter et redémarrer correctement le serveur en cas de besoin (pour lesdites mises à jour, par exemple).
Cependant, afin d'appeler réellement systemctl
ou service <game> start/stop/restart
je dois toujours me connecter en tant sudo
qu'utilisateur root ou utilisateur capable.
Existe-t-il un moyen de dire à systemd que pour le <game>
service, un utilisateur non privilégié gamesrv
est autorisé à exécuter les commandes de démarrage / arrêt / redémarrage?
Réponses:
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 dans le répertoire personnel de l'utilisateur du service, à l'adresse
$HOME/.config/systemd/user/daemon-name.service
. Le même utilisateur peut alors gérer le service avecsystemctl --user <action> daemon-name.service
.Pour permettre à l'unité utilisateur de démarrer au démarrage , root doit activer la persistance du compte, c'est-à-dire
sudo loginctl enable-linger username
. L'unité doit également êtreWantedBy=default.target
.L'autre moyen consiste à autoriser l'accès de 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
).Vous devez créer un nouveau fichier de configuration PolicyKit, par exemple,
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
qui vérifie les attributs que vous souhaitez autoriser. Par exemple :L'utilisateur nommé peut alors gérer le service nommé avec
systemctl
et sans utilisationsudo
.la source
loginctl
travaillé.sudo
est fait pour ça. Modifiez votre/etc/sudoers
fichier avecvisudo
pour ajouter unCmd_alias
pour les commandes que vous souhaitez que l'utilisateur non privilégié puisse utiliser:et ajoutez une ligne pour permettre à l'utilisateur non privilégié d'utiliser les commandes définies avec l'alias comme ceci:
Lisez plus de documentation sur le sujet pour les différents paramètres de la commande sudo.
Vous devrez peut-être installer le
sudo
package pour qu'il soitsudo
disponible sur votre système.la source
systemd
fichier d'unité est de spécifier qu'il doit être exécuté en tant quegamesrv
.Vous pouvez associer
sudo
un accès équivalent àroot
, mais il peut également être utilisé pour autoriser un utilisateur root spécifique à accéder à un ensemble spécifique et limité de commandes.Comment cela a-t-il déjà été répondu sur Server Fault, dans [ Donner accès à un utilisateur non root sans sudo à un utilisateur non root sans sudo).
L'utilisation de PolicyKit est encore rare. L'utilisation d'une "unité utilisateur" systemd devrait fonctionner correctement, mais historiquement, votre objectif a été atteint à plusieurs reprises en utilisant la possibilité de
sudo
permettre à un utilisateur d'exécuter des commandes spécifiques en tant que root.la source