Kako koristiti sudo u Linuxu i savladati sudoers datoteku

  • sudo vam omogućava izvršavanje naredbi kao drugi korisnik (obično root) na kontroliran i privremen način.
  • Postavke dozvola su definirane u /etc/sudoers i u datotekama /etc/sudoers.d pomoću visudo-a.
  • Grupe poput sudo ili wheel i aliasi u sudoers naredbama olakšavaju dodjeljivanje određenih privilegija određenim korisnicima.
  • Opcije poput NOPASSWD vam omogućavaju da prilagodite sigurnost i praktičnost pri korištenju sudo naredbe u različitim scenarijima.

korištenje sudo-a u Linuxu

Ako svakodnevno radite s LinuxomPrije ili kasnije naići ćeš na komandu sudoTo je ključ koji vam omogućava obavljanje administrativnih zadataka bez potrebe za prijavom kao korisnik. root Stalno, što nije samo nezgodno već i prilično opasno. Razumijevanje kako funkcioniše, koje opcije ima i kako ga konfigurisati je ključno ako ne želite slučajno da slomite sistem ili ostavite sigurnosnu ranjivost, a da to ne shvatite.

U ovom članku ćemo detaljno objasniti. O čemu se tačno radi? sudoKakav je njegov odnos s korisnikom? root i sa datotekom /etc/sudoersKoje su razlike između korištenja su y sudoi kako možete precizno podesiti postavke kako biste određenim korisnicima ili grupama dodijelili vrlo specifične dozvole (čak i bez potrebe za lozinkom). Ideja je da ćete, do trenutka kada završite s čitanjem, biti vrlo jasni kada ih koristiti sudoŠta radi ispod površine i kako to kontrolisati bez straha.

Šta je sudo i zašto je toliko važan u Linuxu?

Naredba sudo To je jedan od ključnih dijelova bilo kojeg modernog Linux sistema. Njegovo ime se obično objašnjava kao "superkorisnik uradi" ili "zamjenski korisnik uradi", a njegova funkcija je jednostavna, ali moćna: omogućava ovlaštenom korisniku da izvršava naredbe kao da je drugi korisnik na sistemu, obično rootna ograničeno vrijeme.

U praksi, ovo znači da običan korisnik može obavljati administrativne zadatke - instaliranje paketa, mijenjanje sistemskih postavki, upravljanje servisima, promjenu dozvola za osjetljive datoteke - bez prijavite se direktno kao rootOva podela između običnog korisnika i superkorisnika je jedan od stubova bezbednosti u Linuxu.

Većina trenutnih distribucija (Debian, Ubuntu, mnogi derivati, sistemi tipa SLE, itd.) donose sudo Unaprijed je instaliran i ne preporučuje se njegova deinstalacija ili olako mijenjanje. Nadalje, na mnogim sistemima, korisnik kreiran tokom instalacije automatski se dodaje administratorskoj grupi koja ima dozvolu za njegovo korištenje. sudo, postajući zadani privilegovani korisnik.

Nešto veoma važno što treba imati na umu je to sudo Ne "pretvara" korisnika u root Ne daje potpuni pristup sistemu, već omogućava korisnicima izvršavanje određenih naredbi kao drugi korisnik, prema pravilima definiranim u njegovoj konfiguraciji. Na ovaj način, vrlo specifične dozvole mogu se dodijeliti bez davanja potpunog pristupa sistemu.

Kako sudo funkcioniše interno

Osnovna operacija od sudo Sa stanovišta korisnika, to je vrlo jednostavno: postavite riječ sudo prije naredbe koju želimo izvršiti s privilegijama. Na primjer, da bismo ažurirali listu paketa sa apt-get U Debianu ili Ubuntuu, običan korisnik će morati uraditi nešto poput:

> sudo apt-get ažuriranje

Ako pokušate pokrenuti administratorsku naredbu bez sudo naredbeNajčešće ćete dobiti greške poput "Dozvola odbijena" ili poruke koje ukazuju da se određena zaključana datoteka ne može otvoriti u /var/lib ili u drugom sistemskom direktoriju. Čim ponovite istu komandu dodajući sudo Zatim će sistem tražiti vašu lozinku i, ako je sve ispravno konfigurirano, naredba će biti izvršena s privilegijama superkorisnika.

Kada izvršite komandu sa sudoProgram prvo provjerava da li je vaš korisnik ovlašten da ga koristi i za koje specifične naredbe, konsultujući konfiguracijsku datoteku. /etc/sudoers i, u mnogim sistemima, dodatne datoteke u direktoriju /etc/sudoers.d/Ako pravila to dozvoljavaju, sudo Traži lozinku (obično vašu, ne njihovu). root) i privremeno povećava vaše privilegije za pokretanje naredbe kao ciljni korisnik.

Zanimljiv detalj koji vas često u početku zbuni Kada se na terminalu od vas zatraži lozinka, ne pojavljuju se nikakvi znakovi, čak ni zvjezdice, dok tipkate. To je sasvim normalno: unos je "slijep" i dio je sigurnosnih mjera kojima se sprječava da se vidi dužina vaše lozinke.

Nadalje, Sudo održava neku vrstu "sesije povjerenja"Nakon uspješnog unosa lozinke, povišene privilegije ostaju aktivne određeni vremenski period (podrazumevano, oko 15 minuta u mnogim distribucijama) u istom terminalu. Tokom ovog perioda, možete izvršavati više komandi sa sudo bez da vas stalno iznova pita za lozinku.

Osnovna sintaksa i najkorisnije opcije sudo komande

Opšta sintaksa sudo Vrlo je jednostavno:

> sudo naredba

Najčešći način korištenja je jednostavno como sudo comandoMeđutim, ima dobar broj zanimljivih opcija. Neke od najčešće korištenih (i istaknutih u mnogim službenim vodičima) su sljedeće:

  • -hPrikazuje poruku pomoći sa sintaksom i svim dostupnim opcijama programa sudo.
  • -V: prikazuje trenutnu verziju sudo i neke detalje o kompilaciji.
  • -vObnavlja "grace time" za autentifikaciju, odnosno osvježava brojač kako vam privilegije ne bi istekle i kako ne biste morali uskoro ponovo unositi lozinku.
  • -k: odmah poništava pohranjene vjerodajnice; to je kao da kažete sudo koji "zaboravlja" da ste se već autentifikovali, prisiljavajući vas da sljedeći put ponovo tražite lozinku.
  • -l: prikazuje koje komande imate ovlaštenje za izvršavanje sudo prema trenutnoj konfiguraciji sudoers.

Također postoje vrlo korisne opcije za izvršavanje naredbi kao i drugi korisnici. različito od root. Na primjer, sa -u Možete odrediti ciljnog korisnika za određenu komandu:

> sudo -u pedro whoami

U ovom slučaju, čak i ako vaša sesija pripada drugom korisniku, naredba whoami Vratit će "pedro" jer je izvršeno kao da ste vi taj korisnik. Ovo je vrlo praktično za testiranje dozvola ili obavljanje zadataka povezanih sa servisnim računima bez potrebe za ručnim prebacivanjem sesija.

sudo u poređenju sa su i root korisnikom

U Linuxu koegzistira nekoliko mehanizama. Da biste dobili administratorske privilegije: registrujte se direktno kao root, koristite komandu su i koristiti sudoSvaki od njih ima svoje prednosti i mane, a njihovo razumijevanje će vam uštedjeti mnogo problema.

Prijavite se direktno kao root (na primjer, sa ssh root@servidorOvo vam daje potpuni pristup sistemu od samog početka. Ovo je vrlo praktično, ali i izuzetno opasno: svaka pogrešno otkucana komanda može izbrisati polovinu sistema, promijeniti kritične dozvole ili učiniti mašinu neupotrebljivom. Stoga se u većini slučajeva ne preporučuje rad sa sesijama prijave. root trajno otvoreno.

Naredba su (zamjenski korisnik) Omogućava vam prebacivanje na drugog korisnika unutar istog terminala. Originalna sesija ostaje u pozadini i "enkapsulira" novu. Ako pokrenete su pedroBit ćete zamoljeni za lozinku. pedro i, kada uđete unutra, ako upišete exit Vratit ćete se na prethodnog korisnika. Ako ne navedete korisničko ime, su Podrazumevano, pokušava da se prebaci na root.

Postoji važna nijansa sa su: ako ne prođete opciju prijave (su -, su -l o su --login), mijenja korisnika, ali ne i okruženje. To znači da ćete ostati u radnom direktoriju i s varijablama prethodnog korisnika, što može uzrokovati greške u dozvolama (na primjer, prilikom pokušaja popisivanja kući (originalnog korisnika s podacima za prijavu novog korisnika).

Umjesto toga, sudo Nudi sigurniji i kontrolisaniji pristupNe morate znati lozinku za rootali vaša vlastita lozinka, a sistem odlučuje, /etc/sudoerskoji korisnici mogu izvršavati koje naredbe, kao što su koji korisnici i s kojih mašina. Nadalje, svaka upotreba sudo To se zapisuje u zapisnike, što olakšava reviziju onoga što je urađeno s povišenim dozvolama.

Za interaktivne sesije "kao drugi korisnik" sa sudo naredbomPostoje neke vrlo praktične varijacije:

  • sudo -s: otvara ljusku kao ciljni korisnik, nasljeđujući okruženje trenutnog korisnika.
  • sudo -i: pokreće potpunu prijavnu ljusku za ciljnog korisnika, sa čistim okruženjem i direktorijem. $HOME, učitavanje datoteka poput .profile o .bash_profile.

Obje opcije su korisne za rad na jednokratnoj osnovi. kao drugi korisnik (obično root ili bilo koji servisni račun) bez potrebe za pamćenjem i korištenjem lozinke, uz održavanje kontrole i evidencije izvršenih radnji.

Datoteka /etc/sudoers i direktorij /etc/sudoers.d

Srce sudo konfiguracije to je u arhivi /etc/sudoersTu je definisano ko to može koristiti. sudoodakle, na primjer koji korisnik i koje specifične naredbe se mogu izvršiti. Osim toga, mnoge distribucije uključuju direktivu koja automatski učitava sve dodatne konfiguracijske datoteke koje se nalaze u /etc/sudoers.d/.

To je ključno razumjeti /etc/sudoers Ne biste trebali uređivati ​​"bez odgovarajućeg uređivanja" sa bilo kojim tekstualnim editorom. Uvijek se mora mijenjati pomoću naredbe visudo, koji otvara datoteku s editorom (podrazumevano vi o nano(u zavisnosti od konfiguracije), ali dodaje sloj sigurnosti: provjerava sintaksu prije spremanja i sprječava da je dvije osobe uređuju istovremeno.

Tipična upotreba za uređivanje sudoer-a je:

> sudo visudo -f /etc/sudoers

Također možete kreirati određene datoteke u /etc/sudoers.d/ za odvajanje konfiguracija po korisničkim grupama, uslugama itd. Na primjer, možete imati datoteku /etc/sudoers.d/networking sa specifičnim pravilima za administraciju mreže, bez miješanja s ostatkom opće konfiguracije.

Prilikom otvaranja /etc/sudoers datoteke na tipičnom sistemuVidjet ćete ovakve redove (ne računajući komentare):

  • korijen SVE=(SVE:SVE) SVEkorisnik root Možete izvršiti bilo koju komandu na bilo kojem hostu, kao bilo koji korisnik i bilo koja grupa.
  • %admin SVE=(SVE) SVEbilo ko unutar grupe admin ima puna ovlaštenja za korištenje sudo.
  • %sudo SVE=(SVE:SVE) SVEIsto važi i za grupu sudo, što je u Ubuntuu i derivatima obično ključna grupa.
  • #include /etc/sudoers.d: označava da datoteke u tom direktoriju također treba pročitati (čak i ako je #(Ovo nije komentar u ovom konkretnom kontekstu).

Pored pravila za korisnike i grupe, sudoers Omogućava definiranje aliasa radi pojednostavljenja složenih konfiguracija: korisnički aliasi (User_Alias), od naredbi (Cmnd_Alias), izvršnih grupa (Runas_Alias) ili od domaćina (Host_Alias).

Upravljajte korisnicima i grupama pomoću sudoera

Uobičajena praksa na serverima kontrolira pristup sudo putem grupa. Na primjer, u mnogim sistemima dovoljno je dodati korisnika u grupu sudo o wheel kako biste mogli dobiti pune administrativne dozvole.

Da biste provjerili koji korisnici pripadaju grupi određeno (na primjer, sudo), možete koristiti:

> grep 'sudo' /etc/group

Ako želite dati sudo dozvole korisnikuUobičajena praksa je da se doda odgovarajućoj grupi. Na primjer, da se uključi bill Grupi sudo:

> sudo adduser bill sudo

Kada trebate opozvati te privilegijeJednostavno ga uklonite iz grupe:

> sudo deluser bill sudo

Druga, mnogo bolja mogućnost To uključuje davanje dozvola samo za određene naredbe, bez davanja slobodnih ruku. Da bi se to postiglo, obično se kreiraju određene datoteke u /etc/sudoers.d/Na primjer, možete definirati datoteku /etc/sudoers.d/networking sa nečim poput:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERI = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = SNIMANJE, SERVERI
%netadmin SVI = SVI

S ovom konfiguracijom, bilo koji korisnik u grupi netadmin moći ćete izvršavati naredbe definirane pod aliasom NETALL (koji grupira pseudonime) CAPTURE y SERVERSbez potpunog pristupa svemu sudoSve što je potrebno je dodati bill Grupi netadmin tako da možete koristiti tcpdump i definirane serverske alate.

Uobičajene naredbe koje zahtijevaju sudo

U svakodnevnoj administraciji sistemaPostoji nekoliko vrsta zadataka koji gotovo uvijek idu ruku pod ruku sa sudojer uključuju modifikaciju sistema ili pristup privilegovanim informacijama.

Upravljanje paketima: u distribucijama zasnovanim na zypper, apt ili drugi upravitelji paketa, svaka operacija koja instalira, uklanja ili ažurira softver zahtijeva privilegije. Na primjer:

> sudo zypper instalacijski paket
> sudo apt-get install docker-ce

Međutim, upiti koji samo čitaju informacije, kao što je listanje repozitorija, obično se može pokrenuti bez sudoTo je stvar testiranja i praćenja kada sam sistem vraća grešku u dozvolama.

Upravljanje uslugama pomoću systemd-a Obično se to radi putem systemctlRadnje poput pokretanja, zaustavljanja ili ponovnog pokretanja usluga obično zahtijevaju sudo:

> sudo systemctl ponovo pokrenite apache2

Nasuprot tome, bezopasnije naredbe poput provjere statusa usluge Mogu funkcionirati bez privilegija na mnogim sistemima:

> status systemctl-a NetworkManager

Upravljanje korisničkim računima također zahtijeva pažnju. Komande poput usermod, useradd o deluser Gotovo uvijek bi trebali ići uz sudo, budući da mijenjaju korisničku bazu podataka sistema:

> sudo usermod -L -f 30 tux

Konačno, dozvole za datoteke i upravljanje vlasništvom con chown I kompaniji su obično potrebne privilegije kada to utiče na sistemske putanje ili druge korisnike. Na primjer, da bi se sve datoteke i poddirektorije /home/test/tux-files postati vlasništvo korisnika tux Možete koristiti:

> sudo chown -R tux:tux /home/test/tux-datoteke

Praktični primjeri korištenja sudo naredbe

Pogledajmo neke stvarne slučajeve. gdje sudo To pravi razliku između greške u dozvolama i ispravne administrativne operacije.

Ažuriranje indeksa paketa u Debianu/Ubuntuu Bez privilegija, javljat će greške jer ne može manipulirati datotekama. /var/lib/apt/listsNaredba:

> apt-get ažuriranje

Završit će se porukom "Dozvola odbijena"Čim to ponovite na taj način, stvari se mijenjaju:

> sudo apt-get ažuriranje

Sistem će vas tražiti za lozinku.i ako je vaš korisnik ovlašten u sudoersAžuriranje će se pokrenuti bez problema. To je ponavljajući obrazac: greška u dozvolama bez sudoispravno izvođenje sa sudo.

Još jedan vrlo čest primjer je kopiranje datoteka u sistemske putanje, kako /usr/local/binAko pokušate kopirati skriptu tamo jednostavnim:

> cp script.sh /usr/local/bin/

Normalno je da se terminal žali da nemate dozvolu za pisanje u taj direktorij. Ako ponovite operaciju dodavanjem sudo:

> sudo cp script.sh /usr/local/bin/

Bit ćete zamoljeni za lozinku i, nakon uspješne autentifikacije,Kopija će biti napravljena i zabilježena kao izvršena s povišenim privilegijama.

Također možete kombinirati sudo s opcijom -u izvršavati određene naredbe kao drugi korisnik, bez promjene sesija ili korištenja su. Na primjer:

> koami
> sudo -u pedro whoami

Prva narudžba će prikazati vaše pravo korisničko ime., dok će drugi vratiti „pedro“, pokazujući da je izvršenje izvršeno kao taj ciljni korisnik.

Dodjeljivanje dozvola bez lozinke i druge napredne opcije

Jedna od najmoćnijih stvari kod znojenja Ova funkcija vam omogućava da podesite stepen u kojem se traži lozinka i za koje specifične naredbe. Ponekad želite da određeni korisnici mogu izvršavati određene naredbe bez potrebe da svaki put unose lozinku, na primjer, za automatizovane skripte ili dugmad za isključivanje u okruženju radne površine.

To se postiže pomoću etikete NOPASSWD u pravilima sudoersNa primjer, ako želite miusuario može izvršiti /bin/cat con sudo Bez potrebe za lozinkom, možete dodati liniju:

mojkorisnik SVI = BEZ LOZINKE: /bin/cat

Slično tome, mogli biste mu dozvoliti da upravlja isključivanjem opreme. bez ponovljene autentifikacije, dodavanjem nečega poput:

mojkorisnik SVI = BEZLOZINKE: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

Za čišće i skalabilnije konfiguracijePreporučljivo je koristiti aliase. Tipičan primjer je definiranje korisničke grupe, grupe naredbi i, ako je potrebno, izvršnog korisničkog aliasa:

User_Alias ​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-data, apache

S ovim definicijama biste tada mogli pisati Mnogo čitljivija pravila, kao što su:

CIJELA GRUPA = MOĆ

Dakle, svaki korisnik uključen u pseudonim GRUPO Moći ćete isključiti ili ponovo pokrenuti računar pomoću sudoi možete podesiti da li želite da se zahtijeva lozinka ili ne NOPASSWD o PASSWDTakođer možete ograničiti korištenje na određene hostove pomoću Host_Alias tako da je važeći samo s određene mreže.

Iza NOPASSWDPostoje i druge oznake como NOEXEC (kako bi se spriječilo da naredba pokrene druge programe s povišenim dozvolama) ili male zanimljivosti poput dodavanja insults do linije Defaults, tako da sudo Šaliću se na engleskom svaki put kad ne uneseš lozinku.

Sve ovo pokazuje da je sudoers mnogo više od jednostavnog "root prekidača".Kada se pravilno konfiguriše, omogućava vam da dizajnirate vrlo granularni model dozvola, prilagođen vašim potrebama i sa nivoom sigurnosti daleko superiornijim od tipičnog "uđite kao root i radite šta god želite".

Posjedovanje alata poput sudopravilno shvaćen i pravilno konfiguriranTo je gotovo obavezno na svakom modernom Linux sistemu gdje radi više korisnika ili gdje želite minimizirati rizike, čak i ako ste jedini korisnik. Korištenje kombinacije sudo, /etc/sudoers, grupos como sudo o wheel i napredne oznake kao što su NOPASSWDMožete postići vrlo razumnu ravnotežu između udobnosti, fine kontrole i sigurnosti, bez potrebe da budete stalno prikovani za sesiju. root niti se oslanjati isključivo na sreću.

root korisnik u Linuxu
Vezani članak:
Root korisnik u Linuxu: dozvole, rizici i najbolje prakse

Dodaj kao preferirani izvor