Jak sudo decyduje, czy poprosić o hasło, gdy otrzyma polecenie, które tak naprawdę nie potrzebuje `sudo`?

10

Podczas stosowania sudodo polecenia, które tak naprawdę nie potrzebuje sudo,

  • czasami nie pyta mnie o hasło. Na przykład pod moim $HOME, sudo ls.

  • Ale pamiętam, że robi to w przypadku jakiegoś innego polecenia, chociaż zapominam, które z nich.

Zastanawiałem się więc, jak sudozdecydować, czy poprosić o hasło, gdy otrzymam polecenie, które tak naprawdę nie potrzebuje sudo? Czy istnieje jakaś reguła w /etc/sudoersokreślaniu tego?

Moim prawdziwym problemem jest to, że kiedy używam du, czasami pokazuje „odmowa dostępu” dla niektórych katalogów, a czasem nie, prawdopodobnie dlatego, że nie mam uprawnień na niektóre katalogi? Zgłaszam sudosię duniezależnie i myślałem, że zostaniesz poproszony o hasło niezależnie, ale tak naprawdę nie we własnych katalogach.

Tim
źródło
15
Decyzja o tym, czy program będzie próbował zrobić coś, co może zrobić tylko root, lub uzyskać dostęp do pliku, do którego wywołujący użytkownik nie ma dostępu, bez faktycznego uruchamiania programu, jest ukrytym problemem. Możesz być pewien, że nie to robi sudo.
zwolnienie
2
+1, ponieważ chociaż pytanie opiera się na nieporozumieniu, objawy są jasno wyjaśnione i ma jedną jednoznaczną odpowiedź.
dcorking

Odpowiedzi:

22

W typowej konfiguracji polecenie nie ma znaczenia. Musisz podać hasło przy pierwszym użyciu sudo i nie potrzebujesz hasła w tej konkretnej powłoce przez następne 15 minut.

Z punktu widzenia komputera nie ma czegoś takiego jak „polecenie wymagające sudo”. Każdy użytkownik może podjąć próbę uruchomienia dowolnego polecenia. Wynikiem może być komunikat o błędzie, taki jak „Odmowa zezwolenia” lub „Brak takiego pliku lub katalogu”, ale zawsze można uruchomić polecenie.

Na przykład, jeśli uruchomisz dudrzewo katalogów, które zawiera treści, do których nie masz uprawnień dostępu, otrzymasz błędy uprawnień. To właśnie oznacza „odmowa zezwolenia”. Jeśli uruchomisz sudo du, sudo działa dujako root, więc nie otrzymujesz błędów uprawnień (to jest punkt konta root: root¹ zawsze ma uprawnienia). Po uruchomieniu sudo du, dudziała jako root, i sudonie jest zaangażowany w ogóle po duuruchomieniu. To, czy du napotka błędy uprawnień, jest całkowicie nieistotne dla działania sudo.

Istnieją polecenia, które wymagają sudo, aby zrobić coś pożytecznego . Przydatność to ludzka koncepcja. Musisz użyć sudo (lub innych metod, aby uruchomić komendę jako root), jeśli komenda robi coś pożytecznego, gdy uruchomisz ją jako root, ale nie po uruchomieniu na koncie.

