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

Jak sprawdzić, czy mam dostęp do sudo?

Advertisement

Ostatnio miałem z tego powodu problemy.

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

Czy jest sposób, aby sprawdzić, czy mam dostęp do sudo, czy nie?

Advertisement
Advertisement

Odpowiedzi (9)

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

Run sudo -v. Zazwyczaj jest on używany do wydłużenia limitu czasu hasła sudo, ale może być użyty do określenia, czy masz jakieś uprawnienia sudo.

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

Fragment strony Man:

Jeśli podano opcję -v (sprawdź poprawność), sudo zaktualizuje znacznik czasu użytkownika, w razie potrzeby pytając o hasło użytkownika. Przedłuża to czas działania sudo o kolejne 5 minut (lub cokolwiek innego jest ustawione w sudoers), ale nie uruchamia polecenia.

Jeśli użytkownik może wykonywać tylko polecenia specific, polecenie to będzie działać, wskazując, że użytkownik może wykonywać something z różnymi uprawnieniami. Podczas gdy wiadomość wygląda inaczej, gdy próbujesz wykonać komendę, której nie możesz w tym przypadku wykonać (i żadna poczta nie jest wysyłana do roota ), wciąż możesz mieć kłopoty jeśli administratorzy przeczytają /var/log/secure.

$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

Aby dowiedzieć się co możesz uruchomić z różnymi uprawnieniami, możesz użyć sudo -l. Zauważ, że to polecenie wymaga podania hasła.

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

To bardzo proste. Run sudo -l. To będzie lista wszystkich przywilejów sudo, które masz.

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

Oto wersja przyjazna skryptowi:

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

, ponieważ nie utknie na wpisanym haśle, jeśli nie masz dostępu do sudo.

Możesz również ustawić go w zmiennej jak:

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

Uwaga: Na macOSie musisz zainstalować coreutils, np.

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

Odpowiedź Geralda Schade'a tutaj , można jeszcze poprawić!

Użyj

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

Oto pełny przykład użycia w skrypcie :

#!/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
Advertisement
3
3
2017-02-28 02:27:06 +0000
Advertisement

Dla mnie, ‘sudo -v’ i ‘sudo -l’ nie działały w skrypcie, ponieważ czasami były interaktywne (pytając mnie o hasło, jak wspomniano powyżej). Również ‘sudo -n -l’ nie działało, dawało kod wyjścia ‘1’, chociaż mam uprawnienia sudo, z powodu brakującego hasła. Ale rozszerzenie komendy na:

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

było dla mnie udane dla skryptu. Wyrażenie to daje 0 jeśli aktualny użytkownik może wywołać ‘sudo’ i 1 jeśli nie.

Wyjaśnienie: Dodatkowy parametr -n do sudo uniemożliwia interaktywność.
Wyjście $A polecenia ‘sudo -n -v 2>&1’ może być: - puste (w tym przypadku sudo może być wywołane przez aktualnego użytkownika), lub: - uwaga, że aktualny użytkownik nie jest upoważniony do korzystania z sudo, lub: - tekst zapytania o hasło (w tym przypadku użytkownik jest upoważniony). (“asswor” będzie pasował do angielskiego “password”, jak również do niemieckiego “Passwort”).

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

Mam niską rangę do zagłosowania i skomentowania, ale chciałem zagłosować za odpowiedzią Geralda Schade'a, ponieważ wcześniej stwierdziłem, że to jedyna droga i pomyślałem, że no1 jeszcze o tym nie wie - do teraz :D

btw my solution:

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

(od końca 2015 r. mwhaaa)

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

To powinno wystarczyć, aby powiedzieć, czy masz roota czy nie:

sudo whoami

Jeśli sudo pyta o hasło roota, lub nie działa, oznacza to również, że nie masz uprawnień roota (przynajmniej nie przez sudo).

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

“Sudo access” jest w smakach. Dwa podstawowe smaki: Po pierwsze ty, lub grupa, której jesteś członkiem, musisz być ustawiony na dostęp sudo w pliku /etc/sudoers.

Po drugie musisz znać swoje hasło, lub musisz wykonać polecenie sudo ostatnio. Ostatnio na tyle, że nie upłynął jeszcze limit czasu. (Fun fact: you can make the timeout very long in your sudoer’s file.)

I often want to test for the second kind of access in the prolog of a script that will need to sudo some steps. Kiedy to sprawdzenie nie powiedzie się, mogę poinformować użytkownika, że musi włączyć drugi rodzaj dostępu przed uruchomieniem skryptu.

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

The -S mówi sudo, aby przeczytał hasło z stdin. Skrypt -p ustawia pusty znak zachęty. -K czyści drugi rodzaj dostępu.

Ponieważ wysyła stderr do /dev/null, sprawdza również czy użytkownik ma pierwszy rodzaj dostępu do sudo.

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

Wykonaj te kroki, aby wyświetlić plik sudoers. Jeśli tam jesteś, to masz sudo. Jeśli nie, możesz dodać siebie.

  1. su
  2. visudo
  3. W dolnej części pliku wpisz your_username_here ALL=(ALL) ALL
  4. Naciśnij ESC i wpisz :wq
  5. Wpisz exit
  6. Uruchom ponownie komendę, która była potrzebna sudo
  7. Wpisz swoje hasło (nie hasło roota)
Advertisement

Pytania pokrewne

6
10
5
37
2
Advertisement