So führen Sie einen Cron-Job mit dem Befehl sudo aus

118

Ist es möglich, einen Cron- Job auszuführen, der den Befehl sudo benötigt ?

Mögen:

 sudo rm somefile
sayem siam
quelle
Willkommen Sayem Siam, werfen Sie einen Blick auf die Antworten auf diese Frage. Askubuntu.com/questions/2368/how-do-i-setup-cron-job . wie ich glaube, deine frage wurde schon
mal
1
Ich versuche, sudo auszuführen, das Passwort benötigt, aber wie kann ich Passwort von Cron-Datei geben
sayem siam
3
@sayemsiam du brauchst sudo nicht zu setzen, bearbeite einfach die root crontab.
Braiam
Siehe diese Antwort .
sampablokuper

Antworten:

240

Ich werde nicht darauf eingehen, wie sehr dies eine schlechte Idee ist. Einfach ausgedrückt, für die Ausführung sudoin crontab muss Ihr Kennwort irgendwo im Klartext gespeichert werden.

Es ist eine schlechte Idee.


Das Folgende ist die bevorzugte Methode zum Ausführen von Verwaltungsaufgaben über cron. Da Sie nicht wirklich sudoin die crontab schreiben müssen , wenn Sie die crontab von root ändern.

Verwende root's crontab

Führen Sie den folgenden Befehl aus:

sudo crontab -e

Dies öffnet die rootCrontab. sudoIn diesem Kontext ist es nicht erforderlich, Ihren Befehl auszuführen, da er wie gewohnt aufgerufen rootwird.

Daher würden Sie einfach Folgendes an die crontab von root anhängen.

@hourly rm somefile

Wenn Sie jetzt absolut unsicher sein und Risiken mit Ihrem Passwort eingehen möchten, wird der folgende Befehl von Ihrer eigenen crontab ausgeführt und Ihr Passwort automatisch eingegeben, wenn Sie dazu aufgefordert werden sudo.

Auch dies wird nicht empfohlen .


Schreiben Sie in Ihrer eigenen Crontab Ihren Befehl wie folgt:

@hourly echo "password" | sudo -S rm somefile

Der offensichtliche Nachteil hierbei ist, dass Ihr Passwort im Klartext lesbar ist, sollte jemals jemand auf Ihre crontab zugreifen.

Das solltest du nicht tun.

SirCharlo
quelle
1
Froh, dass es funktioniert! Seien Sie nur vorsichtig mit Sicherheitslücken, die Sie hinterlassen. Sie könnten später wiederkommen, um Sie zu verfolgen.
SirCharlo
1
@SirCharlo Warum sollte die rootBenutzer-Crontab anstelle der systemweiten Crontab verwendet werden /etc/crontab?
Eliah Kagan
1
@ Elijah warum nicht?
SirCharlo
2
Diese Antwort verfehlt die Markierung, da sie die in Ihrer sudoersDatei verfügbaren Feinheiten , wie Sudo-Gruppen ohne Kennwortanforderung, überschreibt .
Brent
sehr sehr nützlicher Punkt, danke für die große Hilfe.
Nasser Mansouri
33

Wenn Sie das Skript aus einem der cron-Verzeichnisse ( /etc/cron.*) einfügen, müssen Sie sudo nicht verwenden, da dieses als root ausgeführt wird.

Wenn Sie crontab verwenden, sollten Sie die crontab von root verwenden. Dies wird als root ausgeführt und benötigt auch kein sudo.

sudo crontab -e
tgm4883
quelle
1
Ich würde den Befehl auch in /etc/cron.hourly/something platzieren. Dafür sind diese Verzeichnisse da.
John S Gruber
3
Nein, Sie könnten es in /etc/cron.SOMETHING/SCRIPT einfügen, aber ich würde nicht beides tun. Beide würden ungefähr die gleiche Funktion haben, obwohl Sie mit crontab ein bisschen mehr Einfluss darauf haben würden, wie oft / wann etwas läuft.
tgm4883
1
Ich hätte klarstellen sollen, dass ich das als Alternative meinte. Vielen Dank.
John S Gruber
3

Führen Sie den folgenden Befehl im Terminal aus

sudo visudo

Die folgende Zeile wurde am Ende der Datei hinzugefügt:

vidyadhar  ALL= NOPASSWD: /bin/rm

Im obigen Beispiel ist vidyadhar der Benutzername und es wird nicht nach dem Passwort gefragt, wenn Sie den Befehl rm über vidyadhar ausführen.

Vidyadhar
quelle
17
Hmm .. Dann würde jeder böswillige Befehl, wie sudo rm -rf 'slash'( diesen Befehl nicht ausführen ), der von diesem Benutzer ausgeführt wird, kein Passwort erfordern .. Ich weiß nicht, es fühlt sich unsicher an, nein?
SirCharlo
Ja, ich weiß es. Ihr Ansatz ist gut. Ich verwende jedoch den obigen Ansatz, um anderen Benutzern Rechte zum Beenden / Starten bestimmter Dienste zu erteilen.
Vidyadhar
24
Das ist eine extrem schlechte Idee. Bitte tu das nicht.
Bkanuka
2
Wäre vielleicht vidyadhar ALL= NOPASSWD: /bin/rm somefilesicherer.
Wernfried Domscheit
Das ist eine schreckliche Idee. Sie haben rm pauschale Sudo-Berechtigungen erteilt . Vergeben Sie stattdessen sudo-Berechtigungen für ein Skript Ihres Befehls, einschließlich rm oder anderer in diesem Skript, machen Sie es ausführbar und geben Sie dann sudo-Berechtigungen für dieses Skript. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, was viel sicherer wäre.
RJ