To, czy sudo poprosi o twoje hasło, zależy od dwóch rzeczy.

  1. Na podstawie konfiguracji sudo decyduje, czy konieczne jest uwierzytelnienie. Domyślnie sudo wymaga hasła. Można to wyłączyć na kilka sposobów, w tym poprzez ustawienie authenticateopcji false i zastosowanie odpowiedniej reguły do NOPASSWDtagu.
  2. Jeśli sudo wymaga hasła, użycie wartości z pamięci podręcznej może być zadowalające. Jest to w porządku, ponieważ powodem, dla którego sudo potrzebuje twojego hasła, nie jest uwierzytelnianie, kto go wywołuje (sudo wie, który użytkownik go wywołał), ale potwierdzenie, że to ty wciąż wykonujesz polecenia, a nie ktoś, kto przejął kontrolę nad klawiaturą. Domyślnie sudo jest skłonny uwierzyć, że nadal jesteś przy komendach, jeśli hasło zostało wprowadzone mniej niż 15 minut temu (można to zmienić za pomocą timeoutopcji). Musisz wprowadzić hasło w tym samym terminalu (aby pozostać zalogowanym na jednym terminalu, pozostawić ten terminal bez nadzoru, a następnie użyć innego terminala, ktoś może „tty_tickets

¹ prawie, ale to jest poza zakresem tego wątku.

Gilles „SO- przestań być zły”
źródło
Mogą istnieć pliki z ustawionym bitem wykonywalnym tylko dla użytkownika root, a nie dla innych. Może to oznaczać, że „trzeba wykonać root, aby wykonać”. (Tylko drapanie.)
Paŭlo Ebermann
@ PaŭloEbermann Napisałem „każdy użytkownik może spróbować uruchomić dowolną komendę”, aby uniknąć duplikowania tego (rzadkiego) przypadku. Zawsze jest nitpicker :(
Gilles 'SO- przestań być zły'
45

sudonie wie, czy polecenie, które ma zostać uruchomione, musi działać jako inny użytkownik (zwykle root), wszystko co wie, to jego konfiguracja. To określa, którzy użytkownicy mogą uruchamiać się sudo, z tym, którzy użytkownicy są „celami” i dla jakich poleceń; określa również, czy hasło jest potrzebne, i które ma pozostać przy tokenie uwierzytelniającym.

Jeśli używasz domyślnej konfiguracji Debiana, ta druga jest najprawdopodobniej o to tutaj chodzi: sudopoprosi cię o hasło przy pierwszym użyciu w dowolnym terminalu, a następnie zachowa token uwierzytelniający przez pewien czas. Jeśli użyjesz ponownie sudow tym samym terminalu w tym czasie, nie poprosi o podanie hasła.

Stephen Kitt
źródło
Dzięki. Czy masz na myśli, sudo du /path/to/some/dirże albo zawsze potrzebuję mojego hasła, albo nigdy, niezależnie od /path/to/some/dir?
Tim
12
Tak. Zawsze będzie potrzebować twojego hasła (lub nie). Oczywiście, jeśli potrzebuje twojego hasła, ale już je zapisało w pamięci podręcznej, nie poprosi cię o jego wpisanie.
dr_
5
Ściśle mówiąc, może zależeć od ścieżki, ponieważ /etc/sudoersmoże określać polecenia i ich argumenty. Jednak jeśli nie dodałeś czegoś takiego do sudoers(a jeśli tak, mam nadzieję, że będziesz tego świadomy), argumenty nie będą miały znaczenia (podobnie jak polecenie, jeśli masz ogólny dostęp do roota za pośrednictwem sudo ).
Stephen Kitt
19
sudonie przechowuje Twojego hasła w pamięci podręcznej, tylko informacje, że Twoja tożsamość została już raz zweryfikowana za pomocą sprawdzenia hasła. Ponieważ sudojest to program root-setuid, ma już wszystkie uprawnienia, których potrzebuje, aby uruchamiać cokolwiek jak każdy - ale ufa się, że pozwala użytkownikom korzystać z niego dokładnie tak, jak określono w sudoerspliku, i odrzuca wszelkie inne próby jego użycia . Dlatego tak ważny sudojest tak mały i bardzo dobrze zbadany program.
telcoM
6

na polecenie, które tak naprawdę nie potrzebuje sudo

To nie jest takie polecenie potrzeby lub potrzeby nie sudo. Kiedy biegniesz

sudo -u user command

system działa commandjako user.

To, czy wywołanie zakończy się powodzeniem, czy nie, i pytanie o hasło, zależy od zasad bezpieczeństwa sudoers(zwykle skonfigurowanych w /etc/sudoers).

dr_
źródło