Okna.  Wirusy.  Notatniki.  Internet.  biuro.  Narzędzia.  Kierowcy

Od czasów starożytnych wielu było zdezorientowanych różnorodnością opcji bezpieczeństwa podczas wykonywania operacji z maksymalnymi uprawnieniami. Na przykład w oficjalnej Dokumentacja Ubuntu zaleca się użycie czegoś w rodzaju sudo nano jako polecenia edycyjnego, aw wielu amatorskich podręcznikach (w stylu „5 sztuczek z wiersza poleceń, które zaskoczą twoją babcię”) sugeruje się napisanie sudo su - aby uzyskać root "nowa powłoka. Spróbuję wyjaśnić, dlaczego taki stan rzeczy wydaje mi się niewłaściwy.

Historycznie jedyny uniwersalny sposób uruchom polecenie, ponieważ innym użytkownikiem w systemie Unix był program su. Uruchom bez parametrów, poprosił o hasło roota i, jeśli się powiedzie, po prostu zmienił bieżącą nazwę użytkownika na root, pozostawiając prawie wszystko Zmienne środowiska od starego użytkownika (z wyjątkiem PATH, USER i kilku innych, zobacz man su z twojej dystrybucji). Bardziej poprawne było uruchomienie go jako su - - w takim przypadku powłoka również uzyskałaby poprawne środowisko. Dzięki opcji -c możliwe było wykonanie polecenia: su -c "vim /etc/fstab" .

Jednocześnie zaufani użytkownicy musieli pamiętać hasło roota, a wszyscy użytkownicy wymienieni w grupie wheel (czyli w grupie, której członkowie mogli wykonać polecenie su i zostać superużytkownikiem) mieli taki sam nieograniczony dostęp do całego systemu , co stanowiło poważny problem bezpieczeństwa.

Potem przyszło polecenie sudo i to był przełom. Teraz administrator mógł określić listę dozwolonych poleceń dla każdego użytkownika (lub grupy użytkowników), pliki dostępne do edycji, specjalne zmienne środowiskowe i wiele więcej (cały ten splendor jest kontrolowany z /etc/sudoers , zobacz man sudoers z twojej dystrybucji) . Po uruchomieniu Sudo prosi użytkownika o podanie własnego hasła, a nie hasła roota. Pełną powłokę można uzyskać za pomocą „ Sudo -i ”

Na szczególną uwagę zasługuje specjalne polecenie sudoedit , które bezpiecznie uruchamia edytor określony w zmiennej środowiskowej $EDITOR. Przy bardziej tradycyjnym schemacie edytowanie plików odbywało się mniej więcej tak:
sudo vi /etc/fstab

Uruchomiona w ten sposób Vi odziedziczyła powłokę z nieograniczonymi prawami i poprzez:! użytkownik mógł uruchomić dowolne polecenie (o ile oczywiście administrator zadbał o to wcześniej) i otworzyć dowolny plik.

