Pokreni kao root. Korištenje sudo u Ubuntu za početnike

03.05.2023

Naredba sudo je vrlo važna za upravljanje pravima pristupa operativni sistem Linux. Zahvaljujući ovoj maloj komandi, drugim korisnicima možete dati dozvole za obavljanje određenih radnji u ime administratora, a da im ne date samu lozinku superkorisnika. Takođe, ne morate uvijek sjediti ispod račun superkorisnik da povremeno obavlja administrativne radnje.

Čini se da je tako mali tim, sa minimumom mogućnosti i najjednostavnijom mogućom upotrebom, a zapravo može mnogo više. U ovom članku ćemo pogledati kako je sudo konfiguriran u Linuxu za kontrolu pristupa sistemskim funkcijama i korisničkim mogućnostima.

Prije nego što pređemo na podešavanje pristupa sudo uslužnom programu, pogledajmo kako on funkcionira. Postoje dva načina da dobijete administratorska prava u Linuxu. Možete se prebaciti na root korisnika pomoću naredbe su ili možete proslijediti parametar prava komanda sudo uslužni program, koji će ga izvršiti s administratorskim pravima. Štaviše, druga metoda je poželjnija, jer nećete zaboraviti šta koristite i nećete učiniti ništa nepotrebno.

Ime tima znači zamjenski korisnik do ili super korisnik radi. Uslužni program vam omogućava da pokrenete programe kao drugi korisnik, ali najčešće kao root korisnik. Uslužni program su razvili još 1980. godine Bob Cogshell i Cliff Spencer. Tokom ovog vremena, mnogi programeri su se promijenili i dodane su mnoge funkcije.

sudo radi zahvaljujući SUID pristupnoj zastavici. Ako je ova zastavica postavljena za program, onda se ne izvršava u ime korisnika koji ga je pokrenuo, već u ime vlasnika, s obzirom da je datoteka u vlasništvu sudo, tada se uslužni program izvršava kao root. Zatim čita svoja podešavanja, traži korisničku lozinku i odlučuje da li se korisniku može dozvoliti da izvodi komande kao administrator. Ako je odgovor da, onda se naredba proslijeđena u parametru izvršava.

Sada kada znate teoriju, pogledajmo kako postaviti sudo na Linux.

Postavljanje sudo na Linux

Sve sudo postavke se nalaze u datoteci /etc/sudores. Ovdje možete konfigurirati puno parametara, počevši od toga kome će biti dozvoljeno da izvršava komande u ime superkorisnika i završavajući ograničavanjem skupa dostupnih komandi.

Da otvorite datoteku za uređivanje, upišite sljedeću naredbu kao superkorisnik:

Također možete odrediti uređivač teksta u kojem želite urediti konfiguracijski fajl:

EDITOR=nano visudo

Zatim ćemo pogledati najzanimljivije postavke koje možete postaviti u ovoj datoteci. Ali prvo, pogledajmo osnovnu sintaksu datoteke. Sastoji se od dvije vrste stringova, to su aliasi koji vam omogućavaju da kreirate liste korisnika i zastavica, kao i sama pravila koja određuju kako će se sudo naredba ponašati. Sintaksa alijasa izgleda ovako:

ukucajte alias_name = element1, element2, element3

Tip specificira koji tip Alice treba kreirati, ime je ime koje će se koristiti, a lista elemenata specificira elemente koji će se podrazumijevati kada se poziva na ovo ime.

Opis korisničkih dozvola ima malo drugačiju sintaksu:

korisnički host = (drugi_korisnik:grupa) timovi

Korisnik specificira korisnika ili grupu za koju kreiramo pravilo, host je kompjuter za koji će se ovo pravilo primjenjivati. Drugi korisnik - pod krinkom kojeg korisnika prvi može izvršavati komande, a zadnji može izvršavati dozvoljene komande. Umjesto bilo kojeg od parametara može se koristiti pseudonim. A sada postavljanje sudo u Debian i druge distribucije.

Osnovni parametri

