Cum să controlezi accesul sudo pe Linux

Publicat: 2022-01-29
O fereastră de terminal Linux pe un desktop în stil Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock

Comanda sudo vă permite să executați comenzi pe Linux ca și cum ați fi altcineva, cum ar fi root . sudo vă permite, de asemenea, să controlați cine poate accesa capacitățile root's , cu granularitate. Oferiți utilizatorilor acces complet sau lăsați-le să folosească un mic subset de comenzi. Vă arătăm cum.

Permisiuni sudo și Root

Cu toții am auzit (simplificarea excesivă) că totul în Linux este un fișier. De fapt, aproape tot ce se află în sistemul de operare, de la procese, fișiere, directoare, socket-uri și conducte, vorbește cu nucleul printr-un descriptor de fișier. Deci, deși totul nu este un fișier, majoritatea obiectelor sistemului de operare sunt tratate ca și cum ar fi. Acolo unde este posibil, designul sistemelor de operare Linux și Unix aderă la acest principiu.

Conceptul de „totul este un fișier” este de mare anvergură în Linux. Este ușor de văzut, atunci, cum permisiunile pentru fișiere în Linux au devenit unul dintre elementele de bază ale privilegiilor și drepturilor utilizatorilor. Dacă dețineți un fișier sau un director (un tip special de fișier), puteți face ceea ce doriți cu el, inclusiv editarea, redenumirea, mutarea și ștergerea acestuia. De asemenea, puteți seta permisiunile pentru fișier, astfel încât alți utilizatori sau grupuri de utilizatori să poată citi, modifica sau executa fișierul. Toată lumea este guvernată de aceste permisiuni.

Toți cei care sunt, în afară de superutilizator, sunt cunoscuți ca root . Contul root este un cont special privilegiat. Nu este legat de permisiunile pentru niciunul dintre obiectele din sistemul de operare. Utilizatorul root poate face orice pentru orice și, aproape, în orice moment.

Publicitate

Desigur, oricine are acces la parola root's poate face același lucru. Ele ar putea face ravagii fie răuvoitor, fie accidental. De fapt, utilizatorul root poate face ravagii făcând și o greșeală. Nimeni nu este infailibil. Sunt lucruri periculoase.

Acesta este motivul pentru care acum se consideră cea mai bună practică să nu te autentifici deloc ca root . Conectați-vă cu un cont de utilizator obișnuit și utilizați sudo pentru a vă crește privilegiile pentru perioada scurtă de care aveți nevoie. Adesea, asta este doar pentru a lansa o singură comandă.

LEGATE: Ce înseamnă „Totul este un fișier” în Linux?

Lista sudoers

sudo a fost deja instalat pe computerele Ubuntu 18.04.3, Manjaro 18.1.0 și Fedora 31 folosite pentru cercetarea acestui articol. Aceasta nu este o surpriză. sudo există de la începutul anilor 1980 și a devenit mijlocul standard de operare a superutilizatorului pentru aproape toate distribuțiile.

Când instalați o distribuție modernă, utilizatorul pe care îl creați în timpul instalării este adăugat la o listă de utilizatori numită sudoers . Aceștia sunt utilizatorii care pot folosi comanda sudo . Deoarece aveți puteri sudo , le puteți folosi pentru a adăuga alți utilizatori la lista de sudoeri.

Desigur, este nesăbuit să dai statutul complet de superutilizator vrând-nevrând, sau oricui are doar o nevoie parțială sau specifică. Lista sudoers vă permite să specificați cu ce comenzi diverșii utilizatori au voie să folosească sudo . În acest fel, nu le dai cheile regatului, dar ei pot în continuare să realizeze ceea ce trebuie să facă.

Rularea unei comenzi ca alt utilizator

