J'ai un script exécuté à partir de la crontab d'un utilisateur non privilégié qui appelle certaines commandes à l'aide sudo. Sauf que non. Le script s'exécute correctement mais les commandes sudo'ed échouent silencieusement.
Le script fonctionne parfaitement à partir d'un shell en tant qu'utilisateur en question.
Sudo n'a pas besoin de mot de passe. L'utilisateur en question dispose d'un
(root) NOPASSWD: ALLaccès autorisé dans/etc/sudoers.Cron exécute et exécute le script. L'ajout d'une
date > /tmp/logsortie simple produit au bon moment.Ce n'est pas un problème d'autorisations. Encore une fois, le script est exécuté, mais pas les commandes sudo'ed.
Ce n'est pas un problème de chemin. L'exécution
envdepuis l'intérieur du script en cours d'exécution affiche la$PATHvariable correcte qui inclut le chemin vers sudo. L'exécuter en utilisant un chemin complet n'aide pas. La commande en cours d'exécution reçoit le nom de chemin complet.Essayer de capturer la sortie de la commande sudo, y compris STDERR, n'affiche rien d'utile. L'ajout
sudo echo test 2>&1 > /tmp/logau script produit un journal vide.Le binaire sudo lui-même s'exécute correctement et reconnaît qu'il dispose d'autorisations même lorsqu'il est exécuté à partir de cron à l'intérieur du script. L'ajout
sudo -l > /tmp/logau script produit la sortie:L'utilisateur ec2-user peut exécuter les commandes suivantes sur cet hôte:
(root) NOPASSWD: ALL
L'examen du code de sortie de la commande à l'aide $?montre qu'elle renvoie une erreur (code de sortie:) 1, mais aucune erreur ne semble se produire. Une commande aussi simple que /usr/bin/sudo /bin/echo testrenvoie le même code d'erreur.
Que pourrait-il se passer d'autre?
Il s'agit d'une machine virtuelle récemment créée exécutant la dernière AMI Amazon Linux. La crontab appartient à l'utilisateur ec2-useret le fichier sudoers est la distribution par défaut.
sudodroits restreints / uniquement / pour les commandes dont vous avez besoin dans le script et de désactiver complètement leur capacité de connexion.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoerset mon cerveau a commencé à crier trop fort pour continuer à lire.