Alias ​​Defaults vam omogućava da navedete standardni parametri da bi uslužni program funkcionisao, razmotrićemo ih u ovom odeljku. Takav alias počinje riječju Defaults, nakon čega slijedi naziv zastave. Ako se ispred imena nalazi simbol, to znači da zastavicu treba uključiti u suprotnom, isključite je:

Onemogućite uvod kada ga prvi put koristite:

Defaults!lecture

Superkorisnik ne može učiniti sudo:

Zadano !root_sudo

Sada ako pokušate pokrenuti sudo sudo ništa neće raditi:

Promijenite početni direktorij za ciljnog korisnika, ostavljajući folder trenutnog korisnika kao početni direktorij prema zadanim postavkama:

Zadane postavke set_home

Sačuvajte listu grupa trenutnog korisnika:

Zadane postavke !preserve_groups

Zatražite lozinku superkorisnika umjesto korisničke lozinke:

Postavite broj pokušaja lozinke prije nego što se sudo zatvori, zadana vrijednost je 3:

Zadane postavke passwd_tries=5

Broj minuta koji će proći prije nego što sudo ponovo zatraži lozinku je 5 prema zadanim postavkama. Ako postavite vrijednost na 0, uvijek će tražiti lozinku, bez obzira koliko ste dugo koristili uslužni program:

Zadana vrijednost timestamp_timeout=10

Sljedeći parametar specificira broj minuta u kojima će sudo čekati da se lozinka ponovo unese ako je unesena pogrešno:

Zadano passwd_timeout=10

Možete promijeniti poruku koja se prikazuje kada se od vas zatraži lozinka:

Defaults passprompt="Vaša lozinka:"

Za ovu upotrebu možete odrediti drugog korisnika, a ne root, od kojeg će se izvršavati sve naredbe:

Zadane postavke runas_default="korisnik"

Možete prijaviti sve pokušaje povezivanja na sudo:

Zadano logfile=/var/log/sudo

Zatim pokušavamo provjeriti rad dnevnika:

sudo cat /var/log/sudo

Ovo su sve najzanimljivije sudo postavke koje vam mogu zatrebati, a zatim ćemo pogledati kako postaviti sudo prava pristupa za korisnike.

Postavljanje sudo korisnika

Već smo raspravljali o sintaksi za podešavanje radnji za korisnike ovdje je sve složenije nego kod pseudonima, ali to možete shvatiti. Na primjer, dozvolimo bilo kojem korisniku da koristi sudo, s bilo kojeg hosta, i da izvrši bilo koju naredbu:

SVE SVE = (SVE) SVE

Takav tim je vrlo nesiguran, dozvoljava svima i svemu. Prvo SVE omogućava svim korisnicima, drugo SVE je za sve hostove, treće SVE dozvoljava prijavu kao bilo koji korisnik, a četvrto dozvoljava izvršavanje bilo koje komande. Ali druga konstrukcija se koristi mnogo češće:

%točak SVE = (SVE) SVE

Znači isto kao i prethodni, samo što ovdje ne dozvoljavamo svim korisnicima da koriste sudo, već samo onima koji su članovi grupe kotača.

%wheel ALL = (root) SVE

Ovdje smo već ograničili mogući izbor korisnika samo na root korisnika. Također možete odrediti korisničku grupu u ime koje on može izvršavati naredbe:

%wheel SVE = (root:admins) SVE

To znači da naredbu možete pokrenuti kao root ili drugi korisnik iz grupe administratora. Također možemo odrediti naredbe koje korisnik može izvršiti. na primjer:

%wheel ALL = (root) /bin/mount, /bin/umount

Korisnik može pokrenuti naredbe mount i umount samo kao superkorisnik. Sada da to učinimo još zanimljivijim, korisnik može izvršiti mount i umount bez lozinke, a sve ostale naredbe sa lozinkom:

%wheel ALL = (root) SVE
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount

Također možete ograničiti korisnike po hostu, na primjer, dozvoljavamo korištenje sudo samo sa host1:

%wheel host1 = (root) SVE

