Cum să controlezi accesul sudo pe Linux

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, 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.

Desigur, oricine are acces la parola root 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 ridicați-vă privilegiile pentru o perioadă scurtă de timp ai nevoie de ele. Adesea, asta este doar pentru a lansa o singură comandă.

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ă.

  Cum se face backup pentru o instalare NextCloud Snap pe Linux

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 alerga cine sunt comanda ca utilizator mary. Dacă utilizați comanda sudo fără opțiunea -u, veți rula comanda ca root.

Ș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
whoami
ls -hl
exit

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.
Comanda pwd reproșează că acum ești la Mary directorul principal.
whoami ne spune că utilizați contul de utilizator mary.
Fișierele din director aparțin contului de utilizator mary.
Comanda de ieșire 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 și analizarea sintaxei pe conținutul fișierului pe măsură ce îl salvați.

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, a fost lansată comanda visudo editorul simplu nano. Pe Fedora, visudo a lansat cel mai capabil—dar mai puțin intuitiv— 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.

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.

  Cum se configurează Docker pe Linux

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 root și capacitatea 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:

groups

Contul de utilizator mary este doar în grupul mary.

Să verificăm cu Tom:

groups

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 less /etc/shadow

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 less /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.

groups

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

sudo visudo

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.

Intrarea pentru contul de utilizator harry este:

harry    ALL=/usr/bin/apt-get

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

  Cum să utilizați comanda istoric pe Linux

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ă folosi 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.

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

sudo shutdown now

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. Un alt mod, 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

Scroll down in the file until you come to the User_Alias specification line.


Adăugați User_Alias ​​tastând:

User_Alias INSTALLERS = 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 de utilizatori care trebuie incluși în acest alias.

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:

INSTALLERS    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

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:

less /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 închidere 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.