Cum se folosește sudo în Linux și se stăpânește fișierul sudoers

  • sudo vă permite să executați comenzi ca un alt utilizator (de obicei root) într-un mod controlat și temporar.
  • Setările de permisiuni sunt definite în /etc/sudoers și în fișierele /etc/sudoers.d folosind visudo.
  • Grupuri precum sudo sau wheel și aliasuri în sudoers facilitează acordarea anumitor privilegii anumitor utilizatori.
  • Opțiuni precum NOPASSWD vă permit să ajustați securitatea și confortul atunci când utilizați sudo în diferite scenarii.

folosind sudo în Linux

Dacă lucrezi zilnic cu LinuxMai devreme sau mai târziu vei da peste comandă sudoEste cheia care vă permite să efectuați sarcini administrative fără a fi nevoie să vă conectați ca utilizator. root Tot timpul, ceea ce nu este doar incomod, ci și destul de periculos. Înțelegerea modului în care funcționează, a opțiunilor pe care le are și a modului în care îl configurați este crucială dacă nu doriți să spargeți accidental sistemul sau să lăsați o vulnerabilitate de securitate fără să vă dați seama.

În acest articol vom intra în detalii. despre ce este vorba mai exact? sudoCare este relația sa cu utilizatorul? root și cu fișierul /etc/sudoersCare sunt diferențele dintre utilizarea su y sudoși cum puteți ajusta fin setările pentru a acorda permisiuni foarte specifice (chiar și fără a fi necesară o parolă) anumitor utilizatori sau grupuri. Ideea este că, până când veți termina de citit, veți ști foarte clar când să utilizați sudoCe face pe dedesubt și cum să-l controlezi fără frică.

Ce este sudo și de ce este atât de important în Linux?

Comanda sudo Este una dintre piesele cheie al oricărui sistem Linux modern. Numele său este de obicei explicat ca „superuser do” sau „substitute user and do”, iar funcția sa este simplă, dar puternică: permite unui utilizator autorizat să execute comenzi ca și cum ar fi un alt utilizator din sistem, în mod normal rootpentru o perioadă limitată de timp.

În practică, aceasta înseamnă că un utilizator normal poate efectua sarcini administrative - instalarea de pachete, modificarea setărilor de sistem, gestionarea serviciilor, schimbarea permisiunilor pentru fișiere sensibile - fără autentificați-vă direct ca rootAceastă separare între utilizatorul obișnuit și superutilizatorul este unul dintre pilonii securității în Linux.

Cele mai actuale distribuții (Debian, Ubuntu, multe derivate, sisteme de tip SLE etc.) aduc sudo Este preinstalat și nu se recomandă dezinstalarea sau modificarea ușoară a acestuia. În plus, pe multe sisteme, utilizatorul creat în timpul instalării este adăugat automat la grupul administrativ care are permisiunea de a-l utiliza. sudo, devenind utilizatorul privilegiat implicit.

Ceva foarte important de reținut este faptul că sudo Nu „convertește” un utilizator în root Nu acordă acces complet la sistem, ci permite utilizatorilor să execute comenzi specifice ca un alt utilizator, conform regulilor definite în configurația sa. În acest fel, pot fi acordate permisiuni foarte specifice fără a oferi acces complet la sistem.

Cum funcționează sudo intern

Funcționarea de bază a sudo Este foarte simplu din punctul de vedere al utilizatorului: plasezi cuvântul sudo înaintea comenzii pe care dorim să o executăm cu privilegii. De exemplu, pentru a actualiza lista de pachete cu apt-get În Debian sau Ubuntu, un utilizator obișnuit va trebui să facă ceva de genul:

> sudo apt-get update

Dacă încercați să executați o comandă administrativă fără sudoCel mai frecvent, veți primi erori precum „Permisiune refuzată” sau mesaje care indică faptul că un anumit fișier blocat nu poate fi deschis în /var/lib sau într-un alt director de sistem. De îndată ce repetați aceeași comandă adăugând sudo Apoi, sistemul vă va solicita parola și, dacă totul este configurat corect, comanda va fi executată cu privilegii de superutilizator.

