sudo - usurper l'identité d'un utilisateur

8

J'essaie d'utiliser correctement la commande sudo et le fichier sudoers pour pouvoir exécuter une commande en tant qu'autre utilisateur.

J'ai mon fichier sudoers configuré comme suit:

beans ALL = (root,apache) NOPASSWD: /opt/renovations/var/script-*.sh

root, apache et beans font partie des beans de groupe.
De plus, / opt a 755 autorisations, tandis que le répertoire / opt / renovations et ses sous-répertoires appartiennent à l'utilisateur et au groupe des beans.

La commande que j'essaie d'exécuter en tant que beans est:

sudo -n -u apache -i /opt/renovations/var/script-test.sh  

-n: est pour que je ne sois pas invité à entrer un mot de passe, car il sera exécuté par un cron
-u: est pour que je puisse me faire passer pour l'utilisateur apache
-i: est pour que je simule une connexion, et mon .profile est chargé. J'en ai besoin pour accéder aux variables d'environnement dans .profile.

Le problème est que lorsque j'exécute la commande sudo, j'obtiens le message suivant:

sudo: désolé, un mot de passe est requis pour exécuter sudo

J'ai essayé d'exécuter cela à la fois sur AIX et Ubuntu, mais le problème est sur les deux systèmes. Cela fonctionne si je lance:

sudo -n -u apache /opt/renovations/var/script-test.sh

Mais sans le -i, mon environnement ne contient pas toutes les variables d'environnement dont j'ai besoin pour être là.

Y a-t-il quelque chose que je dois mettre à jour dans mon fichier sudoers pour que cela soit possible?

krzyszto
la source
Que visudo -crenvoie (vérifie les sudoers pour les erreurs). Pouvez-vous également confirmer la version complète d'AIX ( oslevel -s) et la version de sudo installée?
EightBitTony
1
En outre, cela fonctionne-t-il si vous répertoriez le nom du script explicitement dans sudo plutôt que le caractère générique (et le nom de fichier est-il un lien symbolique?).
EightBitTony
Merci @EightBitTone. J'ai donc trouvé une solution à ce problème de configuration sudoers: lorsque le commutateur -i est utilisé, la vraie commande l'est beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh et beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.shMais maintenant, je reçois la nouvelle erreur, par exemple:ksh: /opt/renovations/var/script-test.sh: cannot execute
krzyszto
L'analyse du fichier journal / var / log / sudolog a été très utile pour déboguer le problème ci-dessus (sous AIX).
krzyszto

Réponses:

4

Donc, comme vous l'avez dit vous-même @krzysto, la solution consiste à ajouter ce qui suit au fichier sudoers

beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh 
beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.sh

La pièce suivante qui manque est de s'assurer que le groupe dispose des autorisations d'exécution sur les scripts, afin que vous puissiez les exécuter.

des haricots
la source
oui, c'est la bonne solution. L'erreur ksh se produit uniquement sur l'environnement de test créé pour étudier le problème d'emprunt d'identité; en réalité, la production fonctionne correctement
krzyszto