- sudo vă permite să executați comenzi ca root sau ca alți utilizatori cu un control fin al permisiunilor.
- Fișierele /etc/sudoers și /etc/sudoers.d definesc cine poate folosi sudo și pentru ce comenzi.
- Visudo este modalitatea sigură de a edita fișiere sudoer, evitând erorile care pot strica sistemul.
- Grupurile de comenzi și aliasurile vă permit să delegați sarcini administrative fără a acorda acces complet.
Dacă folosești Linux zilnic, mai devreme sau mai târziu vei da peste comanda `sudo` . Este prefixul pe care îl vezi înaintea multor comenzi importante, aproape întotdeauna însoțit de o solicitare de parolă. Înțelegerea a ceea ce face, cum funcționează și ce riscuri prezintă este esențială pentru a evita defectarea accidentală a sistemului... și pentru a lucra confortabil fără a trece constant la root.
În loc să vă conectați direct ca superutilizator, practica obișnuită (și recomandată) este să vă păstrați contul de utilizator normal și, numai atunci când este necesar, crește temporar privilegiile cu transpirațieÎn spatele acestui gest simplu se află un întreg sistem de control asupra permisiunilor, timpilor, grupurilor și regulilor din fișier. /etc/sudoers ceea ce merită știut în detaliu, mai ales dacă gestionați mai mulți utilizatori sau servere.
Ce este mai exact sudo în Linux?
Comanda `sudo` este un instrument care permite unui utilizator să ruleze programe ca și cum ar fi un alt utilizator de sistem, de obicei root (superutilizatorul) , dar și orice alt cont dacă este configurat corespunzător. Deși se spune popular că înseamnă „superutilizator do”, multe surse de documentație se referă și la ideea de „substitute user and do” : înlocuirea temporară a utilizatorului sub care este executată o comandă.
În orice distribuție modernă (Debian, Ubuntu, derivate, multe bazate pe SUSE etc.), sudo vine preinstalat și face parte din fluxul de lucru normal de administrare; puteți consulta sfaturile și trucurile software Linux pentru mai multe informații . Un utilizator standard lucrează cu permisiuni limitate, în timp ce contul de root are control deplin asupra sistemului. Sudo oferă un echilibru: anumiți utilizatori pot efectua sarcini administrative fără a se conecta ca root , reducând riscurile și lăsând o evidență clară a acțiunilor lor.
Un detaliu important este că, deși sudo vă permite să rulați comenzi ca root, nu înseamnă neapărat că vă asumați toate privilegiile de root la nivel global . În schimb, acordă privilegii pentru fiecare execuție specifică, urmând regulile definite în fișierul de configurare. Acest lucru permite o limitare semnificativă a ceea ce poate face fiecare utilizator cu sudo.
Această filozofie de a nu lucra întotdeauna ca root este esențială pentru securitate. Cu cât petreci mai puțin timp cu privilegii complete, cu atât este mai puțin probabil să spargi ceva sau ca programele malware să îți exploateze sesiunea . De aceea, comanda sudo este atât de crucială în munca zilnică a oricărui administrator Linux sau utilizator avansat.
Cum funcționează sudo la nivel practic
Utilizarea de bază este simplă: plasați sudo în fața comenzii pe care doriți să o executați cu privilegii sporite. De exemplu, pentru a crea un utilizator dintr-un cont normal, ați folosi ceva de genul sudo useradd nombreDacă ai încercat să arunci useradd Fără sudo, cel mai probabil veți primi o eroare de permisiuni sau un mesaj de tip „Permisiune refuzată”.
Când invocați sudo Pentru prima dată într-o sesiune terminală, sistemul vă va întreba parola utilizatorului cu care v-ați conectatnu parola de root (cu excepția configurațiilor speciale din unele distribuții). Dacă o introduceți corect și sunteți autorizat în /etc/sudoersComanda este executată cu privilegiile specificate de regulile sudo.
În mod implicit, autentificarea sudo are o perioadă de valabilitate limitată, de obicei în jur de 15 minute . Atâta timp cât nu închideți sesiunea terminalului și nu a trecut acest timp, puteți continua să utilizați sudo fără a vi se solicita parola la fiecare comandă. Odată ce limita de timp expiră, următoarea comandă sudo o va solicita din nou.
Toate aceste comportamente sunt definite și controlate în fișier. /etc/sudoers și în fișierele incluse în /etc/sudoers.d/. Doar utilizatorii și grupurile listate acolo cu permisiunile corespunzătoare pot rula sudoAcest lucru permite o ajustare foarte fină a persoanelor care pot face ce, pe ce mașini și sub ce comenzi.
Sintaxa generală a comenzii sudo și opțiunile tastei
Cea mai obișnuită metodă de utilizare a comenzii sudo este simplă:
sudo comando
Sub capotă, sudo acceptă mai multe opțiuni care vă permit să verificați privilegiile, să vizualizați versiunea, să forțați verificări ale parolei și multe altele. Unele dintre cele mai comune în multe distribuții sunt:
- -h: afișează un scurt mesaj de ajutor cu sintaxa și principalele opțiuni disponibile în sudo.
- -V: afișează informații despre versiune și detalii despre compilare ale programului sudo.
- -vreînnoiește „tichetul” de autentificare, prelungirea perioadei de valabilitate fără a fi nevoie să execute ea însăși o comandă privilegiată.
- -k: invalidează privilegiile sudo curente, astfel încât data viitoare când îl utilizați, vă va cere parola indiferent de situație.
- -llistă Ce privilegii are utilizatorul curent? în funcție de configurația sudoers (ce comenzi poate executa, pe ce gazde, ca ce utilizatori etc.).
De aici, puteți combina sudo cu practic orice comandă care necesită privilegii de administrator: manageri de pachete, instrumente de rețea, servicii de sistem, utilitare pentru conturi de utilizator, modificări ale proprietarului fișierelor ... lista este practic nesfârșită.
Exemple practice de utilizare a comenzii sudo
Una dintre cele mai comune operațiuni care necesită privilegii ridicate este gestionează pachete softwareÎn distribuțiile bazate pe SUSE, este frecvent utilizat zypper, în timp ce în Debian/Ubuntu se folosește următorul cod aptÎn ambele cazuri, când operațiunea modifică sistemul (instalare, actualizare, eliminare), aveți nevoie de sudo.
De exemplu, pentru a instala un pachet cu zypper, ați folosi ceva de genul acesta sudo zypper install nombre-paqueteși cu ceva apt de genul sudo apt-get update urmat de sudo apt-get upgradeDacă încercați să actualizați fără sudo, veți vedea erori de blocare a fișierelor de sistem sau de permisiuni, deoarece numai un utilizator cu privilegiile corespunzătoare poate accesa aceste directoare.
O altă combinație foarte frecventă este transpirația cu systemctlInstrumentul pentru gestionarea serviciilor pe sistemele cu systemd. Pentru a porni sau reporni un serviciu precum Apache, de exemplu, ați folosi ceva de genul sudo systemctl restart apache2Totuși, verificarea stării unui serviciu, care nu implică modificări, se poate face adesea fără sudo: systemctl status NetworkManager De obicei, este accesibil cu permisiuni normale.
Când trebuie să modificați conturile de utilizator, comanda clasică este usermodDa, mereu sub transpirație. De exemplu, ai putea definește numărul de zile după expirarea parolei înainte de dezactivarea unui cont, cu o ordine de tip sudo usermod -f 30 nombreusuario, unde 30 ar fi zilele marjinale.
O altă zonă strâns legată de sud este cea a Schimbați proprietarul fișierelor și directoarelor cu chownDacă doriți ca un anumit utilizator să devină proprietarul unui întreg arbore din /home/test/tux-filesAi lansa ceva de genul sudo chown -R tux /home/test/tux-filesApoi, ați putea verifica rezultatul cu un ls -l pentru a verifica dacă proprietatea a fost actualizată corect.
Execută comenzile ca alți utilizatori cu sudo (-u, -s, -i)
Pe lângă executarea comenzilor ca root, sudo vă permite să executați comenzi ca alți utilizatori specifici . Acest lucru se face folosind opțiunea -u . Un exemplu simplu ar fi verificarea utilizatorului real care execută o comandă:
whoami returnează utilizatorul curent, în timp ce sudo -u pedro whoami Ar afișa „pedro” dacă configurația vă permite să acționați ca utilizatorul respectiv. Această metodă este foarte utilă pentru testarea permisiunilor, căilor sau mediilor fără a fi nevoie să vă conectați complet la contul respectiv.
Când vrei o coajă interactivă În cazul privilegiilor ridicate, intră în joc două variante foarte tipice: sudo -s y sudo -iPrimul deschide o shell ca utilizator țintă, dar moștenirea mediului utilizatorului curent (variabile, directorul curent etc.). Al doilea imită o interfață de conectare a utilizatorului țintă, încărcarea scripturilor sale de pornire și utilizarea directorului $HOME.
De exemplu, dacă alergi sudo -s -u tuxAi apărea cu o shell similară cu Tux, dar din directorul în care te afli înainte, cu o mare parte din mediul tău intact. În schimb, cu sudo -i -u tux Ai intra într-o sesiune mult mai asemănător cu situația în care Tux s-ar fi conectat direct, cu profilurile sale (.profile, .bash_profile, etc.) încărcate.
În ambele cazuri, comenzile executate sunt înregistrate în istoric , ceea ce este interesant din punct de vedere al trasabilității: puteți oricând să revizuiți ce s-a făcut cu privilegii ridicate, cine a făcut-o și când.
Diferențele dintre transpirație și
În Linux, atât `su`, cât și ` sudo` vă permit să rulați comenzi cu privilegiile unui alt utilizator, cel mai adesea root, dar modul în care lucrați cu fiecare este destul de diferit. Înțelegerea acestei diferențe vă ajută să decideți când să le utilizați pe fiecare.
Comanda su (utilizator înlocuitor) este folosit pentru schimbarea utilizatorilor în cadrul aceluiași terminalDacă faci su pedroVi se va cere parola lui Pedro; după introducerea ei, shell-ul dvs. va fi sub acel cont. Sesiunea utilizatorului inițial nu dispare; aceasta rămâne „sub” cea nouă. Când tastați exitPărăsești sesiunea lui Pedro și te întorci la cea anterioară.
Dacă folosești su fără a specifica utilizatorul, în mod implicit Încearcă să treci la root, cerând parola de root. Acest lucru are un efect practic semnificativ: mulți oameni ajung să lucreze ca root pentru perioade lungi de timp, cu toate riscurile pe care le implică acest lucru, pur și simplu pentru că este mai convenabil decât să tasteze constant `sudo`.
În schimb, sudo oferă o abordare diferită: nu schimbi permanent sesiunile sau utilizatorii , ci îți ridici privilegiile doar pentru comenzi specifice (sau pentru un anumit shell). Autentificarea se face cu propria parolă, iar controlul asupra cine poate face ce este gestionat central în sudoers.
Prin urmare, în mediile în care securitatea este o prioritate, nu se recomandă conectarea directă ca root sau utilizarea întotdeauna a comenzii `su`, fiind de preferat utilizarea sistematică a comenzii `sudo` . În acest fel, fiecare acțiune privilegiată este auditată, reducând potențialele daune cauzate de o comandă executată prost sau de o exploatare a sistemului.
Fișierul /etc/sudoers: inima configurației sudo
Întregul comportament al comenzii sudo (cine îl poate folosi, cum ar fi ce utilizatori, pe ce gazde și cu ce comenzi) este definit în fișier. /etc/sudoers și în fișierele incluse de acolo, de obicei prin intermediul unei directive de tipul #includedir /etc/sudoers.dEste un fișier foarte sensibil: O eroare de sintaxă te poate lăsa fără sudodeci trebuie manipulat cu grijă.
Un exemplu tipic de conținut pe care îl veți vedea în sudoers este o linie de genul root ALL=(ALL:ALL) ALLAceasta înseamnă că utilizatorul root poate executa orice comandă pe orice mașină, la fel ca orice alt utilizator și grup. Regulile bazate pe grupuri sunt, de asemenea, comune, cum ar fi %sudo ALL=(ALL:ALL) ALL o %admin ALL=(ALL) ALL, unde prefixul % indică faptul că este un grup din cadrul sistemului.
Ideea este ca toți utilizatorii care fac parte din grupul sudo sau admin să moștenească acele privilegii de a utiliza sudo. Astfel, în Ubuntu, primul utilizator creat în timpul instalării este de obicei adăugat automat la grupul sudo, obținând permisiuni administrative complete fără a fi nevoie să se utilizeze direct contul de root.
O altă practică obișnuită este să evitați atingerea excesivă a fișierului principal și, în schimb, creați fișiere specifice în cadrul /etc/sudoers.d/Datorită liniei #includedir /etc/sudoers.dOrice fișier valid din directorul respectiv este încărcat ca parte a configurației totale sudoers, facilitând organizarea regulilor pe servicii, departamente, proiecte etc.
Cum să editezi în siguranță fișiere sudoer cu Visudo
Pentru a modifica fișiere sudoer, nu le poți deschide pur și simplu cu editorul tău preferat, deoarece O eroare de sintaxă poate bloca sudo și te va lăsa într-o mare încurcătură. Modul corect este să folosești întotdeauna comanda visudo, care este responsabil pentru deschiderea fișierului într-un editor (vi, nano, orice ați configurat) și, la salvare, verificarea corectitudinii sintaxei înainte de aplicarea modificărilor.
Dacă doriți să editați fișierul principal, pur și simplu lansați sudo visudoDacă aveți nevoie să creați sau să modificați un anumit fișier în cadrul /etc/sudoers.d/Puteți indica acest lucru cu opțiunea -f, de exemplu: sudo visudo -f /etc/sudoers.d/networkingAcest lucru menține fișierul general mai curat și reduce riscul de a-l strica.
Când recenzezi sudoers, vei întâlni multe rânduri comentate care încep cu #Acelea sunt explicații sau reguli dezactivateUna în special este adesea interesantă în mai multe distribuții: cea care începe cu %wheelDacă îndepărtați # Din acea linie și dacă adăugați utilizatori la grupul wheel, le veți acorda drepturi sudo conform regulii respective.
Ca sfat, este o idee bună să aveți întotdeauna o altă sesiune root sau o consolă cu o comandă rapidă deschisă în timp ce lucrați cu sudoere, în cazul în care ceva nu merge bine. Ruperea comenzii sudo fără o modalitate alternativă de a o remedia vă poate împiedica să utilizați privilegii ridicate din contul dvs. de utilizator normal, forțându-vă să recurgeți la modurile de salvare.
Gestionează cine are sudo: grupuri și utilizatori
În practica zilnică, cea mai convenabilă modalitate de a decide cine poate folosi Sudo cu puteri depline este de obicei prin grupuri administrativeDupă cum am menționat, este foarte comun să existe un grup numit sudo o admin o wheel, ale cărui reguli din sudoers oferă privilegii largi membrilor săi.
Pentru a vedea cine face parte din grupul sudo într-un sistem tipic, puteți utiliza un grep pe /etc/groupDe exemplu, grep 'sudo' /etc/group Va lista utilizatorii care se află în prezent în acel grup. Este o modalitate rapidă de a vedea cine are acces potențial la sudo.
Dacă doriți un anumit utilizator, să zicem proiect de legeDacă aveți privilegii sudo, o opțiune este să îl adăugați la grupul corespunzător folosind comenzi precum adduser bill sudo sau echivalentul din distribuția ta. Din acel moment și conform regulilor sudoers pentru acel grup, Bill va putea folosi sudo la fel ca restul administratorilor.
În mod similar, dacă în orice moment trebuie să revocați acele permisiuni, îl puteți elimina din grup, de exemplu cu deluser bill sudoOdată ce operațiunea este finalizată, Bill nu va mai putea efectua acțiuni care necesită sudo, cu excepția cazului în care are o regulă specifică suplimentară în sudoers.
Această abordare de delegare a controlului sudo către grupuri este foarte utilă atunci când gestionați mai mulți utilizatori sau o echipă de lucru , deoarece vă permite să acordați și să revocați permisiunile centralizat, fără a fi nevoie să editați constant fișierul sudoers pentru fiecare nume individual.
Acordați permisiuni specifice cu sudoeri (fără a oferi „mârziere”)
Uneori nu vrei ca un utilizator să aibă acces complet de root , ci doar acces la un set limitat de comenzi. Aici devine deosebit de puternic sudoers, deoarece îți permite să definești aliasuri de comenzi și reguli foarte specifice pentru grupuri sau utilizatori.
Imaginează-ți că vrei să creezi un grup, de exemplu netadmin, ai cărui membri pot executa anumite comenzi de rețea (cum ar fi tcpdump sau administrarea serverului web) cu privilegii, dar nimic mai mult. Ați putea defini aliasuri de comandă într-un fișier de /etc/sudoers.d/ de acest tip, folosind Visudo pentru a-l edita.
În acel fișier, aliasurile pot fi declarate ca Cmnd_Alias CAPTURE = /usr/sbin/tcpdump pentru capturi de trafic sau un alias Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd pentru a gestiona serverul web și parolele aferente. Apoi, un alias mai general, cum ar fi NETALL = CAPTURE, SERVERS Combină ambele.
De acolo, regula %netadmin ALL=NETALL Aceasta indică faptul că orice utilizator din grupul netadmin poate executa toate comenzile incluse în NETALL (adică cele din CAPTURE și SERVERS) cu sudo. Următorul pas ar fi adăugarea lui bill la grupul netadmin cu ceva de genul sudo adduser bill netadmin, și gata.
Cheia este că doar acele comenzi specifice vor fi executate cu privilegii . Dacă Bill încearcă să utilizeze sudo pentru orice lucru care nu este acoperit de NETALL, sistemul o va refuza. Aceasta este o abordare foarte recomandată atunci când doriți să distribuiți responsabilități tehnice fără a acorda acces complet de administrator.
Permiteți sudo fără parolă în cazuri foarte specifice
Un alt scenariu comun este dorința ca un utilizator să poată executa o singură comandă cu `sudo` fără a fi nevoie să introducă parola . Acest lucru poate fi util pentru scripturi sau utilitare specifice care sunt rulate frecvent și unde nu are sens să se repete autentificarea iar și iar.
Cea mai sigură modalitate de a aborda acest lucru este de a încapsula comanda respectivă într-un script deținut de root, cu permisiuni restricționateDe exemplu, creați un comando.sh, apoi îi ajustați proprietarul și permisiunile cu ceva de genul sudo chown root:root comando.sh y sudo chmod 700 comando.shÎn acest fel, doar root îl poate modifica și rula.
Apoi, în sudoers, definești o regulă astfel încât utilizatorul în cauză să o poată executa comando.sh Fără parolă. Ceva de genul nombredeusuario ALL=(ALL) NOPASSWD: /home/nombredeusuario/comando.sh Ar permite utilizatorului respectiv să lanseze scriptul cu sudo fără a i se solicita parola.
Este important de subliniat că regulile NOPASSWD nu ar trebui utilizate excesiv . De fiecare dată când permiteți `sudo` fără parolă, deschideți o ușă care ar putea fi exploatată dacă cineva obține acces la utilizator sau manipulează contextul în care este executată comanda. Cel mai bine este să le utilizați doar în cazuri foarte specifice și auditate.
Chiar și așa, pentru sarcini repetitive și automatizate sau pentru anumite comenzi extrem de controlate, această tehnică este incredibil de practică. Cheia este limitarea domeniului său de aplicare: este mai bine să acordați `sudo` fără parolă unei comenzi foarte specifice decât unui întreg interpretor de comenzi.
Alternative și complemente la sudo: doas și alte abordări
În unele medii, doas devine popular ca o alternativă ușoară la sudo. Filosofia sa este similară (permițând executarea comenzilor cu privilegiile altui utilizator), dar cu o configurație mai simplă și un fișier binar foarte mic , ceea ce îl face deosebit de potrivit pentru sistemele minimaliste.
DOAS nu este de obicei instalat în mod implicit, așa că ar trebui să îl adăugați din managerul de pachete și apoi să creați fișierul de configurare. /etc/doas.confUn exemplu simplu de regulă ar fi ceva de genul: permit nopass manz, care autorizează utilizatorul manz să utilizeze doas fără a introduce o parolă pentru a-i acorda privilegii la administrator.
Spre deosebire de sudoer, unde poți defini aliasuri și reguli destul de complexe, doas optează pentru un set mai mic de directive , prioritizând simplitatea. Poți seta permisiuni specifice, refuza explicit, limita comenzi etc., dar fără aceeași cantitate de „înflorire” pe care o permite sudo.
Nu este vorba că unul este mai bun decât celălalt în termeni absoluți, ci că în unele cazuri, doas-urile pot fi suficiente și mai convenabile , în timp ce în medii mari sau controlate foarte granular, sudo rămâne cea mai flexibilă și cunoscută opțiune.
Indiferent de instrumentul ales, ideea de bază este aceeași: să nu lucrezi ca root tot timpul , ci să utilizezi mecanisme controlate de escaladare a privilegiilor, cu reguli clare și jurnale ale a ceea ce se face.
Având în vedere toate acestea, este clar că comanda `sudo` este mult mai mult decât un simplu prefix pentru comenzile „periculoase”: este o componentă centrală a securității și administrării zilnice în Linux . Înțelegerea opțiunilor sale, stăpânirea fișierului `sudoers`, cunoașterea momentului în care să utilizați `sudo`, a modului de restricționare a anumitor comenzi și a momentului în care să permiteți excepții fără parolă vă oferă un control mult mai fin asupra sistemului dvs. și a ceea ce pot face alți utilizatori pe acesta.