Când executați o comandă cu sudoProgramul verifică mai întâi dacă utilizatorul este autorizat să îl utilizeze și pentru ce comenzi specifice, consultând fișierul de configurare. /etc/sudoers și, în multe sisteme, fișierele suplimentare din director /etc/sudoers.d/Dacă regulile permit, sudo Îți cere parola (de obicei a ta, nu a lor). root) și vă ridică temporar privilegiile de a rula comanda ca utilizator țintă.

Un detaliu curios care te derutează adesea la început Când ți se solicită parola la terminal, nu apar caractere, nici măcar asteriscuri, în timp ce tastezi. Acest lucru este perfect normal: introducerea este „oarbă” și face parte din măsurile de securitate pentru a împiedica vizualizarea lungimii parolei tale.

În plus, Sudo menține un fel de „sesiune de încredere”După introducerea cu succes a parolei, privilegiile ridicate rămân active pentru o perioadă de timp (implicit, aproximativ 15 minute în multe distribuții) în același terminal. În această perioadă, puteți executa mai multe comenzi cu sudo fără să vă ceară parola iar și iar.

Sintaxa de bază și cele mai utile opțiuni ale comenzii sudo

Sintaxa generală a sudo Este foarte simplu:

> comanda sudo

Cea mai obișnuită modalitate de utilizare este pur și simplu ca sudo comandoTotuși, are o serie de opțiuni interesante. Printre cele mai utilizate (și evidențiate în multe ghiduri oficiale) se numără următoarele:

  • -hAfișează un mesaj de ajutor cu sintaxa și toate opțiunile disponibile ale programului sudo.
  • -V: arată versiunea curentă a sudo și câteva detalii despre compilare.
  • -vReînnoiește „timpul de grație” de autentificare, adică actualizează contorul astfel încât privilegiile să nu expire și să nu fie nevoie să reintroduceți parola în curând.
  • -k: invalidează imediat acreditările stocate; este ca și cum ai spune sudo care „uită” că te-ai autentificat deja, obligându-te să-ți ceri parola din nou data viitoare.
  • -l: arată ce comenzi ești autorizat să execuți sudo conform configurației actuale a sudoers.

Există, de asemenea, opțiuni foarte utile pentru rularea comenzilor la fel ca alți utilizatori. în afară de root. De exemplu, cu -u Puteți specifica un utilizator țintă pentru o anumită comandă:

> sudo -u pedro whoami

În acest caz, chiar dacă sesiunea dvs. aparține unui alt utilizator, comanda whoami Va returna „pedro” deoarece a fost executat ca și cum ați fi utilizatorul respectiv. Acest lucru este foarte convenabil pentru testarea permisiunilor sau pentru efectuarea sarcinilor asociate conturilor de serviciu fără a fi nevoie să schimbați manual sesiunile.

sudo versus su și utilizatorul root

În Linux, coexistă mai multe mecanisme. Pentru a obține privilegii de administrator: înregistrați-vă direct ca root, utilizați comanda su și folosiți sudoFiecare are avantajele și dezavantajele sale, iar înțelegerea lor te va scuti de multe probleme.

