Ich habe ein Skript von einer Crontab eines nicht privilegierten Benutzers ausgeführt, das einige Befehle mit aufruft sudo. Außer es tut nicht. Das Skript läuft einwandfrei, aber die sudo'ed-Befehle schlagen unbemerkt fehl.
Das Skript läuft perfekt von einer Shell aus als der betreffende Benutzer.
Sudo benötigt kein Passwort. Der betreffende Benutzer hat
(root) NOPASSWD: ALLZugriff gewährt in/etc/sudoers.Cron läuft und führt das Skript aus. Durch Hinzufügen eines einfachen
date > /tmp/logElements wird die Ausgabe zum richtigen Zeitpunkt erstellt.Es ist kein Berechtigungsproblem. Wieder wird das Skript ausgeführt, nur nicht die sudo'ed-Befehle.
Es ist kein Pfadproblem. Wenn Sie
envdas Skript ausführen, wird die richtige$PATHVariable angezeigt, die den Pfad zu sudo enthält. Es hilft nicht, es unter Verwendung eines vollständigen Pfads auszuführen. Der ausgeführte Befehl erhält den vollständigen Pfadnamen.Der Versuch, die Ausgabe des Befehls sudo einschließlich STDERR zu erfassen, zeigt nichts Nützliches. Durch Hinzufügen
sudo echo test 2>&1 > /tmp/logzum Skript wird ein leeres Protokoll erstellt.Die Sudo-Binärdatei selbst wird einwandfrei ausgeführt und erkennt, dass sie Berechtigungen hat, auch wenn sie von cron im Skript ausgeführt wird. Das Hinzufügen
sudo -l > /tmp/logzum Skript erzeugt die Ausgabe:Der Benutzer ec2-user kann auf diesem Host die folgenden Befehle ausführen:
(root) NOPASSWD: ALL
Wenn Sie den Exit-Code des Befehls mit untersuchen $?, wird ein Fehler zurückgegeben (Exit-Code:) 1, aber es scheint kein Fehler zu vorliegen. Ein so einfacher Befehl /usr/bin/sudo /bin/echo testgibt denselben Fehlercode zurück.
Was könnte sonst noch los sein?
Dies ist eine kürzlich erstellte virtuelle Maschine, auf der das neueste Amazon Linux AMI ausgeführt wird. Die crontab gehört dem Benutzer ec2-userund die sudoers-Datei ist der Standard für die Verteilung.
sudoRechten / nur / für die Befehle einzurichten, die Sie im Skript benötigen, und deren Anmeldefähigkeit vollständig zu deaktivieren.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoersund mein Gehirn begann zu laut zu schreien, um weiterzulesen.