Tengo un script ejecutado desde un crontab de usuarios sin privilegios que invoca algunos comandos usando sudo. Excepto que no. El script funciona bien pero los comandos sudo'ed fallan en silencio.
El script se ejecuta perfectamente desde un shell como el usuario en cuestión.
Sudo no requiere una contraseña. El usuario en cuestión tiene
(root) NOPASSWD: ALLacceso otorgado en/etc/sudoers.Cron está ejecutando y ejecutando el script. Agregar un simple
date > /tmp/logproduce resultados en el momento adecuado.No es un problema de permisos. Una vez más, el script se ejecuta, pero no los comandos sudo'ed.
No es un problema de ruta. La ejecución
envdesde el script que se ejecuta muestra la$PATHvariable correcta que incluye la ruta a sudo. Ejecutarlo usando una ruta completa no ayuda. El comando que se ejecuta recibe el nombre completo de la ruta.Intentar capturar la salida del comando sudo, incluido STDERR, no muestra nada útil. Agregar
sudo echo test 2>&1 > /tmp/logal script produce un registro en blanco.El binario sudo se ejecuta bien y reconoce que tiene permisos incluso cuando se ejecuta desde cron dentro del script. Agregar
sudo -l > /tmp/logal script produce el resultado:El usuario ec2-user puede ejecutar los siguientes comandos en este host:
(root) NOPASSWD: ALL
El examen del código de salida del comando usando $?muestra que está devolviendo un error (código de salida:) 1, pero no parece producirse ningún error. Un comando tan simple como /usr/bin/sudo /bin/echo testdevuelve el mismo código de error.
¿Qué más podría estar pasando?
Esta es una máquina virtual creada recientemente que ejecuta la última AMI de Amazon Linux. El crontab pertenece al usuario ec2-usery el archivo sudoers es el valor predeterminado de distribución.
sudoderechos restringidos / solo / para los comandos que necesita en el script y deshabilitar por completo su capacidad de inicio de sesión.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoersy mi cerebro comenzó a gritar demasiado fuerte para seguir leyendo.