2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108

Wie kann ich überprüfen, ob ich sudo-Zugang habe?

Ich bin kürzlich deswegen in Schwierigkeiten geraten.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file. This incident will be reported.

Gibt es eine Möglichkeit zu überprüfen, ob ich sudo-Zugang habe oder nicht?

Antworten (9)

123
123
123
2013-02-18 19:51:06 +0000

Führen Sie sudo -v aus. Sie wird normalerweise verwendet, um die Zeitüberschreitung Ihres sudo-Passwortes zu verlängern, kann aber auch verwendet werden, um festzustellen, ob Sie irgendwelche sudo-Privilegien haben.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

Man page excerpt:

Wenn die Option -v (validate) angegeben wird, aktualisiert sudo den Zeitstempel des Benutzers und fordert ihn gegebenenfalls zur Eingabe seines Passwortes auf. Dadurch wird das sudo-Timeout um weitere 5 Minuten verlängert (oder worauf auch immer das Timeout in sudoers eingestellt ist), aber es wird kein Befehl ausgeführt.

Wenn Ihr Benutzer nur bestimmte Befehle ausführen darf, funktioniert dieser Befehl und zeigt an, dass Sie irgendwas mit anderen Privilegien ausführen dürfen. Auch wenn die Nachricht anders aussieht, wenn Sie versuchen, einen Befehl auszuführen, den Sie in diesem Fall nicht ausführen dürfen (und keine Mail an root geschickt wird), ist es dennoch möglich, dass Sie in Schwierigkeiten geraten, wenn die Admins /var/log/secure lesen.

$ 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 verschiedenen Privilegien ausführen dürfen, können Sie sudo -l benutzen. Beachten Sie, dass Sie für diesen Befehl Ihr Passwort eingeben müssen.

43
43
43
2014-12-17 22:55:06 +0000

Dies ist sehr einfach. Führen Sie sudo -l aus. Dies listet alle Sudo-Privilegien auf, die Sie haben.

12
12
12
2016-06-14 00:49:56 +0000

Hier ist die skriptfreundliche Version:

timeout 2 sudo id && echo Access granted || echo Access denied

, da sie nicht auf der Passworteingabe hängen bleibt, wenn Sie keinen Zugriff auf sudo haben.

Sie können sie auch in einer Variable wie

timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"

setzen Hinweis: Unter MacOS müssen Sie coreutils installieren, z.B. brew install coreutils.

9
9
9
2017-12-30 18:57:38 +0000

Gerald Schades Antwort hier , kann noch verbessert werden!

Verwendung

prompt=$(sudo -nv 2>&1)
if [$? -eq 0]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi

Hier ist ein komplettes 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 1
fi

elevate_cmd which adduser
3
3
3
2017-02-28 02:27:06 +0000

Für mich haben ‘sudo -v’ und ‘sudo -l’ in einem Skript nicht funktioniert, weil sie manchmal interaktiv sind (und mich nach einem Passwort fragen, wie oben erwähnt). Auch ‘sudo -n -l’ funktionierte nicht, es gab den Exit-Code ‘1’, obwohl ich sudo-Berechtigungen habe, wegen des fehlenden Passworts. Aber die Erweiterung des Befehls auf:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

war für mich erfolgreich für das Skript. Dieser Ausdruck ergibt 0, wenn der aktuelle Benutzer ‘sudo’ aufrufen kann, und 1, wenn nicht.

Erläuterung: Der zusätzliche Parameter -n bis sudo verhindert 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 berechtigt 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”).

2
2
2
2017-10-01 22:31:29 +0000

ich habe einen niedrigen Rang, um abzustimmen und zu kommentieren, aber ich wollte die Antwort von Gerald Schade hochstimmen, da ich bisher den einzigen Weg gefunden habe, und dachte, dass no1 es sonst noch weiß - bis jetzt :D

btw meine Lösung:

[["$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'*]]

(ab Ende 2015 mwhahaaa)

1
1
1
2020-02-11 09:15:13 +0000

Dies sollte ausreichen, um Ihnen zu sagen, ob Sie Root haben oder nicht:

sudo whoami

Wenn sudo nach dem Root-Passwort fragt oder es nicht funktioniert, bedeutet dies auch, dass Sie keine Root-Privilegien haben (zumindest nicht durch sudo).

1
1
1
2016-08-30 17:58:05 +0000

“Sudo-Zugang” gibt es in verschiedenen Geschmacksrichtungen. Zwei primäre Geschmacksrichtungen: Erstens müssen Sie oder eine Gruppe, der Sie angehören, in der Datei /etc/sudoers für sudo-Zugriff eingerichtet sein.

Zweitens müssen Sie Ihr Passwort kennen, oder Sie müssen kürzlich einen sudo-Befehl ausgeführt haben. Kürzlich genug, dass die Zeitüberschreitung noch nicht abgelaufen ist. (Lustige Tatsache: Sie können die Zeitüberschreitung in der Datei Ihres sudoers sehr lang machen.)

Ich möchte oft auf die zweite Art des Zugriffs im Prolog eines Skripts testen, das einige Schritte sudoen muss. Wenn diese Prüfung fehlschlägt, kann ich den Benutzer darauf hinweisen, dass er die zweite Zugriffsart 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 aus stdin zu lesen. Das -p setzt eine leere Eingabeaufforderung. Das -K löscht den zweiten Zugriff.

Da es stderr an /dev/null sendet, prüft es auch, ob der Benutzer die erste Art von sudo-Zugriff hat.

-5
-5
-5
2013-02-18 19:41:36 +0000

Befolgen Sie diese Schritte, um die Sudoers-Datei anzuzeigen. Wenn Sie dort drin sind, haben Sie sudo. Wenn nicht, können Sie sich selbst hinzufügen.

  1. su
  2. visudo
  3. Geben Sie unten in der Datei your_username_here ALL=(ALL) ALL
  4. ein, drücken Sie ESC und tippen Sie :wq
  5. tippen Sie exit
  6. Führen Sie den Befehl, der sudo erforderte, erneut aus 7. geben Sie Ihr Passwort ein (nicht das Root-Passwort)