Cum să controlezi accesul sudo pe Linux
Publicat: 2022-01-29 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.
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
.
Ș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 principalmary's
. -
whoami
ne spune că utilizați contul de utilizatormary
. - 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.
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.
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
.
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
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
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=”.
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.
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 unUser_Alias
. - INSTALATOR : Acesta este un nume arbitrar pentru acest alias.
- = harry, mary : Lista utilizatorilor 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:
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
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.