Ostaje razmotriti kako koristiti pseudonime. Aliasi mogu biti sljedećih tipova:

  • User_Alias- alias korisnika koji će koristiti sudo;
  • Runas_Alias- alias korisnika u čije ime će se izvršavati komande;
  • Host_Alias- alias hosta;
  • Cmnd_Alias- pseudonim komande;

Na primjer, napravimo četiri pseudonima i koristimo ih u našem pravilu:

User_Alias ​​Korisnici = korisnik1,user2,user3
Runas_Alias ​​Admins = root,admin
Host_Alias ​​Hosts = host1,host2
Cmd_Alias ​​Cmds = /bin/mount,/bin/umount

Korisnici Hostovi = (Administratori) Cmds

To znači da će korisnici sa liste korisnika moći da izvrše Cmds komande u ime Amdins korisnika na hostovima.

Ostalo je još nekoliko riječi za reći o zastavama. Oznaka NOPASSWD vam govori da ne tražite lozinku prilikom izvršavanja ovog pravila. Na primjer, da biste omogućili svim korisnicima da pokrenu naredbu mount sa sudo bez lozinke:

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

Također možete spriječiti da se ova određena naredba uopće izvrši koristeći NOEXEC zastavu:

SVE SVE = (root) NOEXEC /bin/mount

Možete provjeriti da li je datoteka /etc/sudores ispravno konfigurirana i vidjeti sva kreirana pravila koristeći naredbu:

Ovdje su prikazane sve instalirane zastavice i postavke, kao i dozvole ovog korisnika.

Zaključci

U ovom članku smo pogledali kako konfigurirati sudo u Linuxu. Kao što vidite, uprkos činjenici da je ovo vrlo jednostavan uslužni program, on skriva mnogo korisnih postavki koje možete koristiti na svom sistemu. Ako imate pitanja, pitajte u komentarima!

Malo o samom sudou, sa Wikipedije. sudo(engleski) superuser do , doslovno „nastupiti u ime superuser") je program dizajniran da pomogne sistem administrator i omogućava vam da delegirate određene privilegovane resurse korisnicima uz održavanje dnevnika rada. Osnovna ideja je da se korisnicima da što manje prava, ali istovremeno tačno onoliko koliko je potrebno za rješavanje postavljenih zadataka.

Naredba sudo omogućava korisnicima da pokreću naredbe kao root ili drugi korisnici. Pravila koja sudo koristi da odluči da li da odobri pristup nalaze se u datoteci /etc/sudoers; Jezik njihovog pisanja i primjeri upotrebe su detaljno opisani u sudoers(5).

Da biste uredili /etc/sudoers datoteku, trebali biste koristiti program visudo, koji provjerava sintaksu i na taj način izbjegava greške u pravilima.

U većini slučajeva, pravilna konfiguracija sudoa čini pokretanje kao superkorisnik nepotrebnim.

Podrazumevano, root nalog u Ubuntu-u je onemogućen i root jednostavno nema lozinku. Svi administrativni zadaci se izvode putem sudo. Podrazumevano, pravo na izvršavanje sudo je dodijeljeno prvom korisniku kreiranom tokom instalacije. Svi ostali su standardni korisnici.

Sudo je vrlo fleksibilan alat koji vam omogućava da konfigurirate prava za obavljanje administrativnih radnji za svakog korisnika posebno. Na primer, dozvolite jednom da ponovo pokrene server, a drugom dajte mogućnost da promeni prava pristupa datotekama i fasciklama. Otvorite datoteku /etc/sudoers. To se može učiniti bilo izdavanjem naredbe za otvaranje datoteke u omiljenom uređivač teksta, na primjer ovako:

# nano /etc/sudoers

ili pomoću uslužnog programa visudo:
# visudo

Potonji metod će otvoriti datoteku /etc/sudoers u korisničkom zadanom uređivaču, ili ako nije naveden, onda u vi editoru. Prednost ovu metodu je da će prilikom spremanja datoteke biti provjerena usklađenost sa sintaksom.

Najjednostavnija konfiguracija izgleda ovako:

Zadane postavke env_reset

#Specifikacija privilegije korisnika
root SVE=(SVE) SVE
korisnik SVE=(SVE) SVE