Inițial, se numea „superutilizator do”, pentru că puteai face lucruri ca superutilizator. Domeniul său de aplicare a fost lărgit acum și puteți folosi sudo pentru a executa o comandă ca și cum ați fi orice utilizator. A fost redenumit pentru a reflecta acea nouă funcționalitate. Acum se numește „utilizator înlocuitor face”.

Pentru a folosi sudo pentru a rula o comandă ca alt utilizator, trebuie să folosim opțiunea -u (utilizator). Aici, vom rula comanda whoami ca utilizator mary . Dacă utilizați comanda sudo fără opțiunea -u , veți rula comanda ca root .

Publicitate

Și, desigur, pentru că utilizați sudo , vi se va solicita parola.

 sudo -u mary whoami 

Răspunsul de la whoami ne spune că contul de utilizator care rulează comanda este mary .

Puteți folosi comanda sudo pentru a vă autentifica ca alt utilizator fără a-i cunoaște parola. Vi se va solicita propria parolă. Trebuie să folosim opțiunea -i (login).

 sudo -i -u mary
 pwd
 cine sunt
 ls -hl
 Ieșire 

Ești autentificat ca mary . Fișierele „.bashrc”, „.bash_aliases” și „.profile” pentru contul de utilizator mary sunt procesate exact ca și cum proprietarul contului de utilizator mary s-ar fi autentificat.

  • Linia de comandă se modifică pentru a reflecta că aceasta este o sesiune pentru contul de utilizator mary .
  • pwd reproșează că acum vă aflați în directorul principal mary's .
  • whoami ne spune că utilizați contul de utilizator mary .
  • Fișierele din director aparțin contului de utilizator mary .
  • Comanda exit vă întoarce la sesiunea normală a contului de utilizator.

Editarea fișierului sudoers

Pentru a adăuga utilizatori la lista de persoane care pot folosi sudo , trebuie să editați fișierul sudoers . Este extrem de important să faceți acest lucru numai folosind comanda visudo . Comanda visudo împiedică mai multe persoane să încerce să editeze fișierul sudoers simultan. De asemenea, efectuează verificarea sintaxei și analizarea conținutului fișierului pe măsură ce îl salvați.

Publicitate

Dacă editările dvs. nu trec testele, fișierul nu este salvat orbește. Ai opțiuni. Puteți să anulați și să abandonați modificările, să reveniți și să editați din nou modificările sau să forțați salvarea modificărilor incorecte. Ultima opțiune este o idee foarte proastă. Nu fi tentat să faci asta. Vă puteți găsi într-o situație în care toată lumea este blocată accidental de a utiliza sudo .

Deși începeți procesul de editare folosind comanda visudo , visudo nu este un editor. Acesta apelează unul dintre editorii dvs. existenți pentru a efectua editările fișierelor. Pe Manjaro și Ubuntu, comanda visudo a lansat editorul simplu nano . Pe Fedora, visudo a lansat vim mai capabil, dar mai puțin intuitiv.

LEGATE: Cum să ieșiți din editorul Vi sau Vim

Dacă preferați să utilizați nano pe Fedora, puteți face acest lucru cu ușurință. Mai întâi, instalați nano :

sudo dnf install nano

Și apoi visudo a trebuit să fie invocat cu această comandă:

 sudo EDITOR=nano visudo 

Pare un candidat bun pentru un alias. Editorul nano este deschis cu fișierul sudoers încărcat în el.

editor nano cu fișierul sudoers încărcat în el

Adăugarea de utilizatori la grupul sudo

Utilizați visudo pentru a deschide fișierul sudoers. Folosiți fie această comandă, fie cea descrisă mai sus pentru a specifica editorul la alegere:

 sudo visudo 

Derulați prin fișierul sudoers până când vedeți definiția intrării %sudo .

Fișierul sudoers cu linia %sudo evidențiată

Publicitate

Semnul procentaj indică faptul că aceasta este o definiție de grup și nu o definiție de utilizator. Pe unele distribuții, linia %sudo are un hash # la începutul liniei. Acest lucru face din linie un comentariu. Dacă acesta este cazul, eliminați hash-ul și salvați fișierul.

