Sprawdź, czy użytkownik ma uprawnienia sudo bez konieczności wprowadzania danych przez użytkownika

12

Mam lokalny skrypt powłoki, który wykonuje szereg testów na zdalnym hoście, zanim dostarczy ładunek; jednym z tych testów jest sprawdzenie, czy użytkownik ma uprawnienia sudo, sprawdzane po prostu za pomocą, sudo -vjednak wymaga to podania hasła. Ponadto zdalny host wydaje się mieć natychmiastowe przekroczenie limitu czasu sudo, więc podanie hasła jest wymagane przy każdym nowym połączeniu i jest to coś, czego nie mam uprawnień do zmiany (jako zasady).

Mogę oczywiście przetestować, czy użytkownik należy do niektórych grup, ale wtedy nie byłoby to niezależne od konfiguracji zdalnego hosta, więc miałem nadzieję, że istnieje metoda, która może sprawdzić, że nie trzeba zakładać grup użytkowników, a także jako że nie wymaga wkładu użytkownika?

Dzięki!

AKTUALIZACJA: Aby powtórzyć moje komentarze, chcę tylko przetestować, czy użytkownik może sudo, bez konieczności interakcji użytkownika w tym teście.

DanH
źródło
czy musisz sprawdzić, czy użytkownik ma możliwość korzystania z sudo, czy też wykonuje skrypt powłoki za pomocą sudo?
Niko SP
Tylko czy ma taką możliwość. Lokalny skrypt będzie wymagał wprowadzenia hasła sudo później, więc chcę tylko wcześniej sprawdzić, czy użytkownik na zdalnym hoście jest nawet sudoer.
DanH
szybkie sprawdzenie mojego pola ubuntu dało mi sudo -l, zwraca polecenia, które użytkownik może uruchomić, jeśli (ALL) ALL jest ich częścią, użytkownik może używać sudo do dowolnego polecenia. Może to odpowiedni kąt?
Niko SP
1
sudo -lmonituje o podanie hasła.
ThatGraemeGuy
1
Sudo buforuje na podstawie tty, więc jeśli nowa sesja daje ci taki sam tty, możesz nie zostać poproszony. Spróbuj wykonać sudo -knajpierw.
Mark Wagner,

Odpowiedzi:

13

Obawiam się, że jedyną rzeczą, którą możesz przetestować, jest to, czy użytkownik ma uprawnienia sudo bez hasła.

Wykonać

sudo -n true

Jeśli $? jest 0, użytkownik ma dostęp sudo bez hasła, jeśli $? wynosi 1, użytkownik potrzebuje hasła.

Jeśli potrzebujesz weryfikacji konkretnego programu, zmień go truew swoim programie, tak aby program nic nie robiłchmod --help

erickzetta
źródło
1
Zauważ, że nie pomaga to w wstępnym wykryciu, czy polecenie Xjest w sudostanie bez podania hasła i bez przypadkowego uruchomienia
spróbuj złapać w końcu
3

Jeśli masz jednego użytkownika z dostępem sudo, na przykład „root”, możesz go użyć do sprawdzenia innych danych logowania. Jako użytkownik z dostępem uruchom:

sudo -n -l -U foo 2> & 1 | egrep -c -i "niedozwolone uruchamianie sudo | nieznany użytkownik"

Jeśli zwróci zero, „foo” ma dostęp. W przeciwnym razie nie ma dostępu do sudo.

Todd Moyer
źródło
3
Po prostu sudo -n -l cmdzostaniesz poinformowany, czy bieżący użytkownik ma dostęp sudo do cmd. Jeśli chcesz przetestować wynik.
Philippe A.,
1

sudo -l

To powinno dać ci wystarczająco dużo, aby zdecydować, czy masz sekrety, których chcesz / potrzebujesz.

dmourati
źródło
1
To wciąż wymaga podania hasła w moim systemie (Ubuntu 16.04).
Mario Vilas,
1

Wiem, że to bardzo stare pytanie, ale znalazłem szczęście z -nflagą (nieinteraktywną) i -v/ -l. Ale musisz sprawdzić dane wyjściowe:

$ 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.

Pewne przekierowanie danych wyjściowych i grepping doprowadzi cię tam prawdopodobnie:

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