Tajniki pliku sudoers

Jeśli używasz bądź używałeś Ubuntu, z pewnością wiesz, że w tym systemie konto root, czyli odpowiednik administratora ze znanego nam systemu z Redmond, jest domyślnie pozbawione hasła, przez co staje się bezużyteczne. W standardowych instalacjach Ubuntu musisz używać komendy sudo aby wykonywać operacje z prawami roota. Używanie sudo jest dobrym i ułatwiającym pracę sposobem na proste przyznawanie naszemu użytkownikowi praw roota.

Dwie z największych zalet, wynikających z używania sudo, to :

  • Restrykcyjne uprawnienia
  • Ślad czynności wykonywanych przez użytkownika zapisany w logach systemu

Zanim jednak zaczniemy używać sudo, musimy skonfigurować sobie plik z ustawieniami. Znajduje się on w katalogu /etc/sudoers

UWAGA. Jeżeli nie jesteś pewien, nie edytuj bezpośrednio tego pliku ręcznie, ani za pomocą żadnego edytora!!!

W terminalu wpisz: visudo

Zobaczysz plik wyglądający mniej więcej podobnie:


# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
# 

Defaults        env_reset 

# Host alias specification 

# User alias specification 

# Cmnd alias specification 

# User privilege specification
root    ALL=(ALL) ALL

Jak widzicie, jest tu podstawowa linia

root    ALL=(ALL) ALL

Zapis ten oznacza, że użytkownik root może wykonywać czynności z każdego terminala, zachowywać się jak każdy użytkownik oraz uruchamiać wszystkie komendy.

A więc pierwsza część to użytkownik, druga to terminal z którego użytkownik może używać sudo, trzecia oznacza którego użytkownika może naśladować, ostatnia wskazuje jakie komendy może wykonywać.

Zobaczmy inne przykłady.

operator ALL= /sbin/poweroff

Oznacza to, że użytkownik operator może wykonać z każdego terminala komendę poweroff i wyłączyć komputer.

Możemy również tworzyć aliasy:

  • dla np. użytkowników: users -> User_Alias
  • wykonywać komendy jak inni użytkownicy: Runas_Alias, host -> Host_Alias, komenda -> Cmnd_Alias

Kolejne przykłady:

User_Alias OPERATORS = joe, mike, jude
Runas_Alias OP = root, operator
Host_Alias OFNET = 10.1.2.0/255.255.255.0
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm

Jak widzimy, alias OPERATORS zawiera użytkowników JOE, MIKE i JUDE, alias OP zawiera użytkowników ROOT i OPERATOR, alias OFNET zawiera sieć adresów, z których można używać sudo. Alias komendy PRINTING zawiera polecenia lpc i lprm służące do drukowania.

A więc typowy plik sudoers wygląda tak:


User_Alias     OPERATORS = joe, mike, jude
Runas_Alias    OP = root, operator
Host_Alias     OFNET = 10.1.2.0/255.255.255.0
Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm 

# użytkownicy grupy OPERATORS mogą wykonywać każde polecenie z każdego
 terminala 

OPERATORS ALL=ALL 

# użytkownik linus może wykonywać każde polecenie z każdego terminala
jako każdy użytkownik z grupy OP ( root bądź operator )  

linus ALL=(OP) ALL 

# użytkownik user2 może uruchamiać każde polecenie z każdej maszyny
w sieci OFNET jako każdy użytkownik  

user2 OFNET=(ALL) ALL 

# użytkownik user3 może uruchamiać polecenia lpc i lprm z każdej maszyny 

user3 ALL= PRINTING 

# użytkownik go2linux może uruchamiać każde polecenie z każdej maszyny
zachowując się jak każdy inny użytkownik
(podobnie jak domyślna konfiguracja w UBUNTU) 

go2linux ALL=(ALL) ALL

Ten artykuł to tylko wprowadzenie do podstowych pojęć związanych z sudo. Więcej informacji i pomocy znaleźć możecie w manualu, a także w opublikowanym rok temu na łamach jakilinux.org artykułu Praca z sudo autorstwa largo3.

