Uruchom sudo -v. Zwykle służy do przedłużenia limitu czasu hasła sudo, ale może być wykorzystany do ustalenia, czy masz jakieś sudouprawnienia.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Fragment strony podręcznika:
Jeśli podano opcję -v (sprawdzanie poprawności), sudo zaktualizuje znacznik czasu użytkownika, w razie potrzeby monitując o hasło użytkownika. Wydłuża to limit czasu sudo o kolejne 5 minut (lub jakikolwiek limit czasu ustawiony jest w sudoers), ale nie uruchamia polecenia.
Jeśli użytkownik może uruchamiać tylko określone polecenia, to polecenie będzie działać, wskazując, że możesz uruchomić coś z różnymi uprawnieniami. Chociaż wiadomość wygląda inaczej przy próbie wykonania polecenia, do którego nie wolno ci w tym przypadku (i żadna poczta nie jest wysyłana do roota ), nadal możesz mieć problemy, 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 uruchamiać z różnymi uprawnieniami, możesz użyć sudo -l. Pamiętaj, że to polecenie wymaga podania hasła.
Dzięki. sudo -v działa dla mnie. Strona podręcznika mówi, że mogę również uruchomić sudo -l, ale prosi o hasło. Dlaczego?
Bruce
2
@Bruce Zgaduję tutaj, ale w przeciwnym razie ktoś (lub program, który uruchomisz) może dowiedzieć się, jakie programy mogą być uruchomione (być może bez wprowadzania hasła) przez bieżącego użytkownika i spróbować złośliwie wykorzystać te informacje.
Daniel Beck
Jak myślisz, co to oznacza, kiedy otrzymam to z powrotem patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>:? Podałem hasło i nic nie otrzymałem o nieautoryzowanym dostępie. Wiem, że mam sudoz powodzeniem uruchamianie innych poleceń, ale ta unable to resolve hostwiadomość mnie niepokoi, że coś innego może być funky na hoście.
Patrick M
@PatrickM Wygląda na problem z sudoersplikiem. Tam możesz określić, na którym hoście użytkownik ma uprawnienia do uruchomienia określonego polecenia (jest to przydatne, gdy używasz tego samego sudoerspliku na wielu komputerach). Możliwe, że nie można rozwiązać nazwy hosta określonej w tym pliku. Spróbuj to sprawdzić hostna przykład za pomocą polecenia.
Ale
Nie działa dla mnie na RHEL 6, sudo -vdał „xx nie ma w pliku sudoers. Ten incydent zostanie zgłoszony”.
79E09796,
43
To jest bardzo proste. Uruchom sudo -l. Spowoduje to wyświetlenie wszystkich posiadanych uprawnień sudo.
Być może przegłosowano, ponieważ powtarza to, co powiedział Daniel Beck prawie dwa lata temu.
G-Man,
1
Lub wyjaśnia, co się stało, to w najlepszym
razie
2
@Jathanathan: gdybyś teraz napisał skrypt w Ubuntu rigt, sudo -lpoprosi o hasło, czy możesz sudo, czy nie. sudo -vpyta tylko czy możesz i "$(whoami)" != "root"nigdy nie zapytasz o nic w żadnym linuksie.
bksunday
@bksunday Masz rację. Testowałem teraz na czystym Debianie Jessy i potwierdziłem twoje wyniki. Mój poprzedni (teraz usunięty) komentarz był prawdopodobnie wynikiem testów na maszynie, na której miałem kilka sudouprawnień.
Jonathan Ben-Avraham
@ G-Man, ale ta prosta odpowiedź pomogła mi bardziej niż prawdopodobnie bardziej precyzyjną odpowiedź Daniela, gdzie to polecenie jest niestety niestety samym końcem ...
#!/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
Dla mnie „ sudo -v” i „ sudo -l” nie działały w skrypcie, ponieważ czasami były interaktywne (prosząc mnie o hasło, jak wspomniano powyżej). „ sudo -n -l” również nie działał, dał kod wyjścia „1”, chociaż mam uprawnienia sudo z powodu brakującego hasła. Ale rozszerzenie polecenia do:
był dla mnie udany dla scenariusza. To wyrażenie podaje, 0czy bieżący użytkownik może wywołać „sudo”, a 1jeśli nie.
Objaśnienie:
Dodatkowy parametr -ndo sudozapobiega interaktywność.
Dane wyjściowe $Apolecenia „ sudo -n -v 2>&1” mogą być:
- puste (w tym przypadku sudo może być wywoływane przez bieżącego użytkownika), lub:
- uwaga, że bieżący użytkownik nie jest autoryzowany do sudo, lub:
- tekst pytania dla hasło (w tym przypadku użytkownik jest autoryzowany).
(„asswor” będzie pasować do angielskiego „hasła”, a także do niemieckiego „Passwort”).
mam niską rangę do głosowania i komentowania, ale chciałem głosować za odpowiedzią Geralda Schade'a, ponieważ znalazłem to jedyny sposób wcześniej i myślałem, że nikt inny nie wie - do teraz: D
„Sudo access” jest w smaku. Dwa podstawowe smaki: Najpierw Ty lub grupa, której jesteś członkiem, musisz skonfigurować dostęp do sudo w pliku / etc / sudoers.
Po drugie, musisz znać swoje hasło lub musisz ostatnio wykonać polecenie sudo. Niedawno upłynął limit czasu. (Ciekawostka: możesz wydłużyć czas w pliku sudoera.)
Często chcę przetestować drugi rodzaj dostępu w prologu skryptu, który będzie musiał wykonać kilka kroków. Kiedy to sprawdzenie się nie powiedzie, 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
-S mówi sudo, aby przeczytało hasło ze standardowego wejścia. -P ustawia pusty monit. -K kasuje drugi raz dostęp.
Ponieważ wysyła stderr do / dev / null, sprawdzi również, czy użytkownik ma pierwszy typ dostępu sudo.
OP „dostał w kłopoty” do biegania sudo, więc prawdopodobnie nie jest administrator systemu, ani nawet jednym z elitarnych administratorów systemu. Prawdopodobnie jest tylko użytkownikiem, który myślał, że mógł otrzymać pewne ograniczone uprawnienia. Co sprawia, że podejrzewasz, że może odejść ? su
Odpowiedzi:
Uruchom
sudo -v
. Zwykle służy do przedłużenia limitu czasu hasła sudo, ale może być wykorzystany do ustalenia, czy masz jakieśsudo
uprawnienia.Fragment strony podręcznika:
Jeśli użytkownik może uruchamiać tylko określone polecenia, to polecenie będzie działać, wskazując, że możesz uruchomić coś z różnymi uprawnieniami. Chociaż wiadomość wygląda inaczej przy próbie wykonania polecenia, do którego nie wolno ci w tym przypadku (i żadna poczta nie jest wysyłana do roota ), nadal możesz mieć problemy, jeśli administratorzy przeczytają
/var/log/secure
.Aby dowiedzieć się, co możesz uruchamiać z różnymi uprawnieniami, możesz użyć
sudo -l
. Pamiętaj, że to polecenie wymaga podania hasła.źródło
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
:? Podałem hasło i nic nie otrzymałem o nieautoryzowanym dostępie. Wiem, że mamsudo
z powodzeniem uruchamianie innych poleceń, ale taunable to resolve host
wiadomość mnie niepokoi, że coś innego może być funky na hoście.sudoers
plikiem. Tam możesz określić, na którym hoście użytkownik ma uprawnienia do uruchomienia określonego polecenia (jest to przydatne, gdy używasz tego samegosudoers
pliku na wielu komputerach). Możliwe, że nie można rozwiązać nazwy hosta określonej w tym pliku. Spróbuj to sprawdzićhost
na przykład za pomocą polecenia.sudo -v
dał „xx nie ma w pliku sudoers. Ten incydent zostanie zgłoszony”.To jest bardzo proste. Uruchom
sudo -l
. Spowoduje to wyświetlenie wszystkich posiadanych uprawnień sudo.źródło
sudo -l
poprosi o hasło, czy możesz sudo, czy nie.sudo -v
pyta tylko czy możesz i"$(whoami)" != "root"
nigdy nie zapytasz o nic w żadnym linuksie.sudo
uprawnień.Oto wersja przyjazna dla skryptów:
ponieważ nie utknie na wprowadzonym haśle, jeśli nie masz
sudo
dostępu.Możesz również ustawić go w zmiennej takiej jak:
Uwaga: w systemie macOS musisz zainstalować
coreutils
, npbrew install coreutils
.źródło
timeout
domyślnie nie są dostępne, np. W OS X?coreutils
npbrew install coreutils
.Tutaj odpowiedź Geralda Schade'a można jeszcze poprawić!
Posługiwać się
Oto kompletny przykład użycia w skrypcie :
źródło
Dla mnie „
sudo -v
” i „sudo -l
” nie działały w skrypcie, ponieważ czasami były interaktywne (prosząc mnie o hasło, jak wspomniano powyżej). „sudo -n -l
” również nie działał, dał kod wyjścia „1”, chociaż mam uprawnienia sudo z powodu brakującego hasła. Ale rozszerzenie polecenia do:był dla mnie udany dla scenariusza. To wyrażenie podaje,
0
czy bieżący użytkownik może wywołać „sudo”, a1
jeśli nie.Objaśnienie:
Dodatkowy parametr
-n
dosudo
zapobiega interaktywność.Dane wyjściowe
$A
polecenia „sudo -n -v 2>&1
” mogą być:- puste (w tym przypadku sudo może być wywoływane przez bieżącego użytkownika), lub:
- uwaga, że bieżący użytkownik nie jest autoryzowany do sudo, lub:
- tekst pytania dla hasło (w tym przypadku użytkownik jest autoryzowany).
(„asswor” będzie pasować do angielskiego „hasła”, a także do niemieckiego „Passwort”).
źródło
mam niską rangę do głosowania i komentowania, ale chciałem głosować za odpowiedzią Geralda Schade'a, ponieważ znalazłem to jedyny sposób wcześniej i myślałem, że nikt inny nie wie - do teraz: D
btw moje rozwiązanie:
(od końca 2015 r. mwhahaaa)
źródło
„Sudo access” jest w smaku. Dwa podstawowe smaki: Najpierw Ty lub grupa, której jesteś członkiem, musisz skonfigurować dostęp do sudo w pliku / etc / sudoers.
Po drugie, musisz znać swoje hasło lub musisz ostatnio wykonać polecenie sudo. Niedawno upłynął limit czasu. (Ciekawostka: możesz wydłużyć czas w pliku sudoera.)
Często chcę przetestować drugi rodzaj dostępu w prologu skryptu, który będzie musiał wykonać kilka kroków. Kiedy to sprawdzenie się nie powiedzie, mogę poinformować użytkownika, że musi włączyć drugi rodzaj dostępu przed uruchomieniem skryptu.
-S mówi sudo, aby przeczytało hasło ze standardowego wejścia. -P ustawia pusty monit. -K kasuje drugi raz dostęp.
Ponieważ wysyła stderr do / dev / null, sprawdzi również, czy użytkownik ma pierwszy typ dostępu sudo.
źródło
Wykonaj następujące kroki, aby wyświetlić plik sudoers. Jeśli tam jesteś, masz sudo. Jeśli nie, możesz dodać siebie.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
źródło
sudo
, więc prawdopodobnie nie jest administrator systemu, ani nawet jednym z elitarnych administratorów systemu. Prawdopodobnie jest tylko użytkownikiem, który myślał, że mógł otrzymać pewne ograniczone uprawnienia. Co sprawia, że podejrzewasz, że może odejść ?su