Conectați-vă direct ca root (de exemplu, cu ssh root@servidorAcest lucru vă oferă acces complet la sistem de la început. Este foarte convenabil, dar și extrem de periculos: orice comandă introdusă greșit poate șterge jumătate din sistem, poate modifica permisiuni critice sau poate face mașina inutilizabilă. Prin urmare, în majoritatea cazurilor, lucrul cu sesiuni de conectare nu este recomandat. root deschis permanent.

Comanda su (utilizator înlocuitor) Îți permite să comuți la un alt utilizator în cadrul aceluiași terminal. Sesiunea originală rămâne în fundal și o „încapsulează” pe cea nouă. Dacă rulezi su pedroVi se va solicita parola. pedro și, odată înăuntru, dacă tastezi exit Veți reveni la utilizatorul anterior. Dacă nu specificați un nume de utilizator, su În mod implicit, încearcă să comute la root.

Există o nuanță importantă cu su: dacă nu transmiți opțiunea de conectare (su -, su -l o su --login), modifică utilizatorul, dar nu și mediul. Aceasta înseamnă că veți rămâne în directorul de lucru și cu variabilele utilizatorului anterior, ceea ce poate cauza erori de permisiune (de exemplu, atunci când încercați să listați Acasă (ale utilizatorului inițial cu acreditările noului utilizator).

În schimb, sudo Oferă o abordare mai sigură și mai controlabilăNu trebuie să știi parola pentru rootdar propria parolă, iar sistemul decide, prin /etc/sudoersce utilizatori pot executa ce comenzi, cum ar fi ce utilizatori și de pe ce mașini. În plus, fiecare utilizare a sudo Este înregistrat în jurnale, ceea ce facilitează auditarea a ceea ce s-a făcut cu permisiuni ridicate.

Pentru sesiuni interactive „ca un alt utilizator” cu sudoExistă câteva variante foarte practice:

  • Sudo -s: deschide o shell ca utilizator țintă, moștenind mediul utilizatorului curent.
  • sudo -i: pornește o interfață de conectare completă pentru utilizatorul țintă, cu mediul și directorul său curate. $HOME, încărcarea fișierelor precum .profile o .bash_profile.

Ambele opțiuni sunt utile pentru lucrul punctual. ca un alt utilizator (de obicei root sau orice cont de serviciu) fără a fi nevoie să vă amintiți și să utilizați parola, menținând în același timp controlul și o evidență a acțiunilor efectuate.

Fișierul /etc/sudoers și directorul /etc/sudoers.d

Inima configurației sudo este în arhivă /etc/sudoersAcolo se definește cine îl poate folosi sudode unde, cum ar fi ce utilizator și ce comenzi specifice pot fi executate. În plus, multe distribuții includ o directivă care încarcă automat toate fișierele de configurare suplimentare situate în /etc/sudoers.d/.

Este crucial să înțelegem asta /etc/sudoers Nu ar trebui să editezi „fără editarea corespunzătoare” cu orice editor de text. Trebuie întotdeauna modificat folosind comanda visudo, care deschide fișierul cu un editor (implicit vi o nano(în funcție de configurație), dar adaugă un nivel de securitate: verifică sintaxa înainte de salvare și împiedică editarea simultană de către două persoane.

Utilizarea tipică pentru editarea fișierelor sudoer este:

> sudo visudo -f /etc/sudoers

De asemenea, puteți crea fișiere specifice în /etc/sudoers.d/ pentru a separa configurațiile pe grupuri de utilizatori, servicii etc. De exemplu, puteți avea un fișier /etc/sudoers.d/networking cu reguli specifice pentru administrarea rețelei, fără a o amesteca cu restul configurației generale.

La deschiderea fișierului /etc/sudoers pe un sistem obișnuitVeți vedea linii ca acestea (fără a lua în considerare comentariile):

  • rădăcină TOT=(TOT:TOT) TOTutilizatorul root Puteți executa orice comandă pe orice gazdă, ca orice utilizator și orice grup.
  • %admin ALL=(ALL) ALLoricine din cadrul grupului admin are permisiuni complete de utilizare sudo.
  • %sudo ALL=(ALL:ALL) ALLAcelași lucru este valabil și pentru grup sudo, care în Ubuntu și derivate este de obicei grupul cheie.
  • #include /etc/sudoers.d: indică faptul că fișierele din directorul respectiv ar trebui, de asemenea, citite (chiar dacă un #(Acesta nu este un comentariu în acest context specific).

Pe lângă regulile utilizatorilor și grupurilor, sudoers Permite definirea de aliasuri pentru a simplifica configurațiile complexe: aliasuri de utilizator (User_Alias), de comenzi (Cmnd_Alias), a grupurilor de execuție (Runas_Alias) sau a gazdelor (Host_Alias).

Gestionați utilizatorii și grupurile cu sudoers

O practică obișnuită pe servere controlează accesul la sudo prin grupuri. De exemplu, în multe sisteme este suficient să adăugați un utilizator la grup sudo o wheel astfel încât să puteți obține autorizații administrative complete.

Pentru a verifica ce utilizatori aparțin unui grup determinat (de exemplu, sudo), puteți folosi:

> grep 'sudo' /etc/group

Dacă vrei să acorzi permisiuni sudo unui utilizatorPractica obișnuită este adăugarea sa la grupul corespunzător. De exemplu, încorporarea bill La grup sudo:

> sudo adduser factură sudo

Când trebuie să revocați aceste privilegiiPur și simplu eliminați-l din grup:

> sudo deluser bill sudo

O altă posibilitate, mult mai frumoasă Implică acordarea de permisiuni doar pentru anumite comenzi, fără a da mână liberă. Pentru a face acest lucru, fișiere specifice sunt de obicei create în /etc/sudoers.d/De exemplu, ați putea defini un fișier /etc/sudoers.d/networking cu ceva de genul:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERE = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = CAPTURĂ, SERVERE
%netadmin ALL = NETALL

Cu această configurație, orice utilizator din grup netadmin veți putea executa comenzile definite sub alias NETALL (care grupează aliasurile) CAPTURE y SERVERSfără a avea acces deplin la toate sudoTot ce este necesar este să adăugăm la bill La grup netadmin astfel încât să poți folosi tcpdump și instrumentele definite ale serverului.

Comenzi comune care necesită sudo

În administrarea zilnică a sistemelorExistă mai multe tipuri de sarcini care merg aproape întotdeauna mână în mână cu sudodeoarece implică modificarea sistemului sau accesarea informațiilor privilegiate.

Managementul pachetelorîn distribuții bazate pe zypper, apt sau alți manageri de pachete, orice operațiune care instalează, elimină sau actualizează software necesită privilegii. De exemplu:

> pachetul de instalare sudo zypper
> sudo apt-get install docker-ce

Totuși, interogările care citesc doar informații, cum ar fi listarea depozitelor, pot fi de obicei rulate fără sudoEste vorba de testare și de a vedea când sistemul în sine returnează o eroare de permisiuni.

Managementul serviciilor cu systemd De obicei se face prin systemctlAcțiuni precum pornirea, oprirea sau repornirea serviciilor necesită de obicei sudo:

> sudo systemctl restart apache2

În schimb, comenzi mai inofensive, cum ar fi verificarea stării unui serviciu Acestea pot funcționa fără privilegii pe multe sisteme:

> starea systemctl NetworkManager

Gestionarea conturilor de utilizator necesită, de asemenea, atențieComenzi precum usermod, useradd o deluser Ar trebui să meargă aproape întotdeauna cu sudo, deoarece modifică baza de date de utilizatori a sistemului:

> sudo usermod -L -f 30 tux

În cele din urmă, permisiunile fișierelor și gestionarea proprietății cu chown Și compania are nevoie de obicei de privilegii atunci când afectează căile de sistem sau alți utilizatori. De exemplu, pentru a face ca toate fișierele și subdirectoarele din /home/test/tux-files devin proprietatea utilizatorului tux Ai putea folosi:

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

Exemple practice de utilizare a comenzii sudo

Să vedem câteva cazuri reale. unde sudo Face diferența dintre o eroare de permisiuni și o operațiune administrativă corectă.

Actualizarea indexurilor pachetelor în Debian/Ubuntu Fără privilegii, va da erori deoarece nu poate manipula fișiere. /var/lib/apt/listsComanda:

> apt-get update

Se va termina cu mesajele „Permisiune refuzată”.De îndată ce o repeți așa, lucrurile se schimbă:

> sudo apt-get update

Sistemul vă va solicita parola.și dacă utilizatorul dvs. este autorizat în sudoersActualizarea va rula fără probleme. Este un tipar recurent: eroare de permisiuni fără sudoexecuție corectă cu sudo.

Un alt exemplu foarte comun este copierea fișierelor în căile de sistemCa /usr/local/binDacă încerci să copiezi un script acolo cu un simplu:

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

Este normal ca terminalul să se plângă că nu aveți permisiunea de a scrie în directorul respectiv. Dacă repetați operațiunea adăugând sudo:

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

Vi se va solicita parola și, după autentificarea cu succes,Copia va fi făcută și înregistrată ca executată cu privilegii sporite.

De asemenea, puteți combina sudo cu opțiunea -u să execute comenzi specifice ca un alt utilizator, fără a schimba sesiunile sau a utiliza su. De exemplu:

> cine-i așa
> sudo -u pedro whoami

Prima comandă va afișa numele tău de utilizator real., în timp ce al doilea va returna „pedro”, demonstrând că execuția a fost efectuată ca utilizator țintă respectiv.

Acordarea permisiunilor fără parolă și alte opțiuni avansate

Unul dintre cele mai puternice lucruri despre transpirație Această funcție vă permite să ajustați măsura în care este solicitată o parolă și pentru ce comenzi specifice. Uneori, este posibil să doriți ca anumiți utilizatori să poată executa anumite comenzi fără a fi nevoie să introducă parola de fiecare dată, de exemplu, pentru scripturi automate sau butoane de închidere într-un mediu desktop.

Acest lucru se realizează cu eticheta NOPASSWD în regulile de sudoersDe exemplu, dacă vrei să miusuario poate executa /bin/cat cu sudo Fără a fi necesară o parolă, puteți adăuga o linie:

utilizatorul_myTOTAL = NOPASSWD: /bin/cat

În mod similar, i-ați putea permite să gestioneze oprirea echipamentului. fără autentificare repetată, adăugând ceva de genul:

utilizatorul_myTOTAL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

Pentru configurații mai curate și mai scalabileEste recomandabil să folosiți aliasuri. Un exemplu tipic este definirea unui grup de utilizatori, a unui grup de comenzi și, dacă este necesar, a unui alias de utilizator pentru execuție:

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

Cu aceste definiții ai putea scrie apoi Reguli mult mai ușor de citit, cum ar fi:

TOT GRUPUL = PUTERE

Astfel, orice utilizator inclus în alias GRUPO Veți putea opri sau reporni computerul cu sudoși puteți ajusta dacă doriți să solicitați o parolă sau nu NOPASSWD o PASSWDDe asemenea, puteți restricționa utilizarea la anumite gazde cu Host_Alias astfel încât să fie validă doar dintr-o anumită rețea.

dincolo NOPASSWDExistă și alte etichete ca NOEXEC (pentru a împiedica o comandă să lanseze alte programe cu permisiuni ridicate) sau mici curiozități precum adăugarea insults la linie Defaults, astfel încât sudo Voi face o glumă în engleză de fiecare dată când nu reușești să introduci parola.

Toate acestea demonstrează că sudoers este mult mai mult decât un simplu „switch root”Când este configurat corect, îți permite să proiectezi un model de permisiuni foarte granular, adaptat nevoilor tale și cu un nivel de securitate mult superior celui tipic de „intră ca root și fă ce vrei”.

Având un instrument ca sudoînțeles corect și configurat corespunzătorEste aproape obligatoriu pe orice sistem Linux modern unde lucrează mai mulți utilizatori sau unde doriți să minimizați riscurile, chiar dacă sunteți singurul utilizator. Profitând de combinația dintre sudo, /etc/sudoers, grupos como sudo o wheel și etichete avansate, cum ar fi NOPASSWDPoți obține un echilibru foarte rezonabil între confort, control fin și siguranță, fără a fi nevoie să fii constant lipit de o sesiune. root nici să te bazezi doar pe noroc.

utilizator root în Linux
Articol conex:
Utilizator root în Linux: permisiuni, riscuri și cele mai bune practici

Adăugați ca sursă preferată în Google