Ich möchte mein System jeden Tag automatisch einschalten. Also benutze ich den folgenden Code in meinem Python-Skript, sudo
frage mich aber jedes Mal nach einem Passwort:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Wie kann ich dieses Skript ausführen, ohne sudo
jedes Mal nach dem Kennwort zu fragen?
Antworten:
Richtige Vorgehensweise zum Einrichten
sudo
, sodass nur der eine bestimmte Befehl ausgeführt werdenecho date... > rtc...
darf, den Sie benötigen, dh OHNE dass Sie das Kennwort benötigen.Schritt 1. Erstellen Sie mit diesem Befehl ein Shell-Skript
gedit
(oder Ihren Lieblingseditor) und erstellen Sie das Skript, zpydatertc.sh
Schritt 2. Richten Sie sudo so ein, dass
pydatertc.sh
es ausgeführt werden kann, ohne dass ein Kennwort erforderlich istsudo visudo
am Terminal ein, um diesudoers
Datei sudo permissions ( ) zu öffnen%sudo ALL=(ALL:ALL) ALL
username
sich Ihr Benutzername befindet:Schritt 3. Ändern Sie das aufzurufende Python-Skript
pydatertc.sh
Jetzt sollte Ihr Skript ohne Kennwort ausgeführt werden UND ohne die Sicherheit Ihres Kontos, Ihrer Daten oder Ihres Systems zu gefährden!
Alternative nur für
wakealarm
(nicht für den allgemeinen Gebrauch!):Da die Datei nur in diesem speziellen Fall den
/sys/class/rtc/rtc0/wakealarm
Weckalarm für das System steuert und ansonsten harmlos ist, besteht eine andere Alternative zur Vermeidung des Kennworts darin, den Besitz dieser Datei zu übernehmenchown
(wenn Sie der einzige Benutzer sind, der den Alarm einstellt). oder mache es mit weltschreibbarchmod +666
; Entfernensudo
Sie in diesem Fall einfach die aus Ihrem Python-Anruf, und lassen Sie siesh -c "...."
intakt.quelle
sudo
- ohne ein Kennwort. Daher ist es weitaus sicherer , das Skript in ein Verzeichnis zu verschieben, das nur von root geändert werden kann, z. B. / usr / sbin oder / root . Ansonsten ist es LGTM.Wenn das Skript nur für den persönlichen Gebrauch bestimmt ist und Sie es an einem sicheren Ort aufbewahrt haben und keine Angst davor haben, dass Ihr Konto gestohlen wird, dann ist hier eine einfache Lösung:
Dabei ist LOGINPASSWD Ihr Anmeldekennwort (Beispiel: iloveponies) und COMMAND HERE Ihr Befehl, der nach sudo kommt, wie sh -c "echo da .. etc
quelle
Wenn es Ihnen nichts ausmacht, dass das Skript zu einer bestimmten Uhrzeit (oder am Tag) ausgeführt wird, legen Sie es in das Stammverzeichnis (
/root
) des Stammverzeichnisses ( ) und führen Sie das Skript auf dem System crontab (/etc/crontab
) als root aus. Dann müssen Sie Ihre Sicherheit nicht gefährden.Informationen zum Hinzufügen des Skripts zur Crontab finden Sie unter https://help.ubuntu.com/community/CronHowto .
quelle
anacron
wenn das ein Desktop / Laptop ist die 24x7 nicht laufenEine weitere nette Funktion von sudo, die in den hervorragenden Antworten oben nicht erwähnt wurde, ist die Variable 'timestamp_timeout'. Dies ist eine Sudo-Variable, die Sie erhöhen können, um bei der Eingabe interaktiver Kennwörter zu sparen.
Beispiel: In / etc / sudoers (oder einer der darin enthaltenen Dateien) können Sie die Standardeinstellung ändern:
Vollständige Beschreibung von 'man sudoers':
Dies kann natürlich nicht helfen, wenn der Befehl von cron ausgeführt wird. Aber es ist gut, sich dessen bewusst zu sein.
quelle
So testen Sie, ob es funktioniert:
So führen Sie "sudo apt-get update" aus und akzeptieren das Kennwort der zuvor erstellten Umgebungsvariablen:
Führen Sie den Befehl "Von Python aus" aus (Beispiel: Ändern des Verzeichnisbesitzes rekursiv in "Benutzername_hier"):
echo $ MY_SUDO_PASS get's password -S Schalter fängt es ab und übergibt das Passwort an sudo
quelle