Ova konfiguracija daje korisniku sva prava root korisnika kada izvodi naredbu sudo. Zadane postavke env_reset potpuno onemogućava sve korisničke varijable prilikom izvršavanja naredbi kao root. Ovo je dobro sa sigurnosne tačke gledišta, ali ponekad stvara probleme. Možete dozvoliti korištenje privatnih varijabli od strane grupe ili pojedinca dodavanjem ove linije:
Zadano:%admin !env_reset

koji će sačuvati varijable okruženja za sve korisnike admin grupe, ili:
Zadano: korisnik env_keep=TZ

koji će sačuvati TZ varijablu za korisnika korisnika.

Ako serverom upravlja grupa ljudi, onda ima smisla učiniti ovo:
%admin SVE=(SVE) SVE

Kao što možete pretpostaviti, ovaj unos daje root pristup svim članovima admin grupe.

Možete konfigurirati svakog određenog korisnika da ima pristup samo određenim naredbama. na primjer:
korisnik SVE = /bin/mount, /bin/kill

će dati korisniku prava da izvrši mount i kill komande sa bilo koje mašine, i:
user2 mydebiancomp = /sbin/modprobe

će korisniku2 dati dozvole za pokretanje modprobe iz mydebiancomp. Mislim da je sintaksa jasna:
korisnički host = komanda

gdje je naredba napisana sa punom putanjom. Za grupu je sve slično, samo je dodat znak “%”.

III.Napredne sudo postavke.

Vrlo je zgodno kreirati grupu aliasa prilikom postavljanja sudoa. Kako bismo izbjegli stalno ponavljanje naredbi, korisnika i hostova, možemo ih grupirati u grupe i postaviti pravila za svaku grupu alijasa. Na primjer ovako:

Cmnd_Alias ​​command_alias = command1, command2, ... // pseudonim komandi
Host_Alias ​​host_alias = hostname1, hostname2, ... // aliasi hosta
User_Alias ​​user_alias = korisnik1, korisnik2, ... // korisnički pseudonim

Moguće je i izvršavanje naredbe u ime drugog korisnika. Na primjer, sa ovim unosom:
korisnik SVE = (korisnik2, korisnik3) /usr/bin/ark

korisnik korisnik može pokrenuti naredbu ark kao user2 ili user3, koristeći tipku u, ovako:
$ sudo -u user2 ark

Podrazumevano, sudo pamti lozinke 5 minuta. Ako to ne želite, onda za svakog korisnika, grupu ili pseudonim možete postaviti zasebno pravilo, na primjer kada:
Zadano: korisnička timestamp_timeout=0

Korisnička lozinka se uopće neće pamtiti, ali ako:
Zadano: korisnička timestamp_timeout=-1

ostat će zapamćen za cijelo vrijeme rada.

Sudo bez lozinki je također moguć. Za ovo postoji sličan dizajn:
korisnik myubuntucomp = NOPASSWD: /bin/kill

što će omogućiti korisniku sa hosta myubuntucomp da koristi kill bez traženja lozinke. Umetnite vlastite vrijednosti, kao što su SVE umjesto imena hosta i naredbe, tako da korisnik nikada ne može unijeti lozinku za izvršavanje naredbi kao root s bilo kojeg hosta, ali zapamtite da to čini sistem vrlo ranjivim.

Guard

Blogovi, blogovi, blogovi. Maxim Fuckin zna mnogo o ovome.

Interaktivna karta grada Orenburga. Izrađeno korištenjem tehnologije Google mape koristeći naše vlastite razvoje. Resurs je mlad, ali već prilično zanimljiv i koristan.

Ponekad je potrebno samo pokrenuti naredbu od drugog korisnika. I postoji nekoliko načina kako se to može učiniti. O njima ću govoriti u svom članku “Pokreni komandu kao drugi korisnik u Unixu/Linuxu”.

Pokrenite naredbu kao drugi korisnik u Unixu/Linuxu - metod 1

I tako, možete koristiti SUDO uslužni program. Pogledajmo primjer:

$ sudo -H -u Vaš_drugi_korisnik -c "ping stranica"

