Ich arbeite an einem Skript, das einen Befehl als sudo ausführt und eine Textzeile NUR dann wiedergibt, wenn meine sudo-Berechtigungen abgelaufen sind. Wenn ein Befehl mit sudo ausgeführt wird, muss mein Benutzer (nicht root) das Kennwort erneut eingeben.
Wie überprüfe ich das? Beachten Sie, dass $(id -u)
meine aktuelle Benutzer-ID auch dann zurückgegeben wird, wenn sie als sudo ausgeführt wird, sodass nicht überprüft werden kann, ob sie mit 0 übereinstimmt ...
Ich brauche eine Methode, die dies leise überprüfen würde.
sudo -n true
und der tatsächlichen Verwendung verfallen können.": Die Dokumentation ist in diesem Punkt etwas vage, aber ich denke, dass das Ausführen einessudo
Befehls, auch nursudo -n true
, das Timeout zurücksetzt Uhr. In beiden Fällen-v
wird dies ausdrücklich dokumentiert undsudo -n -v
ist wahrscheinlichsudo -n true
sowieso geeigneter als für diesen Zweck.hostname sudo[8870]: username : a password is required ; TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/usr/bin/true
. Wenn Sie es beispielsweise in der Bash-Eingabeaufforderung verwenden, werden viele Fehlermeldungen ausgegeben.Lauf:
Wenn Ihre sudo-Berechtigungen abgelaufen sind, wird dies mit einem Exit-Code von 1 beendet und ausgegeben:
Wenn Sie gültige zwischengespeicherte Anmeldeinformationen haben, ist dieser Befehl erfolgreich und gibt nichts aus.
Also, sie alle zusammen zu setzen, ist hier ein scriptlet das wird still , wenn Sie gültige Cache gespeicherten Anmeldeinformationen verfügen:
Wie in anderen Antworten / Kommentaren erwähnt,
-v
erneuert die Option ("validieren") zu sudo im Hintergrund die zwischengespeicherten Anmeldeinformationen, wenn zwischengespeicherte Anmeldeinformationen vorhanden sind, oder fordert zur Authentifizierung auf, und die-n
Option ("nicht interaktiv") verhindert, dass sudo generiert Interaktive Eingabeaufforderungen, z. B. die Authentifizierungsaufforderung.quelle
sudo -nv
Funktioniert einwandfrei, verschmutzt jedoch die Systemprotokolle mit Sudo-Fehlern und Informationen zur Pam-Authentifizierung. Ich musste die sudo-Berechtigungen für meine Bash-Eingabeaufforderung überprüfen, daher wurde sie ziemlich oft ausgeführt und meine Protokolle bestanden fast nur aus diesem Rauschen.Es ist möglich, die sudo-Timestamp-Datei direkt zu analysieren - ich habe ein kleines C util dafür geschrieben:
quelle