Tłumaczenie artykułu: Sudoers file, Autor: ggarro, tłumaczył: buber, korekta: oZz

Komentarze (RSS)
Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.

47 komentarzy

  1. Viking 29 stycznia 2008 o godz. 4:19 #

    Przydatny programik.Używam go w systemach poza Ubuntu,które nie używają go domyślnie (Debian,OpenSuSE,OpenBSD …) i sprawdza się dobrze.

    Polecam!

    • atavus 29 stycznia 2008 o godz. 11:03 #

      debian uzywa go 'prawie' domyslnie /jest mozliwosc 'wlaczenia' uzywania sudo podczas instalacji debiana/

      • Yarpen 31 stycznia 2008 o godz. 1:25 #

        Nie kojarzę :) . Przy maksymalnie standardowej instalacji z mini-ISO nie spotkałem się z taką opcją (Debian Etch).

    • era32 30 stycznia 2008 o godz. 17:39 #

      Mam openSUSE i korzystam z sudo domyślnie. Więc co mi tu pleciesz za bzdury?

  2. nat 29 stycznia 2008 o godz. 9:26 #

    tak, trzeba znac troszke vi, albo glosno

    krzyczec… i co chwila czytac man sudoers : )

  3. d6 29 stycznia 2008 o godz. 10:39 #

    Nie rozumiem o co chodzi z tym całym Sudo (byłbym wdzięczny, jak by ktoś potrafił mi to wytłumaczyć).

    <code> Dwie z największych zalet, wynikających z używania sudo, to :

    Restrykcyjne uprawnienia

    Ślad czynności wykonywanych przez użytkownika zapisany w logach systemu </code>.

    Jeśli korzystam z systemu sam (desktop) to widze tylko wady (przed każdym poleceniem sudo…). Wygodniej jest otworzyć terminal, zalogować sie na konto root i zrobic to co jest do zrobienia… Jedyny sens widzę tam, gdzie jest wielu użytkowników i część z nich mogłaby mieć nadane uprawnienia do obsługi sudo, ale na typowym desktopie?

    • michuk 29 stycznia 2008 o godz. 11:42 #

      @db: imho wygoda sudo i su jest podobna, w sudo hasło też wpisujesz raz, potem przez zdefiniowany czas system pamięta że masz uprawnienia. Jeśli potrzebujesz wykonać więcej operacji, zawsze możesz wpisać <code>sudo su</code> i przejść na tradycyjne konto roota.

    • pdemb 31 stycznia 2008 o godz. 15:27 #

      Wygodniej jest otworzyć terminal, zalogować sie na konto root i zrobic to co jest do zrobienia…

      sudo xterm

    • Pan Zmaza 31 stycznia 2008 o godz. 23:14 #

      Ja w sumie też nie za bardzo widzę sensu korzystania z sudo. Działam na koncie użytkownika, ale zawsze obok mam uruchomioną konsolę z prawami roota (su -) do czynności administracyjnych. Mniejsza komplikacja, efekt bardzo zbliżony. No ale dobrze, ze jest wybór. Jeden woli używać jednego rozwiązania, inny drugiego.

      • Pan Zmaza 31 stycznia 2008 o godz. 23:18 #

        A użytkownik, o ile nie jest to użytkownik domowy, powinien mieć uprawnienia jak najmniejsze, najlepiej żadne, by nie truł życia adminowi :)

  4. que_pasa 29 stycznia 2008 o godz. 11:57 #

    Sudo jest fajne, ale w mojej opini źle skonfigurowane stanowi ogromne zagrożenie dla systemu. Typowa konfiguracja użytkowników ubuntu tak żeby było wygodniej pocszątkującym (bez urazy):

    user ALL=(ALL) ALLNOPASSWD:

    teraz wystarczy wykorzystać tego typu lukę:
    http://www.slackware.pl/artykul/2007/11/12/w_stra…
    i wykonac proste polecenie rm -rf /

    Tak łatwo to nawet w win nie jest. Używac sudo – tak ale z głową, do tego czego potrzebujemy (wyłączanie kompa, montowanie napędów itd) ale nie do administracji systemem.

    • abc 30 stycznia 2008 o godz. 2:21 #

      Domyślnie jest bez NOPASSWD, za to system "trzyma" hasło przez ok. kwadrans. W Debianie sprawa wygląda dużo lepiej (kiedy nie podajemy hasła wyskakuje informacja o tym, że jakiś program używa większych uprawnień, coś jak UAC), ale najwygodniejsze to to nie jest. Tak jak jest w Ubuntu domyślnie taki jest chyba najlepszy kompromis między bezpieczeństwem, a wygodą

  5. el_es 29 stycznia 2008 o godz. 12:50 #

    Na 7.10 Server, musialem wpisac 'sudo visudo'

    • que_pasa 29 stycznia 2008 o godz. 12:59 #

      ech, dziwne. że plik konfiguracyjny tego programu można edytować tylko jako root ;) ;) a właśnie wspominałem wcześniej o ubuntu…

      • Xinill 29 stycznia 2008 o godz. 17:40 #

        Huh? Gdyby mógł go edytować każdy user, mógłby sobie nadać uprawnienia roota i wpisać "rm -rf /", lub też inny syf zainstalować (patrz 2 komcie wyżej). :)

  6. que_pasa 29 stycznia 2008 o godz. 18:34 #

    Jednym słowem bezpieczeństwo użycia sudo w wykonaniu ubuntu o kant d*** można potłuc. Ciekawe ilu teraz się ze mną nie zgodzi ;)

    • Wirus 29 stycznia 2008 o godz. 20:05 #

      W domyślnej konfiguracji Ubuntu musisz podawać swoje hasło przed wykonaniem polecenia sudo. Tylko w wersji LiveCD hasło nie jest wymagane. A więc o kant d*** to swoje informacje możesz potłuc.

      • ak47 29 stycznia 2008 o godz. 20:35 #

        ale jak chcesz puścić fsck po awari i się standardowo ext wysypie to bez znajomości hasła roota to całe sudo można sobie o kant d*** potłuc

    • vytah 30 stycznia 2008 o godz. 11:35 #

      Napisałem banalnego trojanika, który "przesłania" sudo i wykorzystuje tak nabyte prawa do czegokolwiek. I to bez wykorzystywania jakichkolwiek luk. Plik .desktop i zmienna PATH, chyba nie muszę więcej tłumaczyć ;)

      • que_pasa 30 stycznia 2008 o godz. 14:24 #

        Niektórzy i tak Ci nie uwierzą, w końcu Canonical wszędzie wypisuje że sudo jest bezpieczne w ich wydaniu i nie należy korzystać z konta root, nawet można sie natknąć na informację na forach że w ubuntu nie ma konta root. Niestety ten stek bzdur wielu użytkowników łóbóntó łyka niemiłosiernie, tylko czekać aż bomba wybuchnie. Zegar już odlicza. :)

        • era32 30 stycznia 2008 o godz. 17:43 #

          Jest konto root – co oni – nie zaglądali do Menedżara Użytkowników – czy co?

      • Silmethule 1 lutego 2008 o godz. 18:30 #

        Zgrybsza to samo można zrobić z su i każdym innym poleceniem, nie? Po prostu żaden, ŻADEN system nie będzie bezpieczny, gdy mamy, za przeproszeniem, użytkownika (a co gorsza admina) idiotę ;).

        I to wcale nie jest wina sudo.

      • perlic2 6 lutego 2008 o godz. 16:31 #

        Co rozumiesz przez "przesłania sudo"? Po odpaleniu tego trojanika (konkretnie banalnego skryptu) nie trzeba podać hasła administratora? Jeśli ktoś otworzy plik pdf (zakładając, że jakimś cudem spreparowałbyś ten plik tak, aby wykorzystał lukę w xpdf), a xpdf poprosi o hasło to wyda się to każdemu co najmniej dziwne. Jeśli jednak istnieje zagrożenie to powinieneś poinformować choćby Canonical.

        …na razie nie napisałem kodu do rozmnażania, ale to się może zmienić

        Wierz mi, nie masz się czym chwalić. Działasz na szkodę Linuksowi i innym systemom do niego podobnym. Jeśli byłoby inaczej to nie publikowałbyś kodu tego "trojana" na swoim blogu.

    • nat 31 stycznia 2008 o godz. 20:35 #

      ja sie zgadzam.

  7. crack211 29 stycznia 2008 o godz. 21:13 #

    witam

    kilka uwag:

    "W standardowych instalacjach Ubuntu musisz używać komendy sudo aby wykonywać operacje z prawami root-a." – nie do konca tak jest…

    mozna skonfigurowac sobie konto roota,

    dla KDE:

    rozwin menu->System->User and groups-> wybieramy usera 'root' i klikamy na 'properteies', ustawiamy haslo i od tej pory w konsoli wystarczy zalogowac sie na root's ?> su

    od tej pory mamy wszelkie uprawnienia bez koniecznosci wpisywania kazdorazowo 'sudo'.

    co wiecej mozna tak skonfigurowac sudo tak aby nie koniecznym bylo podowanie hasla, lub calkowicie pominiecie wpisywania sudo, nie bede sie rozpisywal gdyz duzo na ten temat mozna znalezc na google.pl :)

    pozdrawiam

    • miauk22 1 lutego 2008 o godz. 18:18 #

      Z tego co sam się bawiłem na Ubuntu to zauważyłem, że przynajmniej na ustawieniach standardowych można wpisać sudo su i mamy normalnie uprawnienia admina. Więc po co wtedy sudo, o którym często się zapomina?

  8. que_pasa 30 stycznia 2008 o godz. 0:53 #

    @Wirus

    spójrz na lukę w xpdf do której link podałem i wyobraź sobie że odpalenie keyloggera przy wykorzystaniu tej luki nie stanowi wielkiego problemu, dwie linijki do .bashrc i uruchamia nam się za każdym razem przy logowaniu…. a jak keylogger przechwyci hasło to: sudo rm -rf / . Do tego wystarczą proste skrypty w….. bash'u.

    To najprostsza metoda na początkujacych: mail z załącznikiem a hasło samo leci. Pamiętam jak znajomym wysyłałem prezentacje .ppt żeby mieć ich hasła do poczty i gg. Za hakera jełopy mnie uważali zanim im pokazałem jakie to proste.

    • crack211 30 stycznia 2008 o godz. 8:09 #

      bardzo smieszne …

      widze ze ktos tu komus zle zyczy …

      sudo rm -rf / ? radze nie robic nikomu… a posty tej osoby usunac !!!!!!

      • que_pasa 30 stycznia 2008 o godz. 9:48 #

        No pewnie, bo lepiej ukrywać problem niż o nim mówić. Niektórych chyba boli to, że przy mało myślącym użytkoniku linuks/uniks wcale nie jest bezpieczniejszy od windows. Wogóle nie dopuszczają myśli, żę wraz ze wzrostem popularności systemu konie trojańskie i wirusy zaczną powstawać. Chyba lepiej zabezpieczyć się za wczasu i nauczyc czegoś więcej. No chyba że negujecie możliwość wykorzystania luk podobnych do tych w xpdf do ataku na konto użytkonika i przechwycenia jego hasła?

        Użytkownikom ubuntu proponuję zajrzeć na stronę autora sudo i zobaczyć co on sądzi na temat wykorzystywania tego programu w taki sposób jak w ubuntu i jego pochodnych.

        @crack211

        a posty tej osoby usunac !!!!!!

        krzyk rozpaczy, czyżby brak argumentów?

        • pdemb 31 stycznia 2008 o godz. 15:32 #

          No pewnie, bo lepiej ukrywać problem niż o nim mówić.

          Nope, chodzi o to, że mamy już prawo, które zabrania.

      • pdemb 31 stycznia 2008 o godz. 15:31 #

        art. 269b kk :)

  9. Pingback: Jarek :)) » Blog Archive » Tajniki pliku sudoers

  10. Quadri 31 stycznia 2008 o godz. 2:11 #

    Używanie su jest bardziej przejrzyste i wg mnie bezpieczniejsze przede wszystkim dla początkujących użytkowników (i nie tylko) i nie widzę za bardzo żadnego ułatwienia tutaj… Poza tym su to o dwie literki mniej niż sudo więc mniej roboty przy nim :P

    Mi osobiście więc przejrzystość bezpieczeństwo i połowę mniej pisania, więcej daje w codziennym użytkowaniu niż:

    * Restrykcyjne uprawnienia

    * Ślad czynności wykonywanych przez użytkownika zapisany w logach systemu

    Najważniejsze, że każdy ma wybór według swoich upodobań :)

    • ak47 31 stycznia 2008 o godz. 4:08 #

      Widzę że kolega nie rozróżnia komed sudo i su. Polecenie su pozwala na zmianę uzytkownika/loginu na inny niż ten na którego zalogowaliśmy się w terminalu. sudo natomiast pozwala na uruchamianie komend z prawami roota z konta użytkownika nieuprzywilejowanego.

      Co do zastosowań jeśli mamy serwer gdzie mamy kilku adminów to sudo jest zbawieniem każdy ma własne hasło i nie ma sprawy. Sprawa jest jeszcze fajniejsza jak ci admini mają różne przywileje i zakres obowiązków. A już jak programiści co jakiś czas sobie muszą jbossa czy apacha resetnąć to już bajka.

      Natomiast nie widzę żadnego zastosowania sudo w sytemach biurkowych co więcej uczenie ludzi żeby uzywać sudo bez hasła to szczyt głupoty i braku wyobraźni. Przecie ms explorer jest wtedy bezpieczniejszy niż taki system.

      Kolega coś wyżej wspominał o przesłonieniu komendy sudo w ten sposób jak opisał mozna i ls przesłonić wystarczy zmienić path usera to żadna nowość. Dlatego uzywajcie "su -" nadpisze to zmienne srodowiskowe i nie będziecie mieli niespodzienek że ktoś wam cos wrzucił.

      Co do samego sudo najczęściej uruchamiana przez mnie "wiązanka" "sudo su -" reszte robie na roocie.

      • Quadri 1 lutego 2008 o godz. 16:35 #

        No tak :) tylko, że to były takie moje infantylne osobiste rozważania z poziomu zwykłego użytkownika systemu na biurko. Z sudo korzystałem jak miałem Kubuntu a np. Ubuntowe systemy z założenia są systemami desktopowymi, które uznają "sudo" za lepsze rozwiązanie dla początkującego biurkowego użytkownika Linuksa…

        Oczywiście sudo nie jest pozbawione hasła lecz żeby było bardziej przejrzyście i bezpiecznie, na konto roota logujesz się hasłem użytkownika :) Wygoda, ułatwienia i przejrzystość takiego rozwiązania dla szarego nieświadomego użytkownika w tym przypadku jest żadna lub wręcz jest to gorsze rozwiązanie niż czytelne oddzielne konto root'a z własnym hasłem i logowaniem się poprzez su na konto zamiast sudo przed każdą komendą…

        Ja tam się nie znam za bardzo, ale wydaje mi się, że napisanie skryptu proszącego o hasło użytkownika a potem zawierającego sudo i różne bardzo ciekawe komendy za nim to chwila, natomiast szary nieświadomy użytkownik przecież nie widzi różnicy między kontem użytkownika i administratora w takim przypadku… Loguje się przecież na konto użytkownika podając jego hasło czyż nie? Ale już nie będę smucił…

        Ty jak widzę podchodzisz do sprawy bardziej profesjonalnie i bardzo dobrze, bo wyjaśniłeś wiele rzeczy i Twój komentarz jest bardzo cenny. Jedyny wniosek jaki się nasuwa to taki, że każdy powinien używać świadomie i odpowiedzialnie sudo oraz konta administratora, tym bardziej jeżeli ktoś zmuszony jest przez twórców systemu by logować się na nie hasłem użytkownika… No i nie należy iść na łatwiznę i robić bypassu bez hasła na konto roota poprzez sudo.. Wielu początkujących Ubuntowców przykładowo narzeka na to, że ciągle muszą podawać hasło "Bo w Windowsie tak nie było"… Pozdrawiam :)

  11. Odbyt 31 stycznia 2008 o godz. 17:52 #

    "konto root, czyli odpowiednik administratora ze znanego nam systemu z Redmond" nie no pęknę zaraz :D

    • Quadri 1 lutego 2008 o godz. 16:39 #

      Nom, faktycznie :)

      Tyle że lepiej nie pękaj chyba… Bo jak Odbyt pęknie to zwykle raczej nieciekawie jest :D

  12. que_pasa 1 lutego 2008 o godz. 20:26 #

    Tak żeby nie byc gołosłownym podam przykład jak ja wykorzystuje u siebie sudo na desktopie:

    "artur localhost = NOPASSWD: /sbin/reboot

    artur localhost = NOPASSWD: /sbin/shutdown

    artur localhost = NOPASSWD: /sbin/mount

    artur localhost = NOPASSWD: /sbin/umount

    artur localhost = NOPASSWD: /sbin/kldload

    artur localhost = NOPASSWD: /sbin/kldunload

    artur localhost = NOPASSWD: /usr/local/bin/graveman

    artur localhost = NOPASSWD: /usr/local/etc/rc.d/lighttpd"

    Podczas normalnej pracy potrzebny jest mi tylko dostęp do powyższych programów. w 99% wypadków są one wystaczające. W tak skonfigurowanym sudo nie ma możliwości zalogowania się na roota przez wpisanie sudo su, nie ma też możliwości uruchomienia jakiegokolwiek edytora tekstu z uprawnieniami roota. Pełne ścieżki dostępu do programów równieś są wpisane z powodu którego tłumaczyć chyba nie muszę. Jak zauważyliście wyłączone jest żądanie podania hasła. Czemu? Z prostego powodu: jesli przez przypadek pojawi się u mnie keygen to stanie się on bezużyteczny. Użytkownik z którego na codzień korzystam nie należy równieź do grupy wheel, więc nie loguje się z niego na roota. Jeśli potrzebuje programu to loguje się na roota używając TYLKO konsoli. Zresztą wszystkie potrzebne mi programy zainstalowałem sobie wcześniej i podczas pracy możliwość instalacji programów jest mi nie potrzebna. Podobnie jest z konfiguracją systemu. Niektórym może to się wydać upierdliwe (głównie użytkownikom ubuntu) ale takie są wymogi bezpieczeństwa.

  13. Pingback: Czy `sudo` jest dobre? | Mescam's Blog

  14. taa 25 maja 2009 o godz. 1:15 #

    Panowie, widze ze rozwazacie o su i sudo i piszecie ze szybciej i prosciej jest su. Alez oczywiscie, rozumie takze ze kazdemu uzytkownikowi dajecie haslo roota jak potrzebuje wiekszych uprawnien?

    - Ale tylko ja uzywam kont na swojej instancji

    No dobra ale ucz sie dobrych nawykow. Po to stworzyles swoje konto oprocz swojego roota zeby twoje zwalone programy nie narobily szkod z id=0. Podstawowa roznica jest taka ze do su podajesz haslo roota a do sudo haslo usera.

    Sudo jest dla userow ktorym przyznajesz mozliwosc w scisle okreslonych warunkach wykonac cos na prawach root nie dajac im hasla na roota.

    Pozdrawiam

(wymagane)
URI
Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

Literówki najlepiej zgłaszać jabberem: michuk@jakilinux.org lub kocio@jabber.org!

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="jaklinux.org">Linux dla każdego</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <del>tekst przekreślony</del>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.