Setzen Sie HISTIGNORE auf “sudo -S”
$ export HISTIGNORE='*sudo -S*'
Dann geben Sie Ihr Passwort sicher an sudo weiter:
$ echo "your_password" | sudo -S -k <command>
“HISTIGNORE” bedeutet, diesen Befehl nicht in der Historie zu speichern. Das ist die Historie im Speicher oder in der Datei “~/.bash_history”.
Zum Beispiel wird im Folgenden Ihr Passwort sicher an den sudo-Befehl weitergeleitet, ohne eine Historie Ihres Passworts aufzubewahren.
“-S” bedeutet, stdin für das Passwort zu verwenden,
“-k” bedeutet, zwischengespeicherte Anmeldeinformationen zu ignorieren, um sudo zu zwingen, immer nachzufragen. Dies ist für konsistentes Verhalten.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
Der Nachteil der obigen Methode ist, dass die Befehle, die Sie später in der Historie ausgeführt haben, nicht vorhanden sind, wenn Sie sie sehen möchten. Eine andere Methode besteht darin, den Cache für die sudo-Authentifizierungs-Credentials zu aktualisieren (Standard ist mit 5 Minuten Timeout aktiviert) und dann das sudo separat auszuführen. Der Nachteil dabei ist jedoch, dass Sie sich des 5-Minuten-Caches bewusst sein müssen.
Zum Beispiel:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Hinweis Ich habe vor jedem Befehl ein sudo ausgeführt, um sicherzustellen, dass der sudo-Cache aktualisiert wird, da der Standard 5 Minuten beträgt. Ja, whoami sollte keine 5 Minuten dauern, aber ich denke, ich könnte es aus Konsistenzgründen genauso gut vor jedem Befehl laufen lassen. Sie könnten auch “export HISTIGNORE=‘sudo -S’” in Ihre ~/.bashrc-Datei schreiben und sie dann mit “. ~/.bashrc” laden oder sich abmelden und dann anmelden. Ich denke jedoch daran, dies für Skripting-Zwecke zu verwenden, daher werde ich es aus Gründen der besten Sicherheitspraktiken an den Anfang all meiner Skripte stellen. Stattdessen könnte es auch eine gute Idee sein, “echo ”“ | sudo -S -v” auf eine Variable zu setzen und dann einfach die Variable vor jedem Befehl auszuführen, der Root-Rechte benötigt, siehe Janars Kommentar. Der Kommentar von “John T” sollte auch den Parameter “-k” enthalten, denn wenn Sie “sudo -S” ohne “-k” ausführen und der sudo-Authentifizierungscache bereits Ihre Anmeldedaten enthält (und immer noch gültig ist, der Standard-Sudo-Authentifizierungscache beträgt 5 Minuten), dann wird die bash stattdessen Ihr Passwort als Befehl ausführen, was schlecht ist.