Ho uno script eseguito da un crontab di utenti non privilegiati che invoca alcuni comandi utilizzando sudo
. Solo che non lo fa. Lo script funziona bene, ma i comandi sudo in silenzio falliscono.
Lo script viene eseguito perfettamente da una shell come l'utente in questione.
Sudo non richiede una password. L'utente in questione ha
(root) NOPASSWD: ALL
accesso concesso in/etc/sudoers
.Cron è in esecuzione ed esegue lo script. L'aggiunta di un semplice
date > /tmp/log
produce l'output al momento giusto.Non è un problema di autorizzazioni. Ancora una volta lo script viene eseguito, ma non i comandi sudo.
Non è un problema di percorso. L'esecuzione
env
dall'interno dello script in esecuzione mostra la$PATH
variabile corretta che include il percorso di sudo. Eseguirlo usando un percorso completo non aiuta. Al comando in esecuzione viene assegnato il nome completo del percorso.Cercare di catturare l'output del comando sudo incluso STDERR non mostra nulla di utile. L'aggiunta
sudo echo test 2>&1 > /tmp/log
allo script produce un registro vuoto.Lo stesso binario sudo viene eseguito correttamente e riconosce che dispone delle autorizzazioni anche quando eseguito da cron all'interno dello script. L'aggiunta
sudo -l > /tmp/log
allo script produce l'output:L'utente ec2-user può eseguire i seguenti comandi su questo host:
(root) NOPASSWD: ALL
Esaminare il codice di uscita del comando usando $?
mostra che sta restituendo un errore (codice di uscita:) 1
, ma non sembra essere stato prodotto alcun errore. Un comando semplice come /usr/bin/sudo /bin/echo test
restituisce lo stesso codice di errore.
Cos'altro potrebbe succedere?
Questa è una macchina virtuale creata di recente che esegue l'ultima AMI Amazon Linux. Crontab appartiene all'utente ec2-user
e il file sudoers è l'impostazione predefinita di distribuzione.
sudo
diritti limitati / only / per i comandi necessari nello script e disabilitare completamente la loro capacità di accesso.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
e il mio cervello ha iniziato a urlare troppo forte per continuare a leggere.