Rennen sudo -v. Es wird normalerweise verwendet, um das Zeitlimit für Ihr sudo-Kennwort zu verlängern, kann jedoch verwendet werden, um festzustellen, ob Sie über sudoBerechtigungen verfügen .
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Manpage-Auszug:
Wenn die Option -v (validieren) angegeben wird, aktualisiert sudo den Zeitstempel des Benutzers und fragt bei Bedarf nach dem Kennwort des Benutzers. Dadurch wird das Sudo-Timeout um weitere 5 Minuten verlängert (oder wie auch immer das Timeout in Sudoern eingestellt ist), es wird jedoch kein Befehl ausgeführt.
Wenn Ihr Benutzer nur bestimmte Befehle ausführen darf, funktioniert dieser Befehl und zeigt an, dass Sie etwas mit unterschiedlichen Berechtigungen ausführen dürfen . Während die Nachricht anders aussieht, wenn Sie versuchen, einen Befehl auszuführen, den Sie in diesem Fall nicht ausführen dürfen (und keine E-Mail an root gesendet wird ), kann es dennoch zu Problemen kommen, wenn die Administratoren dies lesen /var/log/secure.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Um herauszufinden, was Sie mit unterschiedlichen Berechtigungen ausführen dürfen, können Sie Folgendes verwenden sudo -l. Beachten Sie, dass Sie für diesen Befehl Ihr Kennwort eingeben müssen.
Vielen Dank. sudo -v funktioniert bei mir. Die Manpage sagt, dass ich sudo -l auch ausführen kann, aber das fragt nach einem Passwort. Warum ist das so?
Bruce
2
@ Bruce Ich vermute hier, aber ansonsten könnte jemand (oder ein von Ihnen ausgeführtes Programm) herausfinden, welche Programme (möglicherweise ohne Eingabe eines Kennworts) von Ihrem aktuellen Benutzer ausgeführt werden können, und versuchen, diese Informationen böswillig zu verwenden.
Daniel Beck
Was bedeutet es wohl, wenn ich das zurück bekomme patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? Ich habe mein Passwort eingegeben und habe nichts über Unbefugte erfahren. Ich weiß, dass ich sudoandere Befehle erfolgreich ausgeführt habe, aber diese unable to resolve hostMeldung hat mich beunruhigt, dass etwas anderes auf dem Host nicht funktioniert.
Patrick M
@PatrickM Es sieht nach einem Problem mit der sudoersDatei aus. Dort können Sie angeben, auf welchem Host ein Benutzer einen bestimmten Befehl ausführen darf (dies ist nützlich, wenn dieselbe sudoersDatei auf mehreren Computern verwendet wird). Möglicherweise konnte der in dieser Datei angegebene Hostname nicht aufgelöst werden. Versuchen Sie es hostzum Beispiel mit dem Befehl.
Ale
Funktioniert bei RHEL 6 nicht, sudo -vgab "xx ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet."
79E09796
43
Das ist sehr einfach. Rennen sudo -l. Dies listet alle Sudo-Berechtigungen auf, die Sie haben.
Vielleicht, weil es das wiederholt, was Daniel Beck vor fast zwei Jahren gesagt hat.
G-Man
1
Oder erklärt, was passiert, es ist bestenfalls ein Kommentar
Ramhound
2
@ Jonathan: Wenn du jetzt in Ubuntu schreiben würdest, fragst du sudo -lnach einem Passwort, ob du sudo kannst oder nicht. sudo -vfragt nur wenn du kannst und "$(whoami)" != "root"wird unter Linux niemals etwas fragen.
Mittwoch,
@bksunday Du bist richtig. Ich habe jetzt auf einem sauberen Debian Jessy getestet und Ihre Ergebnisse bestätigt. Mein vorheriger (jetzt gelöschter) Kommentar war wahrscheinlich ein Ergebnis von Tests auf einem Computer, auf dem ich einige sudoPrivilegien hatte.
Jonathan Ben-Avraham
@ G-Man, aber diese einfache Antwort half mir mehr als wahrscheinlich präziser Daniels Antwort, wo dieser Befehl ist das Ende leider ...
Hier ist ein vollständiges Beispiel für die Verwendung in einem Skript :
#!/usr/bin/env bash
is_root (){return $(id -u)}
has_sudo(){local prompt
prompt=$(sudo -nv 2>&1)if[ $?-eq 0];then
echo "has_sudo__pass_set"elif echo $prompt | grep -q '^sudo:';then
echo "has_sudo__needs_pass"else
echo "no_sudo"fi}
elevate_cmd (){local cmd=$@
HAS_SUDO=$(has_sudo)case"$HAS_SUDO"in
has_sudo__pass_set)
sudo $cmd
;;
has_sudo__needs_pass)
echo "Please supply sudo password for the following command: sudo $cmd"
sudo $cmd
;;*)
echo "Please supply root password for the following command: su -c \"$cmd\""
su -c "$cmd";;esac}if is_root;then
echo "Error: need to call this script as a normal user, not as root!"
exit 1fi
elevate_cmd which adduser
Bei mir funktionierten ' sudo -v' und ' sudo -l' in einem Skript nicht, weil sie manchmal interaktiv waren (ich wurde nach einem Passwort gefragt, wie oben erwähnt). ' sudo -n -l' funktionierte auch nicht, es gab den Exit-Code '1', obwohl ich aufgrund des fehlenden Passworts sudo-Berechtigungen habe. Erweitern Sie den Befehl jedoch auf:
war für mich für das Drehbuch erfolgreich. Dieser Ausdruck gibt an, 0ob der aktuelle Benutzer 'sudo' aufrufen kann und 1wenn nicht.
Erläuterung:
Der zusätzliche Parameter -nzum sudoVerhindern von Interaktivität.
Die Ausgabe $Ades Befehls ' sudo -n -v 2>&1' kann sein:
- leer (in diesem Fall kann sudo vom aktuellen Benutzer aufgerufen werden) oder:
- ein Hinweis, dass der aktuelle Benutzer nicht für sudo autorisiert ist, oder:
- ein Fragetext für das Passwort (in diesem Fall ist der Benutzer berechtigt).
("asswor" passt sowohl für ein englisches "Passwort" als auch für ein deutsches "Passwort").
Ich habe einen niedrigen Rang, um abzustimmen und zu kommentieren, aber ich wollte die Antwort von Gerald Schade positiv bewerten, da ich den einzigen Weg zuvor gefunden habe und dachte, dass niemand anders es weiß - bis jetzt: D
"Sudo access" gibt es in verschiedenen Geschmacksrichtungen. Zwei Hauptvarianten: Zuerst müssen Sie oder eine Gruppe, der Sie angehören, für den sudo-Zugriff in der Datei / etc / sudoers eingerichtet werden.
Zweitens müssen Sie Ihr Passwort kennen oder kürzlich einen sudo-Befehl ausgeführt haben. Kürzlich genug, dass das Timeout nicht abgelaufen ist. (Unterhaltsame Tatsache: Sie können die Auszeit in der Datei Ihres sudoer sehr lang machen.)
Ich möchte oft im Prolog eines Skripts nach der zweiten Art von Zugriff suchen, für die einige Schritte ausgeführt werden müssen. Wenn diese Prüfung fehlschlägt, kann ich dem Benutzer raten, dass er die zweite Art des Zugriffs aktivieren muss, bevor das Skript ausgeführt wird.
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled
Das -S weist sudo an, das Passwort von stdin zu lesen. Das -p setzt eine leere Eingabeaufforderung. Das -K löscht den zweiten Zugriffszeitpunkt.
Da stderr an / dev / null gesendet wird, wird auch geprüft, ob der Benutzer über die erste Art von Sudo-Zugriff verfügt.
Das OP "geriet in Schwierigkeiten", weil es ausgeführt wurde sudo, daher ist er wahrscheinlich weder der Systemadministrator noch einer der Elite-Systemadministratoren. Wahrscheinlich ist er nur ein Benutzer, der dachte, er hätte begrenzte Befugnisse erhalten. Was lässt Sie vermuten, dass er gehen kann su?
Antworten:
Rennen
sudo -v
. Es wird normalerweise verwendet, um das Zeitlimit für Ihr sudo-Kennwort zu verlängern, kann jedoch verwendet werden, um festzustellen, ob Sie übersudo
Berechtigungen verfügen .Manpage-Auszug:
Wenn Ihr Benutzer nur bestimmte Befehle ausführen darf, funktioniert dieser Befehl und zeigt an, dass Sie etwas mit unterschiedlichen Berechtigungen ausführen dürfen . Während die Nachricht anders aussieht, wenn Sie versuchen, einen Befehl auszuführen, den Sie in diesem Fall nicht ausführen dürfen (und keine E-Mail an root gesendet wird ), kann es dennoch zu Problemen kommen, wenn die Administratoren dies lesen
/var/log/secure
.Um herauszufinden, was Sie mit unterschiedlichen Berechtigungen ausführen dürfen, können Sie Folgendes verwenden
sudo -l
. Beachten Sie, dass Sie für diesen Befehl Ihr Kennwort eingeben müssen.quelle
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? Ich habe mein Passwort eingegeben und habe nichts über Unbefugte erfahren. Ich weiß, dass ichsudo
andere Befehle erfolgreich ausgeführt habe, aber dieseunable to resolve host
Meldung hat mich beunruhigt, dass etwas anderes auf dem Host nicht funktioniert.sudoers
Datei aus. Dort können Sie angeben, auf welchem Host ein Benutzer einen bestimmten Befehl ausführen darf (dies ist nützlich, wenn dieselbesudoers
Datei auf mehreren Computern verwendet wird). Möglicherweise konnte der in dieser Datei angegebene Hostname nicht aufgelöst werden. Versuchen Sie eshost
zum Beispiel mit dem Befehl.sudo -v
gab "xx ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet."Das ist sehr einfach. Rennen
sudo -l
. Dies listet alle Sudo-Berechtigungen auf, die Sie haben.quelle
sudo -l
nach einem Passwort, ob du sudo kannst oder nicht.sudo -v
fragt nur wenn du kannst und"$(whoami)" != "root"
wird unter Linux niemals etwas fragen.sudo
Privilegien hatte.Hier ist die skriptfreundliche Version:
da es bei der Passworteingabe nicht hängen bleibt, wenn Sie keinen
sudo
Zugriff haben.Sie können es auch in einer Variablen wie der folgenden festlegen:
Hinweis: Unter macOS müssen Sie installieren
coreutils
, zbrew install coreutils
.quelle
timeout
nicht standardmäßig verfügbar ist, z. B. unter OS X?coreutils
zB installierenbrew install coreutils
.Gerald Schades Antwort hier kann noch verbessert werden!
Verwenden
Hier ist ein vollständiges Beispiel für die Verwendung in einem Skript :
quelle
Bei mir funktionierten '
sudo -v
' und 'sudo -l
' in einem Skript nicht, weil sie manchmal interaktiv waren (ich wurde nach einem Passwort gefragt, wie oben erwähnt). 'sudo -n -l
' funktionierte auch nicht, es gab den Exit-Code '1', obwohl ich aufgrund des fehlenden Passworts sudo-Berechtigungen habe. Erweitern Sie den Befehl jedoch auf:war für mich für das Drehbuch erfolgreich. Dieser Ausdruck gibt an,
0
ob der aktuelle Benutzer 'sudo' aufrufen kann und1
wenn nicht.Erläuterung:
Der zusätzliche Parameter
-n
zumsudo
Verhindern von Interaktivität.Die Ausgabe
$A
des Befehls 'sudo -n -v 2>&1
' kann sein:- leer (in diesem Fall kann sudo vom aktuellen Benutzer aufgerufen werden) oder:
- ein Hinweis, dass der aktuelle Benutzer nicht für sudo autorisiert ist, oder:
- ein Fragetext für das Passwort (in diesem Fall ist der Benutzer berechtigt).
("asswor" passt sowohl für ein englisches "Passwort" als auch für ein deutsches "Passwort").
quelle
Ich habe einen niedrigen Rang, um abzustimmen und zu kommentieren, aber ich wollte die Antwort von Gerald Schade positiv bewerten, da ich den einzigen Weg zuvor gefunden habe und dachte, dass niemand anders es weiß - bis jetzt: D
Übrigens meine Lösung:
(ab Ende 2015 mwhahaaa)
quelle
"Sudo access" gibt es in verschiedenen Geschmacksrichtungen. Zwei Hauptvarianten: Zuerst müssen Sie oder eine Gruppe, der Sie angehören, für den sudo-Zugriff in der Datei / etc / sudoers eingerichtet werden.
Zweitens müssen Sie Ihr Passwort kennen oder kürzlich einen sudo-Befehl ausgeführt haben. Kürzlich genug, dass das Timeout nicht abgelaufen ist. (Unterhaltsame Tatsache: Sie können die Auszeit in der Datei Ihres sudoer sehr lang machen.)
Ich möchte oft im Prolog eines Skripts nach der zweiten Art von Zugriff suchen, für die einige Schritte ausgeführt werden müssen. Wenn diese Prüfung fehlschlägt, kann ich dem Benutzer raten, dass er die zweite Art des Zugriffs aktivieren muss, bevor das Skript ausgeführt wird.
Das -S weist sudo an, das Passwort von stdin zu lesen. Das -p setzt eine leere Eingabeaufforderung. Das -K löscht den zweiten Zugriffszeitpunkt.
Da stderr an / dev / null gesendet wird, wird auch geprüft, ob der Benutzer über die erste Art von Sudo-Zugriff verfügt.
quelle
Befolgen Sie diese Schritte, um die sudoers-Datei anzuzeigen. Wenn du da drin bist, hast du sudo. Wenn nicht, können Sie sich selbst hinzufügen.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
quelle
sudo
, daher ist er wahrscheinlich weder der Systemadministrator noch einer der Elite-Systemadministratoren. Wahrscheinlich ist er nur ein Benutzer, der dachte, er hätte begrenzte Befugnisse erhalten. Was lässt Sie vermuten, dass er gehen kannsu
?