Sudoedit sprawdza, czy ten użytkownik może edytować dany plik, następnie kopiuje określony plik do katalogu tymczasowego, otwiera go w edytorze (który dziedziczy prawa użytkownika, a nie root "a), a po edycji, jeśli plik został zmieniony, kopiuje go z powrotem z zachowaniem szczególnych środków ostrożności.

W dystrybucjach opartych na Debianie użytkownik root nie ma hasła, zamiast tego wszystkie czynności administracyjne muszą być wykonywane przez sudo lub jego graficzny odpowiednik gksudo . Jako całkowity zamiennik su, sudo powinno być jedynym poleceniem przełączania się między użytkownikami, jednak, jak wspomniano na początku, w tej chwili tak nie jest i wszyscy z jakiegoś powodu wymyślają dzikie sekwencje sudo, su, vi i myślników .

Dlatego radzę wszystkim raz na zawsze zapamiętać:

Po pierwszej publikacji tej notatki zadano mi kilka pytań. Z odpowiedzi okazało się zrobić mini-FAQ.

P: jak zrobić su -c "echo 1 > /etc/privileged_file" za pomocą sudo? sudo echo 1 /etc/privileged_file przysięga „odmowa uprawnień”
Odp.: Dzieje się tak, ponieważ tylko polecenie echo jest wykonywane z podwyższonymi uprawnieniami, a wynik jest przekierowywany do pliku, który ma już normalne prawa użytkownika. Aby dodać coś do pliku uprzywilejowanego, musisz uruchomić następującą komendę:
$echo 1| sudo tee -a plik_uprzywilejowany >/dev/null
Lub tymczasowo zostań rootem:
$ sudo -i # echo 1 > plik_uprzywilejowany # wyjście $
P: Sudo -i jest dłuższe niż su - i wydaje się, że nie ma między nimi różnicy, po co drukować więcej?
Odp.: Sudo ma kilka zalet, które są warte kłopotu z wpisaniem kilku dodatkowych znaków:

  • domyślnie sudo zapisuje całą aktywność użytkownika do kanału authpriv syslog (z reguły wynik umieszczany jest w pliku /var/log/auth.log), a podobną funkcję należy zawrzeć w su poprzez ustawienie specjalnego parametru w plik ustawień, który różni się w zależności od dystrybucji (SULOG_FILE w /etc/login.defs w ubuntu linux, /etc/login.conf i /etc/pam.d/su na FreeBSD itp.)
  • w przypadku su administrator systemu nie może ograniczać poleceń, które użytkownicy mogą wykonywać, ale w przypadku sudo może
  • w przypadku pozbawienia użytkownika praw administracyjnych, w przypadku su, po usunięciu go z grupy kołowej, musi zapomnieć hasła roota; jeśli używane jest sudo, wystarczy usunąć go z odpowiedniej grupy (np. koło lub admin) i/lub plik sudoers jeśli został dodatkowo skonfigurowany.
P: Jestem jedynym użytkownikiem mojego systemu i jestem przyzwyczajony do su, dlaczego potrzebuję Sudo?
A: Odpowiem na pytanie pytaniem: jeśli istnieje poprawne sudo, po co używać przestarzałego su?

Paradoksalnie polecenie sudo nie wyklucza uruchomienia sesji administratora w ramach normalnej sesji użytkownika. Ponieważ można go użyć do uruchomienia tego samego polecenia su:

$ sudo su

I to nawet w Ubuntu, gdzie nie ma konta root; dokładniej, domyślnie nie ma hasła. Ale użycie sudo sprawia, że ​​​​jest to niepotrzebne nawet w przypadku polecenia su. Ale nie jest zabronione ustawianie hasła superużytkownika - w końcu wystarczy wydać polecenie

$ sudo hasło

używać su w zwykły sposób. A nawet, jeśli chcesz, zaloguj się jako root podczas rejestracji w systemie.

Jednak nawet tutaj polecenie sudo zapewnia „ideologicznie poprawną” metodę, a nawet nie jedną. Są to opcje -s i -i, które przedłużają, choć w nieco inny sposób, działanie polecenia sudo w nieskończoność, aż do zakończenia „sesji dodatkowej” poleceniem exit.

Opcja -s podczas otwierania dodatkowej sesji root zachowuje wszystkie zmienne środowiskowe pierwotnego użytkownika. Jeśli jednak dodasz do tego opcję -H, to zmienne te zostaną ponownie odczytane z plików profilu katalogu domowego administratora, czyli /root, jak przy uruchamianiu interaktywnej instancji powłoki. Jednak katalog, który był aktualny w momencie wprowadzenia polecenia, nie ulegnie zmianie, ani nie zmieni się wygląd monitu. wiersz poleceń.

Opcja -i całkowicie odtwarza środowisko roota, uruchamiając jego powłokę jako powłokę logowania. Oczywiście zmienia to również bieżący katalog na /root, a wiersz poleceń przyjmuje postać opisaną w odpowiedniej zmiennej w pliku profilu powłoki administracyjnej (w bash - PS1).

W praktyce nie ma dużej różnicy między tymi dwiema formami uzyskiwania stałych uprawnień administratora, zwłaszcza w bash . Ale w zsh, przy odpowiednich ustawieniach plików profili, w razie potrzeby można uzyskać znacząco różne środowiska w każdym z tych przypadków. To prawda, ile użytkownik potrzebuje, to duże pytanie. Ale fakt, że podczas korzystania z opcji -H bycie w stałym trybie administracyjnym nie pojawia się w żaden sposób na zewnątrz, jest obarczony błędami. To sprawia, że ​​opcja -i jest preferowana w większości przypadków.

Nawiasem mówiąc, możliwości Sudo nie ograniczają się do uruchamiania poleceń jako administrator: ustawiając opcję -u username, można je również wykonywać w imieniu użytkownika, którego login jest ustawiony jako jego wartość. Może to być przydatne podczas przeglądania lub kopiowania plików kropek i katalogów kropek innego użytkownika, często tylko do odczytu i edycji przez ich właściciela.

Nawiasem mówiąc, polecenie sudo można uruchomić tak, aby pytało o hasło użytkownika, w imieniu którego polecenie zostanie wykonane (na przykład administratora), a nie tego, który wymaga jego uprawnień. Jest do tego opcja -targetpw. Aby wymóg hasła root był stały, wystarczy zdefiniować na przykład alias podobny

Alias ​​sudo -targetpw

Wymaganie hasła roota podczas uruchamiania sudo jest jego domyślnym zachowaniem w niektórych dystrybucjach, na przykład mówi się, że Suse.

Polecenie sudo ma znacznie więcej opcji - powyżej podałem tylko te, z których musiałem skorzystać. Resztę łatwo zobaczyć w man Sudo . Z tych, których nie wymieniono, wspomnę również o opcji -b, która nakazuje uruchomienie w tle polecenia „jurisdictional”. Może być przydatny podczas wykonywania długotrwałych zadań, takich jak kopiowanie obrazów USB na dysk flash za pomocą polecenia dd.

Jak właśnie widzieliśmy, polecenie sudo daje użytkownikowi prawie nieograniczone uprawnienia do wszelkich działań w całym systemie, a także do manipulowania danymi użytkowników innych osób. Mając to na uwadze, zadajmy sobie następujące pytania:

  • czy dowolny użytkownik może uzyskać uprawnienia administratora za pomocą polecenia sudo i
  • Czy może za jego pośrednictwem wykonywać wszystkie czynności administracyjne?

Jeśli mówimy o rodzinie Ubuntu, w której ten mechanizm został po raz pierwszy użyty „po wyjęciu z pudełka”, a następnie „po wyjęciu z pudełka”, odpowiedź na pierwsze pytanie będzie negatywna, na drugie – pozytywna. Generalnie zależy to od ustawień programu sudo, które są opisane w pliku /etc/sudoers. W nim możesz ustawić reguły, które pozwalają tylko niektórym użytkownikom wykonywać określone polecenia. W skrócie wygląda to tak:

nazwa użytkownika host=polecenie

Tutaj, jak można się domyślić, nazwa użytkownika to nazwa użytkownika, dla którego ustawiono tę regułę, host to nazwa komputera, z którego może on skorzystać z tej reguły, polecenie to określone polecenie, którego użycie jest dozwolone dany użytkownik z tej maszyny. Polecenie musi być podane z pełną ścieżką bezwzględną (tj. /sbin/fdisk , a nie fdisk). Pole opisu polecenia może zawierać wiele wartości oddzielonych przecinkami, na przykład:

Nazwa użytkownika ALL = /sbin/fdisk,/bin/mount

W domyślnych zasadach Ubuntu dotyczących dostępu użytkownika do uprawnień administracyjnych są opisane w następujący sposób:

# Specyfikacja uprawnień użytkownika root ALL=(ALL) ALL # Członkowie grupy admin mogą uzyskać uprawnienia roota %admin ALL=(ALL) ALL

Oznacza to, że użytkownik root, tak jak powinien, może wykonywać dowolne polecenia z dowolnego hosta. Ale tylko użytkownicy należący do grupy admin (odpowiednik grupy kołowej, o której wspomniano w) mogą uzyskać jej uprawnienia. Użytkownik utworzony podczas typowej instalacji automatycznie staje się członkiem tej grupy, dzięki czemu wszystkie uprawnienia administracyjne są dla niego dostępne bez żadnych dodatkowych ustawień. Jednak inni użytkownicy, których konta zostaną utworzone później, są pozbawieni tego uprawnienia. O ile oczywiście nie zostali specjalnie włączeni do grupy administratorów.

W innych dystrybucjach, które nie używają sudo po wyjęciu z pudełka, będziesz musiał edytować jego plik konfiguracyjny - ten sam /etc/sudoers, o którym mowa powyżej.

Plik /etc/sudoers jest zwykłym plikiem tekstowym iw związku z tym można go edytować w dowolnym edytorze tekstu (lub, powiedzmy, za pomocą ed lub sed). Jednak jednocześnie istnieje pewne ryzyko, że coś schrzanimy (ze względu na zwykłe literówki), aż do całkowitego zablokowania sobie dostępu do uprawnień superużytkownika. Oczywiście takie sytuacje można naprawić - na przykład poprzez ponowne uruchomienie w trybie pojedynczego użytkownika. Jednak najlepiej ich nie bić. Dlatego bardziej niezawodnym sposobem modyfikacji /etc/sudoers jest użycie specjalnie zaprojektowanego do tego narzędzia - visudo .

Narzędzie visudo nie robi nic szczególnego - po prostu otwiera /etc/sudoers w edytorze tekstowym opisanym zmienną EDITOR superużytkownika (jeśli nie jest zdefiniowany, znów będzie klasycznym vi - stąd nazwa) i pozwala edytować go w zwykły sposób , a następnie wyjdź z edytora, zapisując wyniki w zwykły sposób. Jednak wcześniej wynik edycji jest sprawdzany pod kątem poprawności. A jeśli zostanie wykryte naruszenie składni akceptowanej dla /etc/sudoers, wydawane jest odpowiednie ostrzeżenie. Po czym możesz wrócić do edycji, odrzucić wprowadzone zmiany lub nadal je zaakceptować (oczywiście na własną odpowiedzialność).

Narzędzie visudo nie gwarantuje 100% sukcesu edycji. Sprawdza bowiem tylko zgodność składni, a nie „poprawność samych reguł”. Oznacza to, że jeśli popełniono błąd podczas określania ścieżki do polecenia potrzebnego dla tej reguły, to polecenie nie będzie działać przez sudo.

Jednak w rzeczywistości zwykle wygląda to znacznie prościej i wcale nie jest przerażające. Tak więc w Fedorze 11, w przykładowej konfiguracji /etc/sudoers, musiałem tylko odkomentować linię

%koło WSZYSTKO=(WSZYSTKO) WSZYSTKO

nadania użytkownikowi z określonej grupy (a ja się tam z góry zaliczyłem, jak opisano w) wszelkich uprawnień, jakie posiada administrator. Jednocześnie dałoby się zapewnić sobie pulla i możliwość korzystania z sudo bez hasła. Wymagałoby to odkomentowania linii

# %wheel ALL=(ALL) NOPASSWD: ALL

Ograniczyłem się jednak tylko do wydłużenia akcji hasła poprzez wpisanie (początkowo brakująca linia

Domyślnie znacznik czasu_timeout=10

gdzie wartość limitu czasu jest w minutach. Nawiasem mówiąc, jeśli zmienisz to na zero -

Domyślnie znacznik czasu_timeout=0

wtedy hasło będzie wymagane przy każdym dostępie do polecenia sudo.

Alternatywnie możesz wyłączyć limit czasu dla akcji sudo, wprowadzając dla niej wartość ujemną:

Domyślnie znacznik czasu_timeout=-1

W takim przypadku hasło będzie wymagane tylko przy pierwszym wywołaniu tego polecenia.

Bliższe przyjrzenie się plikowi /etc/sudoers z łatwością ujawni możliwości przyznania niektórym użytkownikom lub grupom tylko ograniczonego zestawu praw. Jednak tutaj zaczynają się subtelności prawdziwej administracji. Po prostu pozbawiłem mojego podwójnego eksperymentatora dostępu do jakichkolwiek działań administracyjnych, aby powstrzymać wszelkie jego ingerencje w tej dziedzinie. Jednak nawet to nie zawsze pozwala mi sobie z nim poradzić – tak jak Timur Shaov nie jest w stanie poradzić sobie ze swoim lirycznym bohaterem.

Polecenie sudo jest bardzo ważne do zarządzania prawami dostępu w system operacyjny Linuks. Dzięki temu małemu poleceniu możesz zezwolić na wykonywanie określonych czynności w imieniu administratora innym użytkownikom, nie przekazując im samego hasła superużytkownika. Ponadto nie musisz zawsze znajdować się na koncie superużytkownika, aby czasami wykonywać czynności administracyjne.
Wydawać by się mogło, że taki mały zespół, z minimum funkcji i możliwie najprostszym użytkowaniem, jednak w rzeczywistości potrafi znacznie więcej. W tym artykule przyjrzymy się, jak sudo jest skonfigurowane w systemie Linux, aby kontrolować dostęp do funkcji systemowych i możliwości użytkownika.

Jak działa Sudo?

Zanim przejdziemy do konfigurowania dostępu do narzędzia sudo, przyjrzyjmy się, jak to działa. W systemie Linux istnieją dwa sposoby uzyskania uprawnień administratora. Możesz przełączyć się na użytkownika root za pomocą polecenia su lub przekazać żądane polecenie jako parametr do narzędzia sudo, które wykona je z uprawnieniami administratora. Co więcej, druga metoda jest lepsza, ponieważ nie zapomnisz, że korzystasz z praw roota i nie zrobisz nic więcej.
Nazwa polecenia oznacza użytkownik zastępczy Lub superużytkownik tak. Narzędzie umożliwia uruchamianie programów w imieniu innego użytkownika, ale najczęściej w imieniu roota. Narzędzie zostało opracowane w 1980 roku przez Boba Cogshella i Cliffa Spencera. W tym czasie wielu programistów zmieniło się i dodano wiele funkcji.
sudo działa dzięki flagi dostępu SUID. Jeśli ta flaga jest ustawiona dla programu, to nie jest wykonywana w imieniu użytkownika, który ją uruchomił, ale w imieniu właściciela, biorąc pod uwagę, że należy do pliku sudo, narzędzie jest wykonywane jako root. Następnie odczytuje swoje ustawienia, pyta użytkownika o hasło i decyduje, czy może on uruchamiać polecenia jako administrator. Jeśli tak, to wykonywane jest polecenie przekazane w parametrze.
Teraz, gdy znasz teorię, spójrzmy, jak skonfigurować sudo w systemie Linux.

Konfigurowanie sudo w systemie Linux

Wszystkie ustawienia sudo znajdują się w /etc/sudores. Tutaj możesz skonfigurować wiele parametrów, począwszy od tego, kto będzie mógł wykonywać polecenia w imieniu superużytkownika, a skończywszy na ograniczeniu zestawu dostępnych poleceń.
Aby otworzyć plik do edycji, wpisz następujące polecenie jako superużytkownik:

Możesz także określić Edytor tekstu gdzie chcesz edytować plik konfiguracyjny:

# EDYTOR=nano wizualna

Następnie przyjrzymy się najciekawszym ustawieniom, które możesz ustawić w tym pliku. Ale najpierw spójrzmy na podstawową składnię pliku. Składa się z dwóch rodzajów linii, są to aliasy, które pozwalają tworzyć listy użytkowników i flagi, a także same reguły, które określają, jak zachowa się polecenie sudo. Składnia aliasu wygląda następująco:
wpisz alias_name = element1, element2, element3
Typ określa, jaki typ alice ma zostać utworzony, nazwa określa nazwę, która ma być użyta, a lista elementów określa elementy, które będą implikowane w odniesieniu do tej nazwy.
Opis uprawnień dla użytkowników ma nieco inną składnię:
użytkownik hosta = (inny_użytkownik:grupa) polecenia
Użytkownik określa użytkownika lub grupę, dla której tworzymy regułę, host to komputer, dla którego ta reguła będzie obowiązywać. Inny użytkownik - pod postacią którego użytkownika pierwszy może wykonywać polecenia, a ostatni - zezwalać na polecenia. Zamiast dowolnego parametru można użyć aliasu. A teraz konfigurowanie sudo w Debianie i innych dystrybucjach.

Ustawienia główne

Alias ​​Domyślne umożliwia ustawienie standardowych parametrów działania narzędzia, które rozważymy w tej sekcji. Taki alias zaczyna się od słowa Defaults, po którym następuje nazwa flagi. Jeśli przed nazwą znajduje się symbol !, oznacza to, że flaga musi być włączona, w przeciwnym razie wyłączona:
Wyłącz wprowadzenie przy pierwszym użyciu:

Domyślnie !wykład


Superużytkownik nie może sudo:

Domyślnie!root_sudo



Teraz, jeśli spróbujesz Sudo Sudo nic nie zadziała:


Zmień katalog domowy dla użytkownika docelowego, domyślnie folder bieżącego użytkownika jako katalog domowy:

Domyślnie set_home



Zapisz listę grup bieżącego użytkownika:

Domyślnie !preserve_groups



Monituj o hasło superużytkownika zamiast hasła użytkownika:



Następnie rozważ zmienne, które można ustawić na wartości, aby ustawić żądane ustawienia:
Ustaw liczbę prób podania hasła przed wyjściem sudo, domyślnie jest to 3:

domyślnie passwd_tries=5





Liczba minut, które upłyną, zanim Sudo ponownie poprosi o hasło, domyślnie jest to 5. Jeśli ustawione na 0, hasło będzie zawsze wymagane, bez względu na to, jak dawno temu korzystałeś z narzędzia:

Domyślnie znacznik czasu_timeout=10



Poniższy parametr określa liczbę minut, przez które sudo będzie czekać na ponowne wprowadzenie hasła, jeśli zostanie ono wprowadzone niepoprawnie:

domyślnie passwd_timeout=10



Możesz zmienić komunikat, który będzie wyświetlany po zapytaniu o hasło:

Defaults passprompt="Twoje hasło to:"


W tym celu możesz określić innego użytkownika, nie roota, z którego będą wykonywane wszystkie polecenia:

domyślne runas_default="użytkownik"

Możesz rejestrować wszystkie próby połączenia z Sudo:

Domyślnie logfile=/var/log/sudo



Następnie próbujemy sprawdzić działanie dziennika:

$ sudo cat /var/log/sudo



To były wszystkie najciekawsze opcje konfiguracji sudo, których możesz potrzebować, a następnie przyjrzymy się, jak ustawić uprawnienia sudo dla użytkowników.

Konfigurowanie użytkowników sudo

Omówiliśmy już składnię ustawiania akcji dla użytkowników powyżej, tutaj wszystko jest bardziej skomplikowane niż w przypadku aliasów, ale możesz to rozgryźć. Na przykład pozwólmy dowolnemu użytkownikowi używać sudo z dowolnego hosta i wykonywać dowolne polecenia:

WSZYSTKO WSZYSTKO = (WSZYSTKO) WSZYSTKO



Takie polecenie jest bardzo niepewne, pozwala wszystkim i na wszystko. Pierwszy to ALL, aby umożliwić wszystkim użytkownikom, drugi to ALL dla wszystkich hostów, trzeci to ALL, aby umożliwić logowanie jako dowolny użytkownik, a czwarty to zezwolenie na wykonanie dowolnego polecenia. Ale znacznie częściej używana jest inna konstrukcja:

%koła WSZYSTKO = (WSZYSTKO) WSZYSTKO


Oznacza to to samo co poprzednie, tylko tutaj nie zezwalamy na używanie sudo wszystkim użytkownikom, ale tylko tym, którzy są członkami grupy wheel.

%koło ALL = (root) ALL

Tutaj już ograniczyliśmy możliwy wybór użytkowników tylko do użytkownika root. Możesz także określić grupę użytkowników, w imieniu której może wykonywać polecenia:

%wheel ALL = (root: admins) ALL



Oznacza to, że możesz uruchomić polecenie jako root lub inny użytkownik z grupy admins. Możemy również określić polecenia, które użytkownik może wykonać. Na przykład:
  • Runas_Alias- alias użytkowników, w imieniu których wykonywane będą polecenia;
  • alias_hosta- alias hosta;
  • Cmnd_Alias- alias polecenia;
  • Na przykład utwórzmy cztery aliasy i zastosujmy je do naszej reguły:

    User_Alias ​​​​Użytkownicy = użytkownik1, użytkownik2, użytkownik3
    Runas_Alias ​​​​Administratorzy = root, admin
    Hosty alias_hosta = host1,host2
    Cmd_Alias ​​​​Cmds = /bin/mount, /bin/umount

    Hosty użytkowników = (Administratorzy) Cmds

    Oznacza to, że użytkownicy na liście Użytkownicy będą mogli uruchamiać polecenia Cmds jako użytkownicy Amdins na hostach.
    Pozostaje powiedzieć kilka słów o flagach. Flaga NOPASSWD informuje, aby nie pytać o hasło podczas wykonywania tej reguły. Na przykład, aby umożliwić wszystkim użytkownikom wykonanie polecenia mount za pomocą sudo bez hasła:

    ALL ALL = (root) NOPASSWD: /bin/mount

    Możesz także w ogóle wyłączyć to konkretne polecenie za pomocą flagi NOEXEC:

    ALL ALL = (root) NOEXEC /bin/mount

    Możesz sprawdzić, czy plik /etc/sudores został poprawnie skonfigurowany i zobaczyć wszystkie utworzone reguły za pomocą polecenia:


    Tutaj wyświetlane są wszystkie ustawione flagi i ustawienia, a także uprawnienia tego użytkownika.

    wnioski

    W tym artykule przyjrzeliśmy się, jak sudo jest konfigurowane w systemie Linux. Jak widać, choć bardzo proste narzędzie, ukrywa wiele przydatnych ustawień, których możesz użyć w swoim systemie. Jeśli masz jakieś pytania, zadaj je w komentarzach!

    W każdym systemie Linux zawsze jest jeden uprzywilejowany użytkownik - root. Ten użytkownik ma uprawnienia do wykonywania dowolnych czynności, usuwania dowolnych plików i zmiany dowolnych ustawień. Jest prawie niemożliwe, aby w jakiś sposób ograniczyć swobodę działania roota. Z drugiej strony wszyscy pozostali użytkownicy systemu zwykle nie mają większości niezbędne prawa, na przykład prawa do instalowania programów, ponieważ jest to operacja administracyjna, do której uprawnienia ma tylko root. Inną częstą operacją, dostępną tylko dla superużytkownika, jest kopiowanie i modyfikowanie plików w folderach systemowych, do których zwykły użytkownik nie ma dostępu.

    Wcześniej ten problem był rozwiązywany w prosty sposób: mając hasło roota, można było zalogować się do systemu na jego konto lub tymczasowo uzyskać jego uprawnienia za pomocą polecenia su. Następnie wykonaj wszystkie niezbędne operacje i wróć jako zwykły użytkownik. W zasadzie taki schemat działa dobrze, ale ma wiele istotnych wad, w szczególności niemożliwe (a dokładniej bardzo trudne) ograniczenie uprawnień administracyjnych tylko do pewnego zakresu zadań.

    Dlatego we współczesnym Dystrybucje Linuksa zamiast konta root do administracji używane jest narzędzie sudo.

    W Ubuntu domyślnie konto root jest generalnie wyłączone, tj. nie ma możliwości uzyskania dostępu do roota bez jego włączenia. root jest dokładnie tym, co jest wyłączone, tj. jest obecny w systemie, po prostu nie można pod nim przejść. Jeśli chcesz przywrócić możliwość korzystania z konta root, zapoznaj się z poniższym akapitem dotyczącym włączania konta root.

    Co to jest Sudo

    sudo to narzędzie, które przyznaje uprawnienia administratora do wykonywania operacji administracyjnych zgodnie z jego ustawieniami. Pozwala w łatwy sposób kontrolować dostęp do ważnych aplikacji w systemie. Domyślnie kiedy instalowanie Ubuntu pierwszy użytkownik (ten utworzony podczas instalacji) otrzymuje pełne prawa do korzystania z sudo. Te. w rzeczywistości pierwszy użytkownik ma takie same uprawnienia jak root. Jednak to zachowanie sudo można łatwo zmienić, patrz poniżej w akapicie dotyczącym konfigurowania sudo.

    Gdzie jest używany sudo

    Sudo jest używane za każdym razem, gdy uruchamiasz coś z menu Administracja systemu. Na przykład podczas uruchamiania Synaptic zostaniesz poproszony o podanie hasła. Synaptic to program do zarządzania instalacją, więc do jego uruchomienia potrzebne są uprawnienia administratora, które uzyskuje się przez sudo, wprowadzając hasło.

    Jednak nie wszystkie programy wymagające uprawnień administracyjnych są automatycznie uruchamiane z sudo. Zwykle trzeba ręcznie uruchamiać programy z uprawnieniami administratora.

    Uruchamianie programów graficznych z uprawnieniami administratora

    Na początek programy graficzne z uprawnieniami administratora możesz skorzystać z okna dialogowego uruchamiania programu, wywoływanego domyślnie skrótem klawiaturowym Alt + F2 .

    Powiedzmy, że musimy biec menedżer plików Nautilus z uprawnieniami administratora do GUI jakoś zmienić treść foldery systemowe. Aby to zrobić, wprowadź polecenie w oknie dialogowym uruchamiania aplikacji

    gksudo nautilus

    gksudo można zastąpić gksu , a użytkownicy KDE powinni pisać kdesu zamiast gksudo . Zostaniesz poproszony o podanie hasła, a jeśli masz niezbędne prawa, Nautilus będzie działał jako administrator. Każde oprogramowanie graficzne można uruchomić z uprawnieniami administratora, po prostu pisząc w oknie dialogowym uruchamiania

    gkudo<имя_команды>

    Zachowaj szczególną ostrożność podczas pracy w aplikacjach uruchamianych z uprawnieniami administratora. Będziesz mógł wykonać dowolną operację bez żadnych ostrzeżeń z systemu, w szczególności usunąć pliki systemowe czyniąc w ten sposób system bezużytecznym.

    Uruchamianie programów z uprawnieniami administratora w terminalu

    Aby uruchomić polecenie w terminalu jako administrator, po prostu wpisz przed nim sudo:

    Sudo<команда>

    Zostaniesz poproszony o podanie hasła. Uważaj, hasło podczas wprowadzania nie ma mowy nie jest wyświetlany, jest to normalne i zrobione ze względów bezpieczeństwa, po prostu wpisz do końca i naciśnij Enter. Po wprowadzeniu hasła określone polecenie zostanie wykonane jako root.

    System zapamiętuje wprowadzone hasło przez pewien czas (utrzymuje otwartą sesję sudo). Dlatego kolejne uruchomienia sudo mogą nie wymagać hasła. Aby upewnić się, że sesja sudo została zakończona, wpisz terminal

    Ponadto często występują błędy związane z potokami w systemie Linux. Podczas wykonywania polecenia

    Sudo cat test.txt | tekst grep > wynik.txt

    Z jako root zostanie wykonany tylko cat, więc plik wynik.txt może się nie zapisać. Musisz albo napisać sudo przed każdym poleceniem, albo tymczasowo przełączyć się na superużytkownika.

    Uzyskanie uprawnień administratora do wykonywania wielu poleceń

    Czasami konieczne jest wykonanie kilku poleceń z rzędu z uprawnieniami administratora. W takim przypadku możesz tymczasowo zostać superużytkownikiem za pomocą jednego z następujących poleceń:

    sudo -s sudo -i

    Następnie przejdziesz do trybu superużytkownika (z ograniczeniami nałożonymi przez ustawienia sudo), jak wskazuje symbol # na końcu wiersza polecenia. Dane polecenia akcji są podobne do su , jednak:- sudo -s- nie zmienia katalogu domowego na /root, katalog domowy pozostaje katalogiem domowym użytkownika, który wywołał sudo -s co zazwyczaj jest bardzo wygodne. - sudo -i- zmieni również katalog domowy na /root.

    Aby wyjść z powrotem do normalnego trybu użytkownika, wpisz exit lub po prostu naciśnij Ctrl + D .

    Używając tradycyjnego konta root i polecenia su

    Odblokować konto root niesie ze sobą nieuzasadnione ryzyko (pracując cały czas jako root masz 100 500 sposobów na „strzelenie sobie w stopę”), a także ułatwia atakującemu uzyskanie dostępu do twojego komputera.

    Ubuntu 11.04 i starsze

    Aby zalogować się jako root, po prostu ustaw dla niego hasło:

    sudo passwd root

    Następnie na ekranie logowania kliknij opcję Inne... i wprowadź ustawioną nazwę użytkownika (root) oraz hasło.

    Ubuntu 11.10 i starsze

    Od wersji 11.10 zainstalowany jest menedżer logowania lightdm, a radzenie sobie z logowaniem roota jest nieco bardziej skomplikowane.

    1. Ustaw hasło roota. Wpisz w terminalu:

    sudo passwd root

    2. Włącz element „Wprowadź swój login”. Wpisz w terminalu:

    Gksu gedit /etc/lightdm/lightdm.conf

    Na końcu pliku dodaj:

    Greeter-show-manual-login=true

    3. Uruchom ponownie lightdm. Wpisz w terminalu:

    sudo ponowne uruchomienie usługi lightdm

    To wszystko, pozycja „Logowanie” pojawi się na ekranie logowania. W polu logowania wpisz „root”, w polu hasła - hasło, które ustaliliśmy na pierwszym etapie.

    Aby ponownie zablokować konto root, musisz cofnąć zmiany w ustawieniach lightdm, a także zablokować konto root za pomocą polecenia w terminalu:

    sudo passwd -l root

    Konfigurowanie sudo i uprawnień do wykonywania różnych poleceń

    Sudo pozwala zezwolić lub zabronić użytkownikom wykonywania określonego zestawu programów. Wszystkie ustawienia związane z prawami dostępu są przechowywane w pliku /etc/sudoers. To nie jest zwykły plik. Aby to edytować niezbędny(ze względów bezpieczeństwa) użyj polecenia

    sudo visudo

    Domyślnie jest napisane, że wszyscy członkowie grupy Admin mieć pełny dostęp do Sudo , jak wskazuje linia

    %admin WSZYSTKO=(WSZYSTKO) WSZYSTKO

    Możesz przeczytać więcej o składni i opcjach dostosowywania tego pliku, uruchamiając

    Człowiek sudoers

    Jeśli popełnisz błąd podczas edycji tego pliku, całkiem możliwe, że całkowicie stracisz dostęp do funkcji administracyjnych. Jeśli tak się stanie, musisz uruchomić system Tryb odzyskiwania, a automatycznie uzyskasz uprawnienia administratora i będziesz mógł wszystko naprawić. Ponadto możesz edytować ten plik z LiveCD.

    Umożliwienie użytkownikowi wykonania polecenia bez podawania hasła

    Aby system nie pytał o hasło przy niektórych poleceniach, konieczne jest sudoers po linii # Cmnd specyfikacja aliasów dodaj linię, w której oddzielone przecinkami wypisz żądane polecenia wraz z pełną ścieżką (ścieżkę do polecenia można znaleźć uruchamiając która nazwa polecenia:

    # Specyfikacja aliasu Cmnd Cmnd_Alias ​​SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot

    I dodaj linię na końcu pliku

    Nazwa użytkownika ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS

    Uwaga! Powyższe kroki nie zmieniają potrzeby wprowadzenia polecenia sudo przed poleceniem

    Tworzenie synonimów (aliasów)

    Aby nie tylko nie wprowadzać hasła do sudo, ale także w ogóle nie wchodzić do sudo, wykonaj następujące czynności: otwórz plik .bashrc znajdujący się w twoim katalogu domowym

    nano ~/bashrc

    i dodaj linie na końcu pliku

    alias reboot ="sudo restart" alias poweroff ="sudo poweroff" alias pm-hibernate="sudo pm-hibernate" alias hibernate ="sudo pm-hibernate" alias shutdown ="sudo shutdown"

    Czas ważności wprowadzonego hasła

    Być może chcesz zmienić czas działania Sudo bez podawania hasła. Można to łatwo osiągnąć, dodając coś takiego do /etc/sudoers (visudo):

    Domyślnie: foo znacznik czasu_timeout=20

    Tutaj Sudo dla użytkownika bla ważny bez konieczności podawania hasła przez 20 minut. Jeśli chcesz, aby Sudo zawsze wymagało hasła, ustaw timestamp_timeout na 0.

    Sudo nie pyta o hasło

    Sudo bez hasła to potworna dziura w zabezpieczeniach, każdy może zrobić wszystko. Jeśli pozwoliłeś na to celowo - pilnie zwróć go tak, jak był.

    Jednak w niektórych przypadkach Sudo nagle przestaje samodzielnie pytać o hasło. Jeśli zrobisz visudo , możesz zobaczyć coś takiego jak ten wiersz, którego użytkownik najwyraźniej nie dodał:

    ALL ALL=(ALL) NOPASSWD:ALL

    Najprawdopodobniej ta katastrofalna linia została dodana podczas instalacji programu takiego jak Connect Manager z MTS lub Megafon. W takim przypadku należy go zmienić na wiersz, który pozwala tylko temu menedżerowi połączeń działać jako root, na przykład tak:

    Nazwa użytkownika ALL= NOPASSWD: /ścieżka/do/programu

    Istnieją inne rozwiązania problemu, mała dyskusja.

    Jako administrator Linuksa zawsze używałem i Sudo, I su. I Administrator systemu bardzo ważne jest, aby znać różnicę między nimi. Dla tych, którzy nie mają podstawowego zrozumienia różnicy między tymi dwoma lub zawsze są zdezorientowani, oto lista 12 pytań i odpowiedzi (pytań i odpowiedzi), które mają pomóc ci zrozumieć subtelniejsze punkty sudo i su.

    NOTATKA— Ten artykuł dotyczy tylko Ubuntu. Chociaż niektóre informacje mogą dotyczyć najpopularniejszych dystrybucji.

    sudo kontra su

    Ta seria pytań i odpowiedzi powinna wyjaśnić niektóre szczegóły sudo vs su dla wielu użytkowników Ubuntu.

    Q1. Jak używa się sudo i su? Jaka jest różnica między nimi?

    Odpowiedź.sudo służy do uruchamiania niektórych poleceń z uprawnieniami roota. Interesujące jest to, że kiedy używasz Sudo dla konkretnego polecenia system poprosi o podanie hasła bieżącego użytkownika. Po wprowadzeniu hasła komenda jest uruchamiana z uprawnieniami superużytkownika.

    Oto przykład:

    $ apt-get install skype E: Nie można otworzyć pliku blokady /var/lib/dpkg/lock - otwórz (13: Odmowa uprawnień) E: Nie można zablokować katalogu administracyjnego (/var/lib/dpkg/), czy jesteś rootem ? $ sudo apt-get install skype password for mylinuxbook: Odczyt list pakietów... Gotowe Budowanie drzewa zależności Odczyt informacji o stanie... Gotowe... ...

    Jak widać, najpierw próbowałem zainstalować Skype'a za pomocą polecenia apt-get ale mam błąd odmowy uprawnień. Następnie użyłem Sudo wraz z tym samym systemem poleceń i systemem haseł dla użytkownika mylinuxbook. Po wprowadzeniu poprawnego hasła polecenie zakończyło się pomyślnie.

    Z drugiej strony su służy do przełączania dowolnego użytkownika. Ustaw hasło odpowiedni użytkownik jest włączony. Jeśli su jest używane bez opcji, przeskakuje do konta użytkownika root. W takim przypadku system poprosi o podanie hasła superużytkownika.

    Oto przykład:

    $ su mylinuxbook Hasło: [e-mail chroniony]:~$

    W powyższym przykładzie użyłem su aby przełączyć się na konto użytkownika mylinuxbook i po wprowadzeniu hasła do mylinuxbook mogłem to zrobić.

    Oto inny przykład:

    $ su Hasło: su: Błąd uwierzytelnienia

    W powyższym przykładzie pozwałem zwykłego użytkownika do rootowania konta, ale nie mógł tego zrobić, ponieważ nie skonfigurowałem hasła roota. Dystrybucje takie jak Ubuntu nie mają domyślnie skonfigurowanych haseł roota. Po skonfigurowaniu możesz użyć tego hasła.

    Q2. Co zrobić, jeśli nie chcę ustawiać hasła administratora na moim Ubuntu, ale nadal chcę przełączyć się na superużytkownika?

    Odpowiedź. W takim przypadku możesz wypróbować polecenie „ sudo su". Oto przykład:

    $ sudo su hasło dla mylinuxbook: [e-mail chroniony]:/home/mylinuxbook#

    Po użyciu sudo do uruchomienia su system prosi o podanie hasła bieżącego użytkownika, a nie hasła superużytkownika. Zaraz po wprowadzeniu tego rachunku rachunek bieżący został przeniesiony na konto.

    Q3. Co zrobić, jeśli chcę używać su do przechodzenia do innych kont użytkowników, ale nie chcę pamiętać każdego hasła użytkownika?

    Odpowiedź. Cóż, w takim przypadku po prostu użyj polecenia su, wprowadź hasło administratora i przełącz się na konto. Stąd, używając su, możesz przełączyć się na dowolne konto użytkownika bez używania haseł.

    Q4. Jeśli Sudo jest używane do robienia czegoś z uprawnieniami administratora, to dlaczego potrzebne jest hasło bieżącego użytkownika, a nie hasło administratora?

    Odpowiedź. Cóż, tak naprawdę nie jest tak, że każdy normalny użytkownik może wykonywać sudo i uruchamiać polecenia, które wymagają uprawnień superużytkownika. Ty, jako użytkownik, musisz być Sudoer To samo. Oznacza to, że musisz mieć uprawnienia do korzystania z sudo. Jeśli jesteś ważnym sudoerem, system prosi tylko o podanie hasła, aby upewnić się, że rozumiesz, że wykonujesz pracę, która wymaga uprawnień roota, i powinieneś dokładnie sprawdzić wszystko, zanim faktycznie to zrobisz.

    Teraz pojawia się kwestia sudoers. Jak zostać użytkownikiem Sudoer? Użytkownik może zostać sudoerem, jeśli zostanie dodany do grupy sudo. Oto przykład:

    $ sudo adduser Sudo

    Po prostu zastąp rzeczywistą nazwą użytkownika konta. Zauważ, że wcześniej (przed Ubuntu 12.04) grupa musiała zostać wywołana Admin ale teraz nie jest to wymagane.

    Możesz użyć polecenia „ Grupa", aby sprawdzić wszystkie grupy, które mają tego użytkownika. Oto przykład:

    $ groups mylinuxbook mylinuxbook: mylinuxbook adm cdrom sudo dip plugdev lpadmin sambashare

    Widzisz więc, że użytkownik „ mylinuxbook" jest członkiem wszystkich tych grup, w tym grup sudo, a zatem sudoer.

    Pytanie 5. Zauważyłem, że jak tylko użyłem sudo, moje prawa roota utrzymują się przez długi czas, chociaż po chwili wszystko wraca do normy. Co to jest?

    Odpowiedź. Ubuntu zapamiętuje hasło do sudo przez około 15 minut. Oznacza to, że gdy użyjesz sudo do wykonania polecenia, system nie będzie pytał o hasło, jeśli uruchomisz inne polecenia, które wymagają uprawnień administratora. Chociaż będziesz musiał użyć „ Sudo przed każdym poleceniem.

    Q6. Jakie są zalety sudo nad su?

    Odpowiedź. Sudo ma wiele zalet w stosunku do su.

    Oto lista:

  • Sudo upewnia się, że uprawnienia istnieją dla konkretnego polecenia (lub przez określony czas), a nie dla całej sesji, ponieważ może to prowadzić do przypadkowego nadużycia uprawnień superużytkownika.
  • Możesz użyć sudo, aby ograniczyć uprawnienia użytkownika. Jest to przydatne, gdy nie chcesz, aby użytkownik miał kontrolę nad wszystkimi uprawnieniami administratora podczas uruchamiania suda.
  • Istnieje plik dziennika (auth.log), który jest utrzymywany dla każdego sudoera. Ten plik zawiera informacje o poleceniach, które zostały wykonane za pomocą sudo, czas ich wykonania. Pomaga to administratorowi śledzić nawet zaufanych użytkowników (sudoers).
  • Najważniejszą zaletą jest to, że suda wymaga własnego hasła użytkownika zamiast hasła superużytkownika, aby zalogować się do suda. Pomaga to zachować prywatność hasła roota i nie ma potrzeby jego zmiany, nawet gdy użytkownik (sudoer) odejdzie.
  • Pytanie 7. Każdy użytkownik może wykonać operacje Sudo?

    Odpowiedź. Nie, tylko zaufani użytkownicy lub użytkownicy sudo mogą wykonywać operacje sudo. Oto oficjalna strona, która opisuje, jak i co może zrobić użytkownik sudoer.

    Pytanie 8. interesuje mnie su. Jak mogę dostosować użycie su w sposób, który zapewnia podobną funkcjonalność do suda?

    Odpowiedź. Jeśli używasz su, oznacza to, że masz już skonfigurowane hasło roota. Aby osiągnąć funkcjonalność podobną do sudo, tj. aby uruchomić tylko jedno polecenie z uprawnieniami roota za pomocą su, wystarczy użyć opcji -C z polecenia su.

    Oto przykład:

    $ su -c "apt-get install skype" Hasło:

    Po prostu wprowadź hasło i tylko to polecenie będzie działać z uprawnieniami superużytkownika. Chociaż jest taki sam jak sudo, jedyną różnicą jest to, że musisz wprowadzić hasło roota zamiast hasła bieżącego użytkownika.

    Pytanie 9. Pracuję z Sudo. Jak mogę dostosować użycie sudo, aby osiągnąć taką samą funkcjonalność jak su?

    Odpowiedź. Aby uzyskać funkcjonalność su za pomocą sudo, wypróbuj tę opcję -I komendy Sudo.

    Oto przykład:

    $ sudo -i hasło do mylinuxbook: [e-mail chroniony]:~#

    Widzisz to z „ sudo -i", dokonano przejścia na konto root, chociaż hasło dla bieżącego użytkownika (w tym przypadku mylinuxbook) zostało wprowadzone.

    Pytanie 10. Hasło roota do mojego konta nie zostało jeszcze aktywowane. Czy mogę użyć sudo, aby włączyć hasło superużytkownika?

    Odpowiedź. Aby aktywować hasło dla superużytkownika, możesz użyć polecenia hasło w następujący sposób:

    $ sudo hasło root

    To polecenie wymaga uprawnień administratora, więc będziesz musiał użyć sudo.

    Pytanie 12. Czy mogę używać sudo do nadawania użytkownikom specjalnych uprawnień?

    Odpowiedź. Plik konfiguracyjny dla Sudo- /etc/sudoers. Nie można go edytować ręcznie za pomocą edytora. W tym celu zaleca się użycie polecenia wzrok.

    Oto dokładne polecenie:

    $sudo visudo

    a oto co otrzymujesz:

    To polecenie otworzy tymczasowy plik /etc/sudoers.tmp w edytorze nano do edycji. Visudo dba o to, aby podczas edycji wielu wystąpień tego samego pliku nie dochodziło do konfliktów.

    Aby zrozumieć, jak nadawać ograniczone prawa, zapoznaj się z projektem tego pliku konfiguracyjnego .

    Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl + Enter
    UDZIAŁ: