
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
sudoi 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
sudokoji "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
sudoprema trenutnoj konfiguracijisudoers.
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.profileo.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
rootMož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
adminima puna ovlaštenja za korištenjesudo. - %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.