Linia %sudo se descompune astfel:

  • %sudo : Numele grupului.
  • ALL= : Această regulă se aplică tuturor gazdelor din această rețea.
  • (ALL:ALL) : membrii acestui grup pot rula comenzi ca toți utilizatorii și toate grupurile.
  • Toate : membrii acestui grup pot rula toate comenzile.

Pentru a reformula puțin, membrii acestui grup pot rula orice comandă, ca orice utilizator sau orice grup, pe acest computer sau pe orice altă gazdă din această rețea. Așadar, o modalitate simplă de a oferi cuiva privilegii de root și abilitatea de a folosi sudo este să le adăugați la grupul sudo .

Avem doi utilizatori, Tom și Mary, cu conturi de utilizator tom și, respectiv, mary . Vom adăuga contul de utilizator tom la grupul sudo cu comanda usermod . Opțiunea -G (grupuri) specifică grupul la care vom adăuga contul tom . Opțiunea -a (adăugați) adaugă acest grup la lista de grupuri în care se află deja contul de utilizator tom . Fără această opțiune, contul de utilizator tom ar fi plasat în noul grup, dar eliminat din orice alte grupuri.

 sudo usermod -a -G sudo tom 

Să verificăm în ce grupuri se află Mary:

 grupuri 

Contul de utilizator mary este doar în grupul mary .

Să verificăm cu Tom:

 grupuri 

Contul de utilizator tom – și, prin urmare, Tom – se află în grupurile tom și sudo .

Să încercăm să o convingem pe Mary să facă ceva care necesită privilegii sudo .

 sudo mai puțin /etc/shadow 

Publicitate

Mary nu poate căuta în interiorul fișierului restricționat „/etc/shadow”. Ea primește o ușoară grămadă pentru că a încercat să folosească sudo fără permisiune. Iată cum se descurcă Tom:

 sudo mai puțin /etc/shadow 

De îndată ce Tom introduce parola, i se arată fișierul /etc/shadow.

Doar prin adăugarea lui în grupul sudo , el a fost ridicat la rândurile de elită ale celor care pot folosi sudo . Complet nerestricționat.

Acordarea de drepturi sudo restricționate utilizatorilor

Tom a primit toate drepturile sudo . El poate face orice poate face root – sau oricine altcineva din grupul sudo . Asta i-ar putea oferi mai multă putere decât ești fericit să-l predai. Uneori, există o cerință ca un utilizator să efectueze o funcție care necesită privilegii root , dar nu există un caz justificat pentru ca aceștia să aibă acces complet sudo . Puteți obține acest echilibru adăugându-le în fișierul sudoers și listând comenzile pe care le pot folosi.

Să-l întâlnim pe Harry, proprietarul contului de utilizator harry . El nu face parte din grupul sudo și nu are privilegii sudo .

 grupuri 

Este util pentru Harry să poată instala software, dar nu vrem ca el să aibă drepturi sudo complete. OK nici o problema. hai sa declansam visudo :

 sudo visudo 

Publicitate

Derulați în jos prin fișier până când treceți de definițiile grupului. Vom adăuga o linie pentru Harry. Deoarece aceasta este o definiție de utilizator și nu o definiție de grup, nu trebuie să începem linia cu un semn procentual.

intrare de fișier sudoer pentru harry

Intrarea pentru contul de utilizator harry este:

 harry ALL=/usr/bin/apt-get

Rețineți că există o filă între „harry” și „ALL=”.

Acest lucru arată ca contul de utilizator harry poate folosi comenzile enumerate pe toate gazdele conectate la această rețea. Există o comandă listată, care este „/usr/bin/apt-get”. Îi putem acorda lui Harry acces la mai multe comenzi adăugându-le la lista de comenzi, separate prin virgule.