Objašnjenja:

  • -H YOUR_HOME: Postavlja HOME (Varijabla okruženja za dom određenog korisnika) i po defaultu je root.
  • -u VAŠ_KORISNIK: Odredite korisnika od koga će se naredba izvršiti.
  • -c VAŠA_KOMANDA: Služi kao opcija za unos komande.

Tako nešto.

Pokrenite naredbu kao drugi korisnik u Unixu/Linuxu - metod 2

Možete koristiti uslužni program SU. A sada ću dati nekoliko primjera.

Prijavite se kao root korisnik

Da dobijete root, pokrenite:

$su -root

Pokrenite naredbu kao root korisnik

Evo primjera naredbe:

# su - root -c "VAŠA_KOMANDA_OVDJE"

Su - -c "VAŠA_KOMANDA_OVDJE arg1"

Izvršite naredbu od drugog korisnika koristeći su

Dakle, evo primjera:

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr Kreirano novo jezgro "test_solr_core"

Pogledajmo još jedan primjer:

$ su another_user -c "ping stranica"

$su -YOUR_USER -c "VAŠA_KOMANDA_OVDJE"

  • — — Simuliraće prijavu navedenog korisnika.
  • -c - Koristi se za određivanje naredbe koja će se izvršiti (za navedenog korisnika).

Tako nešto.

Pokrenite naredbu kao drugi korisnik u Unixu/Linuxu - metod 3

I tako, možete koristiti uslužni program runuser. Naredba runuser pokreće ljusku sa zamjenskim ID-ovima korisnika i grupe. Ova komanda je korisna samo kada ste prijavljeni kao root korisnik. Sintaksa je sljedeća:

# runuser -l YOUR_USER -c "VAŠA_KOMANDA_OVDJE"

Kao primjer, pokazat ću sljedeću liniju:

# runuser -l nginx -c "servis nginx start"

PS: Naredba runuser ne zahtijeva lozinku i treba je pokrenuti samo root korisnik.

Glavne opcije:

  • -l: Kreirajte ljusku za prijavu koristeći runuser-l PAM datoteku umjesto zadane.
  • -g: Pokazuje na glavnu grupu.
  • -G: Označava dodatnu grupu.
  • -c: Zapravo, koristi se za specificiranje naredbe.
  • –session-command=COMMAND: Proslijediti jednu naredbu ljusci sa “-c” opcijom i ne kreira novu sesiju.
  • -m: Ne resetuj varijable okruženja(ENV).

To je to, tema "Pokreni komandu kao drugi korisnik u Unixu/Linuxu" je završena.

