44 votes

L'authentification est nécessaire pour gérer les services ou les unités du système.

J'ai un problème étrange lorsque j'essaie d'arrêter/démarrer un démon en tant qu'utilisateur normal, il demande à s'authentifier avec les informations d'identification d'un autre utilisateur normal - par exemple :

[bob@server ~]$ systemctl stop some-daemon.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: alice
Password: 

Pourquoi est-ce qu'il demande alice pour s'authentifier lorsque bob est connecté, et comment puis-je résoudre ce problème ?

0 votes

À quoi ressemble le fichier de configuration du service ?

0 votes

@JennyD : Où se trouve le fichier de la configuration ?

0 votes

Qu'est-ce que tu veux ? Vous voulez créer votre propre service de copie pour chaque utilisateur ? Par exemple, démarrer un démon VNC pour chaque utilisateur. alice et son propre VNC-daemon pour bob ?

19voto

Khaled Points 35208

Lorsque vous gérez les services système, vous devez le faire en tant que root et non en tant qu'utilisateur normal. Ceci est indiqué par $ à la fin de l'invite Shell.

Vous pouvez soit utiliser sudo command ou passer en root (root Shell habituellement indiqué par # char).

2 votes

Même si je le fais en tant que root, il demande l'authentification des utilisateurs normaux. En fait, l'utilisateur root a fait su - alice alors systemctl pour lancer leur démon vnc, mais maintenant il demande leur authentification pour chaque systemctl peu importe ce que c'est...

0 votes

J'ai obtenu le message d'erreur lorsque j'ai tapé '/etc/init.d/munge start'. L'ajout de sudo a réglé le problème. Merci !

19voto

Daichi Points 41

Votre système utilise le polkit Authorization Manager et le message provient du fichier /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy . polkit peut être configuré dans /etc/polkit-1 y /usr/share/polkit-1 et plus précisément dans les répertoires rules.d y actions les sous-répertoires. Voir le Page de manuel de Polkit pour plus d'informations.

En bref, l'appel effectué reçoit une réponse pour s'authentifier en tant qu'administrateur ( auth_admin, auth_admin_keep in page d'accueil ).

Dans CentOS 7, le /etc/polkit-1/rules.d/50-default.rules spécifie un fichier addAdminRule qui renvoie les utilisateurs du groupe de la roue pour s'authentifier en tant que tels. Tous les utilisateurs du groupe de la roue seraient présentés comme des utilisateurs à sélectionner lorsque l'authentification est requise. Si Alice était le seul utilisateur du groupe de roues, elle serait automatiquement présentée en fonction de la règle.

En supposant qu'Alice n'était pas dans le groupe de roues, cela suggère qu'il y aurait d'autres définitions de addAdminRule dans les chemins du fichier de règles qui permettent à Alice d'être présentée comme un administrateur pour s'authentifier comme lorsqu'une requête renvoie une réponse AUTH_ADMIN/AUTH_ADMIN_KEEP.

1 votes

Dans la documentation : "polkit permet aux utilisateurs d'obtenir une autorisation temporaire en authentifiant soit un utilisateur administratif, soit le propriétaire de la session à laquelle le client appartient." Peut-être que cela peut donner un indice sur la raison pour laquelle il demande le mot de passe d'Alice.

0 votes

Je pense que vous êtes sur la bonne voie, bien que je ne sache toujours pas comment supprimer la règle ou quoi que ce soit de l'autre utilisateur qui demande sans cesse à s'authentifier. J'ai regardé dans ces deux répertoires et même fait un grep pour "alice" et rien n'a été retourné.

0 votes

Vous avez dit plus tôt que vous avez fait un su - alice avant de lancer le démon vnc. Je suppose que cela fait d'Alice le "propriétaire de la session à laquelle le client appartient".

7voto

Greg Dubicki Points 1111

Como déjà répondu ce message provient du Gestionnaire d'autorisation Polkit qui est, en termes simples, un moyen pour systemd de contrôler qui peut faire quoi, y compris la gestion des services systemd.

Pour OP, la bonne solution est de configurer le service pour être une au niveau de l'utilisateur service systemd.

Mais en cas de au niveau du système services voici ce que vous devez faire :

Ajoutez une règle pour Polkit qui permettrait à votre utilisateur de gérer le service, comme ceci :

cat > /etc/polkit-1/rules.d/10-some-daemon.rules << POLKIT
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "some-daemon.service" &&
        subject.user == "bob") {
        return polkit.Result.YES;
    }
});
POLKIT

... buuuuuut avec systemd v219 dans Centos 7, action n'a pas accès à la unit ! Cela a été ajouté dans la v226... Il faudrait donc permettre à l'utilisateur de gérer toutes les unités, ce qui n'est probablement pas ce que vous devriez faire...

Je vous suggère donc de passer au bon vieux sudo pour permettre à vos utilisateurs de gérer les services, par exemple :

cat > /etc/sudoers.d/some-daemon << SUDO
bob ALL= NOPASSWD: /bin/systemctl restart some-daemon.service
bob ALL= NOPASSWD: /bin/systemctl stop some-daemon.service
bob ALL= NOPASSWD: /bin/systemctl start some-daemon.service
SUDO

Sources principales :

3voto

natermer Points 21

Vérifiez /etc/groups et la règle sudoers. Cela peut se produire si une personne s'ajoute au groupe wheel et devient root de cette façon.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X