Testen Sie, ob ein Benutzer über Sudo-Berechtigungen verfügt, ohne dass eine Benutzereingabe erforderlich ist

12

Ich habe ein lokales Shell-Skript, das eine Reihe von Tests auf einem Remote-Host ausführt, bevor die Nutzdaten bereitgestellt werden. Einer dieser Tests ist, ob der Benutzer über Sudo-Berechtigungen verfügt. Er muss lediglich überprüft werden, wobei sudo -vder Benutzer sein Kennwort eingeben muss. Außerdem scheint der Remote-Host ein sofortiges Sudo-Timeout zu haben, sodass die Kennworteingabe bei jeder neuen Verbindung erforderlich ist, und dies ist etwas, zu dessen Änderung ich (als Richtlinie) keine Berechtigung habe.

Ich kann natürlich testen, ob der Benutzer zu bestimmten Gruppen gehört, aber dies wäre dann nicht unabhängig von der Konfiguration des Remote-Hosts. Daher habe ich gehofft, dass es eine Methode gibt, mit der überprüft werden kann, ob auch die Gruppen des Benutzers übernommen werden müssen als nicht Benutzereingabe benötigen?

Vielen Dank!

UPDATE: Um meine Kommentare wiederzugeben, möchte ich nur testen, ob ein Benutzer möglicherweise sudo kann, ohne dass eine Benutzerinteraktion für diesen Test erforderlich ist.

DanH
quelle
Müssen Sie überprüfen, ob der Benutzer die Möglichkeit hat, sudo zu verwenden, oder ob er das Shell-Skript über sudo ausführt?
Niko SP
Nur ob er die Möglichkeit hat. Das lokale Skript erfordert die spätere Eingabe des sudo-Passworts. Daher möchte ich frühzeitig überprüfen, ob der Benutzer auf dem Remote-Host sogar ein sudoer ist.
DanH
Eine kurze Überprüfung meiner Ubuntu-Box ergab, dass sudo -l die Befehle zurückgibt, die der Benutzer möglicherweise ausführt. Wenn (ALL) ALL ein Teil davon ist, kann der Benutzer sudo für jeden Befehl verwenden. Vielleicht ist das der richtige Winkel?
Niko SP
1
sudo -lfragt mich nach meinem Passwort.
ThatGraemeGuy
1
Sudo-Caches basieren auf tty. Wenn Sie also in einer neuen Sitzung die gleiche Anzahl erhalten, werden Sie möglicherweise nicht dazu aufgefordert. Versuchen Sie es sudo -kzuerst.
Mark Wagner

Antworten:

12

Ich fürchte, Sie können nur testen, ob der Benutzer über Sudo-Berechtigungen ohne Kennwort verfügt.

Ausführen

sudo -n true

Wenn $? ist 0, hat der Benutzer sudo-Zugriff ohne Passwort, wenn $? 1 ist, benötigt der Benutzer ein Passwort.

Wenn Sie eine Überprüfung für ein bestimmtes Programm benötigen, ändern Sie dies truemit Ihrem Programm, so dass das Programm nichts tut, wie zchmod --help

Erickzetta
quelle
1
Beachten Sie, dass dies nicht vorläufigen Ermittlungs hilft , wenn Befehl Xist der sudoLage , ein Passwort ohne Eingabe und ohne sie versehentlich zu laufen
try-catch-finally
3

Wenn Sie einen Benutzer mit sudo-Zugriff haben, z. B. "root", können Sie damit andere Anmeldungen überprüfen. Als der Benutzer mit Zugriff ausführen:

sudo -n -l -U foo 2> & 1 | egrep -c -i "sudo darf nicht ausgeführt werden | unbekannter Benutzer"

Wenn es Null zurückgibt, hat "foo" Zugriff. Andernfalls hat es keinen sudo-Zugriff.

Todd Moyer
quelle
3
Einfach sudo -n -l cmdund Sie werden informiert, ob der aktuelle Benutzer sudo-Zugriff auf cmd hat. Wenn Sie das Ergebnis testen möchten.
Philippe A.
1

sudo -l

Das sollte dir genug geben, um zu entscheiden, ob du die Privilegien hast, die du willst / brauchst.

dmourati
quelle
1
Dies erfordert immer noch ein Passwort in meinem System (Ubuntu 16.04).
Mario Vilas
1

Ich weiß, dass dies eine super alte Frage ist, aber ich habe Glück mit der -n(nicht interaktiven) Flagge und -v/ oder gefunden -l. Sie müssen jedoch die Ausgabe überprüfen:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Etwas Ausgabeumleitung und Grepping werden Sie wahrscheinlich dahin bringen:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Matt Moretti
quelle