Od davnina, mnogi su bili zbunjeni raznolikošću sigurnosnih opcija pri izvođenju operacija s maksimalnim privilegijama. Na primjer, u službenom Ubuntu dokumentacija preporučljivo je koristiti nešto poput sudo nano kao naredbu za uređivanje, te u brojnim amaterskim priručnicima (u stilu „5 trikova u komandna linija, što će iznenaditi vašu baku") da biste dobili root shell, predlaže se da napišete sudo su -. Pokušaću da objasnim zašto mi se ovakvo stanje čini pogrešnim.

Istorijski jedini na univerzalan način izvrši naredbu kao drugi korisnik u Unixu je postojao program koji se zove su. Pokrenut bez parametara, tražio je lozinku superkorisnika i, ako je uspio, jednostavno je zamijenio trenutno korisničko ime s root, ostavljajući gotovo sve varijable okruženja od starog korisnika (osim PATH, USER i još nekoliko, pogledajte man su iz vaše distribucije ). Bilo bi ispravnije pokrenuti ga kao su - u tom slučaju bi ljuska također dobila ispravno okruženje. Sa opcijom -c možete pokrenuti naredbu: su -c "vim /etc/fstab" .

U ovom slučaju, pouzdani korisnici morali su zapamtiti root lozinku, a svi korisnici navedeni u grupi "točak" (tj. u grupi čiji su članovi mogli pokrenuti naredbu su i postati superkorisnici) imali su isti neograničeni pristup cijeloj sistema, što je predstavljalo ozbiljan sigurnosni problem.

Onda se pojavila komanda sudo i to je bio proboj. Sada administrator može odrediti listu dozvoljenih komandi za svakog korisnika (ili grupu korisnika), datoteke dostupne za uređivanje, posebne varijable okruženja i još mnogo toga (sva ova ljepota se kontrolira iz /etc/sudoers, pogledajte man sudoers iz vaše distribucije) . Kada se pokrene, sudo traži od korisnika sopstvenu lozinku, a ne root lozinku. Puna ljuska se može dobiti pomoću "sudo -i"

Vrijedi ga posebno spomenuti specijalni tim sudoedit, koji bezbedno pokreće uređivač naveden u varijabla okruženja$EDITOR. Sa tradicionalnijom šemom, uređivanje datoteka je urađeno otprilike ovako:
sudo vi /etc/fstab

Lansiran na ovaj način, vi je naslijedio shell sa neograničenim pravima i putem:! korisnik je mogao pokrenuti bilo koju komandu (osim, naravno, ako se administrator o tome unaprijed pobrinuo) i otvori bilo koju datoteku.

Sudoedit provjerava može li ovaj korisnik uređivati ovaj fajl, zatim kopira navedenu datoteku u privremeni direktorij, otvara je u uređivaču (koji nasljeđuje prava korisnika, a ne root) i nakon uređivanja, ako je datoteka promijenjena, kopira je natrag uz posebne mjere opreza.

Na distribucijama baziranim na Debianu, root korisnik nema lozinku, sve administrativne radnje moraju se izvesti putem sudoa ili njegovog grafičkog ekvivalenta gksudo. Budući da je potpuna zamjena za su, sudo bi trebao biti jedina komanda za prebacivanje između korisnika, međutim, kao što je rečeno na početku, trenutno to nije slučaj i iz nekog razloga svi izmišljaju divlje sekvence sudo, su, vi i crtice.

Stoga predlažem da se svi jednom zauvjek sjete:

Nakon prvog objavljivanja ove bilješke, postavljeno mi je nekoliko pitanja. Od odgovora smo uspjeli napraviti mini-FAQ.

P: Kako mogu koristiti sudo da uradim su -c "echo 1 > /etc/privileged_file" ? sudo echo 1 /etc/privileged_file se žali na "dozvolu odbijeno"
O: Ovo se dešava zato što se samo naredba echo izvršava s povišenim pravima, a rezultat se preusmjerava na datoteku s pravima običnog korisnika. Da dodate nešto u privileged_file, trebate pokrenuti sljedeću naredbu:
$ echo 1| sudo tee -privilegirana_datoteka >/dev/null
Ili privremeno postanite root:
$ sudo -i # echo 1 > privilegirana_datoteka # izlaz $
P: sudo -i je duži od su - , ali izgleda da nema razlike između njih, zašto štampati više?
O: sudo ima nekoliko prednosti koje su vrijedne truda da unesete nekoliko dodatnih znakova:

  • prema zadanim postavkama, sudo bilježi sve aktivnosti korisnika u authpriv syslog kanalu (po pravilu se rezultat stavlja u /var/log/auth.log datoteku), a u su slična funkcija mora biti omogućena postavljanjem posebnog parametra u fajl postavki, koji varira od distribucije do distribucije (SULOG_FILE u /etc/login.defs u Ubuntu Linux, /etc/login.conf i /etc/pam.d/su na FreeBSD-u, itd.)
  • u slučaju su, administrator sistema ne može ograničiti komande koje izvršavaju korisnici, ali u sudo može
  • ako korisnik treba da bude lišen administrativnih prava, u slučaju su, nakon uklanjanja iz grupe kotača, mora zaboraviti root lozinku ako se koristi sudo, dovoljno je ukloniti ga iz odgovarajuće grupe (npr. wheel ili admin) i/ili sudoers fajl, ako je dodatno prilagođen.
P: Ja sam jedini korisnik na svom sistemu i navikao sam na su, zašto mi treba sudo?
O: Na pitanje ću odgovoriti pitanjem: ako postoji ispravan sudo, zašto koristiti zastarjeli su?