Adăugați linia în fișierul sudoers și salvați fișierul. Dacă doriți să verificați din nou dacă linia este corectă din punct de vedere sintactic, putem cere visudo să scaneze fișierul și să verifice sintaxa pentru noi, folosind opțiunea -c (doar verificați):

 sudo visudo -c 

Verificările au loc și visudo raportează că totul este bine. Harry ar trebui să poată utiliza acum apt-get pentru a instala software, dar ar trebui refuzat dacă încearcă să folosească orice altă comandă care necesită sudo .

 sudo apt-get install finger 

Drepturile sudo corespunzătoare i-au fost acordate lui Harry, iar acesta poate instala software-ul.

Publicitate

Ce se întâmplă dacă Harry încearcă să folosească o comandă diferită care necesită sudo ?

 sudo oprire acum 

Harry este împiedicat să execute comanda. I-am acordat cu succes acces specific, restricționat. Poate folosi comanda nominalizată și nimic altceva.

Utilizarea aliasurilor de utilizator sudoers

Dacă vrem să-i acordăm lui Mary aceleași privilegii, am putea adăuga o linie în fișierul sudoers pentru contul de utilizator mary exact în același mod ca și cu Harry. O altă modalitate, mai ordonată, de a realiza același lucru este utilizarea unui User_Alias .

în fișierul sudoers, un User_Alias conține o listă de nume de cont de utilizator. Numele User_Alias poate fi apoi folosit într-o definiție pentru a reprezenta toate acele conturi de utilizator. Dacă doriți să modificați privilegiile pentru acele conturi de utilizator, aveți doar o singură linie de editat.

Să creăm un User_Alias și să-l folosim în fișierul nostru sudoers.

 sudo visudo 

 Derulați în jos în fișier până ajungeți la linia de specificații User_Alias.

Adăugați User_Alias tastând:

 User_Alias ​​INSTALERS = harry, mary

Fiecare element este separat de un spațiu, nu de o filă. Logica se descompune astfel:

  • User_Alias : Acest lucru îi spune lui visudo că acesta va fi un User_Alias .
  • INSTALATOR : Acesta este un nume arbitrar pentru acest alias.
  • = harry, mary : Lista utilizatorilor care trebuie incluși în acest alias.
Publicitate

Acum vom edita linia pe care am adăugat-o anterior pentru contul de utilizator harry :

 harry ALL=/usr/bin/apt-get

Schimbați-l astfel încât să scrie:

 INSTALERS ALL=/usr/bin/apt-get

Aceasta spune că toate conturile de utilizator conținute în definiția „INSTALATORI” User_Alias pot rula comanda apt-get . Putem testa acest lucru cu Mary, care acum ar trebui să poată instala software-ul.

 sudo apt-get install colordiff 

Mary poate instala software-ul deoarece se află în „INSTALATORI” User_Alias și acel User_Alias i s-au acordat acele drepturi.

Trei trucuri rapide de sudo

Când uitați să adăugați sudo la o comandă, tastați

 sudo!!

Și ultima comandă va fi repetată cu sudo adăugat la începutul liniei.

După ce ați folosit sudo și v-ați autentificat cu parola, nu va trebui să vă folosiți parola cu alte comenzi sudo timp de 15 minute. Dacă doriți să vă uitați imediat autentificarea, utilizați:

 sudo -k
Publicitate

V-ați întrebat vreodată unde puteți vedea încercările eșuate de comandă sudo ? Aceștia merg la fișierul „/var/log/auth.log”. Il puteti vizualiza cu:

 mai puțin /var/log/auth.log 

Putem vedea intrarea pentru contul de utilizator Mary, care a fost conectat la TTY pts/1 când a încercat să ruleze comanda de shutdown ca utilizator „rădăcină”.

Cu mare putere…

… vine abilitatea de a delega porțiuni din ea altora. Acum știți cum să împuterniciți alți utilizatori în mod selectiv.