Sudoers in Ubuntu si CentOS

Blog: OS
Separarea privilegiilor este una dintre principalele paradigme de securitate implementate in sistemele de operare Linux si Unix. Utilizatorii obisnuiti opereaza cu privilegii limitate cu scopul de a limita configurarea doar la mediul lor de lucru si nu la nivelul sistemului de operare.

Notiuni introductive Sudoers:

Separarea privilegiilor este una dintre principalele paradigme de securitate implementate in sistemele de operare Linux si Unix. Utilizatorii obisnuiti opereaza cu privilegii limitate cu scopul de a limita configurarea doar la mediul lor de lucru si nu la nivelul sistemului de operare.

Sunt situatii in care avem nevoie de permisiuni mai mult decât de obicei, pentru instalari/ dezinstalari, update-uri, modificari fisiere din afara directorului nostru /home/user . Putem obtine permisiuni suplimentare atât in linia de comanda cât si in interfata grafica.

Un utilizator cu puteri depline este denumit utilizator root. Acesta este un cont admnistrativ fara restrictiile unui utilizator obisnuit. Utilizatorii pot executa comenzi cu "super-user" sau "root" in diferite moduri.

In acest articol, vom discuta despre cum se obtine in mod corect si in deplina siguranta, privilegii root punând accent pe editarea fisierului /etc/sudoers

Vom realiza acesti pasi pe un server Ubuntu 16.04 dar si pe variantele recente de Linux ar trebui sa functioneze in mod similar.

Acest ghid presupune ca ati finalizat deja configurarea initiala a serverului discutata aici .

Conectati-va la serverul dumneavoastra ca user obisnuit, utilizator non – root si continuati cu pasii urmatori:

Cum obtineti privilegiile utilizatorului root:

Sunt trei modalitati de baza pentru a obtine privilegiile utilizatorului root care variaza in functie de nivelul lor de complexitat

➢ Logati-va ca root

Cel mai simplu mod de a obtine privilegii de root este de a va conecta din start ca utilizator root.

Daca va conectati pe o masina locala folositi la logare numele de utilizator "root" si introduceti parola root când va este solicitata.

Daca va conectati prin SSH, specificati utilizatorul root inainte de adresa IP sau numele domeniului in sirul conexiuni SSH.

ssh root@server_domain_or_IP

Daca nu ati configurat cheile SSH pentru utilizatorul root, introduceti parola de root când vi se solicita.

➢ Folosirea comenzii "su" pentru a deveni utilizator root

SU( swich user sau substitute user) este comanda cu ajutorul careia putem schimba contul curent.

Logarea cu utilizatorul root nu este de obicei recomandata deoarece folosirea sistemului pentru sarcini non-adminstrative este facila dar in acelasi timp periculoasa.

Urmatoarea modalitate de a obtine privilegii de super user va permite sa deveniti utilizator root in orice moment.

Pentru a obtine acest utilizator prin folosirea comenzii su tastati:

su - 

Acum vi se va solicita parola utilizatorului root si veti fi transferat intr-o sesiune shell cu drepturi de root.

Dupa ce ati terminat sarciniile care necesita avantajele utilizatorului root reveniti la shell-ul utilizatorului normal.

exit

➢ Folosirea comenzii "sudo" pentru executarea comenzilor ca utilizator root

Ultima si cea mai complexa modalitate de a obtine avantajele utilizatorului root este prin folosirea comenzii sudo.

Comanda sudo permite executarea unei comenzi ca utilizator root fara a fi nevoie sa cream un nou shell. Aceasta comanda se executa astfel:

sudo command_to_execute

Spre deosebire de comanda su, comanda sudo va solicita parola utilizatorului care a executat comanda si nu parola utilizatorului root.

Ce este Visudo?

Comanda visudo este configurata printr-un fisier localizat la /etc/sudoers.

Atentie!Nu modificati niciodata acest fisier cu un editor de text normal!Folositi intotdeauna comanda visudo !
Pentru ca sintaxele necorespunzatoare in fisierul /etc/sudoers va pot lasa cu un sistem in care este imposibil sa obtineti privilegii elevate, este important sa editati fisierele folosind comanda visudo.

Comanda visudo, deschide un editor de text normal dar valideaza sintaxa fisierului dupa salvare. Acest lucru previne erorile de configurare de la blocarea operatiilor sudo, care ar putea fi singura modalitate de a obtine privilegii de root.

In mod obisnuit, visudo deschide fisierul /etc/sudoers cu editorul de text vi. Cu toate acestea Ubuntu are configurat visudo sa utilizeze editorul de text nano.

Daca doriti sa-l  schimbati in vi, folositi urmatoarea comanda:

sudo update-alternatives --config editor

Output
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path    Priority   Status
------------------------------------------------------------
* 0 /bin/nano 40  auto mode
  1 /bin/ed -100 manual mode
  2 /bin/nano 40  manual mode
  3 /usr/bin/vim.basic   30  manual mode
  4 /usr/bin/vim.tiny    10  manual mode

Press <enter> to keep the current choice[*], or type selection number:

Selectati numarul care corespunde cu alegerea dumneavoastra.

In CentOS, puteti modifica aceasta valoare prin adaugarea liniei urmatoare in ~/.bashrc:

export EDITOR=`which name_of_editor` 

Aplicati modificarile:

~/.bashrc 

Dupa ce ati configurat visudo, executati comanda /etc/sudoers pentru a accesa fisierul:

~sudo visudo

Cum modificati fisierul sudoers:

Fisierul /etc/sudoers va fi afisat in editorul de text selectat.

Am copiat si inserat fisierul din Ubuntu 16.04 si am eliminat comentariile. Fisierul CentOS /etc/sudoers are mai multe linii, pe care nu le vom discuta in acest ghid.

/etc/sudoers
Defaults  env_reset
Defaults  mail_badpass
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

Sa aruncam o privire la aceste linii de comanda:

Liniile standard:

  • Prima linie "Defaults env_reset" reseteaza terminalul pentru a elimina toate variabilele utilizatorului. Aceasta este o masura de siguranta utilizata pentru a şterge din memoria sudo variabilele potential daunatoare.
  • A doua linie “Defaults mail_badpass” solicita sistemului sa trimita notificari pentru incercari repetate de introducere greşita a parolei sudo adresei de mail a utilizatorului. Standard, acesta este un cont root.
  • A treia linie, care incepe cu "Defaults secure_path=...", specifica calea ( locurile in care sistemul de fişiere in care sistemul de operare va cauta aplicatii) care va fi folosita pentru aplicatii sudo. Acest lucru previne utilizarea comenzilor care pot fi daunatoare.

Liniile de permisii ale utilizatorului: 

  • Cea de a patra linie, care impune privilegii sudo utilizatorului root , este diferita de liniile precedente . Sa aruncam o privire :

~root ALL=(ALL:ALL) ALL

  • Primul câmp indica numele utilizatorului la care se va aplica regula ( root) .

~demo  ALL=(ALL:ALL) ALL

  • Primul" ALL" indica faptul ca aceasta regula se aplica tuturor gazdelor .

~demo ALL=(ALL:ALL) ALL

  • Acest " ALL" indica faptul ca utilizatorul root poate rula comenzi ca toti utilizatorii .

~demo ALL=(ALL:ALL) ALL

  • Acest " ALL" indica faptul ca utilizatorul root poate rula comenzi ca toate grupurile .

~demo ALL=(ALL:ALL) ALL

  • Ultimul "ALL"indica ca aceste reguli se aplica tuturor comenzilor .

Acest lucru inseamna ca utilizatorul root poate executa orice comanda folosind sudo , atâta timp cât acesta ofera parola.

Liniile de permisii ale grupului:

Urmatoarele doua linii sunt similare cu liniile de permisie ale utilizatorului dar specifica reguli sudo pentru grupuri.

Numele incepând cu  "%" indica numele de grup.

Aici, observam ca grupul “admin” poate executa orice comanda folosind orice utilizator sau host.

Linia /etc/sudoers.d:

Ultima linie ar putea arata ca un comentariu la prima vedere :

/etc/sudoers
. . .
#includedir /etc/sudoers.d

Incepe cu un # care de obicei indica un comentariu insa aceasta linie indica de fapt ca fişierele din directorul /etc/sudoers vor fi folosite şi aplicate.

Fişierele din acel director urmeaza aceleaşi reguli ca şi fişierul /etc/sudoers in sine  . Orice fişier care nu se termina in ~ şi nu are .  va fi citit şi aplicat in configuratia sudo .

Acest lucru este destinat aplicatiilor care modifica permisiile sudo la instalare. Punerea tuturor fisierelor asociate intr-un singur fisier al directorului /etc/sudoers.d faciliteaza corelatia permisiilor asociate fiecarui utilizator si poate indversa cu usurinta datele de conectare, fara sa manipuleze direct fisierul /etc/sudoers.

Ca si in cazul fisierului /etc/sudoers trebuie sa editati fisiere in cadrul directorului /etc/sudoers.d cu visudo. Sintaxa pentru editarea acestor fisiere este:

~sudo visudo -f /etc/sudoers.d/file_to_edit

Cum setam permisii pentru utilizatori sudo:

Cea mai uzuala comanda pe care utilizatorii doresc sa o efectueze atunci când gestioneaza permisii sudo este de a acorda unui nou utilizator permisii generale sudo. Acest lucru este util daca doriti sa setati unui cont de utilizator acces administrativ complet la sistem.

Cel mai simplu mod de a face acest lucru pe un sistem configurat pentru un grup administrativ de uz general, este sa adaugati utilizatorul in cauza in acel grup.

De exemplu, pe Ubuntu 16.04 grupul sudo are permisii depline de administrator. Putem obtine aceleasi permisii pentru un utilizator prin adaugarea lui ca grup astfel:

~sudo usermod -aG sudo username

Comanda gpasswd poate fi de asemenea utilizata:

~sudo gpasswd -a username sudo

Ambele comenzi realizeaza acelasi lucru.

In CentOS grupul wheel este de obicei in locul grupului sudo.

~sudo usermod -aG wheel username

Sau folosind gpasswd:

~sudo gpasswd -a username wheel

In CentOS, daca adaugarea utilizatorului in grup nu are efect imediat, trebuie sa editati fisierul /etc/sudoers si sa activati numele grupului.

~sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

Cum creem reguli personalizate:

Acum ca ne-am familiarizat, cu sintaxele generale ale fisierului, sa creem niste reguli noi.

Cum creem pseudonime ( Aliases):

Fisierele sudoers pot fi organizate mai eficient prin gruparea diferitelor tipuri de “alias”. De exemplu, putem creea trei grupuri diferite de utilizatori, cu suprapunerea membrilor.

/etc/sudoers
. . .
User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric, 
User_Alias GROUPTHREE = doris, felicia, grant
. . .

Daca numele grupurilor incep cu o majuscula, atunci putem permite membrilor grupului GROUPTWO sa-si actualizeze baza de date prin creerea urmatoarelor reguli:

/etc/sudoers
. . .
GROUPTWO    ALL = /usr/bin/apt-get update
. . .

Daca nu specificam un utilizator/ grup pentru a rula, ca mai sus, utilizatorului sudo i se aplica implicit regulile sudo.

Putem permite membrilor GROUPTHREE sa porneasca sau sa opreasca unitatea prin creerea comenzii “command alias” si utilizarea comenzii pentru GROUPTHREE

/etc/sudoers
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE  ALL = POWER
. . .

Putem creea un pseudonim numit POWER care contine comenzi pentru a inchide si reporni aparatul. Apoi vom permite membrilor GROUPTHREE sa execute aceste comenzi.

Putem de asemenea sa creem pseudonimul “ Run as” care poate inlocui portiunea regulii care specifica utilizatorului sa execute comanda ca:

/etc/sudoers
. . .
Runas_Alias     WEB = www-data, apache
GROUPONE    ALL = (WEB) ALL
. . .

Acest lucru va permite oricarui utilizator din grupul GROUPONE sa execute comenzi, ca utilizator www de date sau apache.

Retineti ca normele viitoare vor inlocui regulile anterioare, atunci când exista un conflict intre cele doua.

Cum blocam regulile:

Exista o serie de moduri in care puteti detine control asupra modului in care sudo reactioneaza. De exemplu, comanda updated asociata cu pachetul mlocate este relativ inofensiva pe un sistem cu un singur utilizator. Pentru a permite utilizatorilor sa execute aceasta comanda cu permisii de root fara parola, este nevoie de o regula ca aceasta:

/etc/sudoers
. . .
GROUPONE    ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD este un “tag” ( eticheta) care inseamna ca parola nu este solicitata. PASSWD este “tag”-ul companion care solicita parola. Eticheta este relevanta pentru cazul in care nu exita alta eticheta in josul liniei. De exemplu, putem avea o linie de genul:

/etc/sudoers
. . .
GROUPTWO    ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

O alta eticheta este NOEXEC care poate fi folosita pentru a preveni comportamentul periculos in anumite programe.De exemplu, unele programe ca “less” pot da nastere altor comenzi prin tastarea urmatoarei comenzi in cadrul interfetei lor:

!command_to_run

Practic executarea oricarei comenzi data de utilizatorul cu aceleasi permisiuni mai putin “less” poate fi periculos. Pentru restrictionarea acesteia putem folosi urmatoarea linie:

/etc/sudoers
. . .
username  ALL = NOEXEC: /usr/bin/less
. . .

Informatii diverse:

Exista câteva informatii care pot fi utile atunci când se lucreaza cu sudo. Daca ati specificat un utilizator sau un grup de utilizatori sa “ run as” in fisierul de configurare, puteti executa comenzi precum acei utilizatori prin folosirea etichetelor “ –u” sau “ –g” respectiv:

sudo -u run_as_user command
sudo -g run_as_group command

Pentru comoditate, sudo va salva detaliile de autentificare pentru o anumita perioada de timp, intr-un terminal. Acest lucru inseamna ca nu trebuie sa introduceti parola din nou pâna când cronometrul va expira. Din motive de siguranta daca doriti sa stergeti acest cronometru când terminati de executat comenzile administrative, puteti rula comanda:

sudo -k

In cazul in care doriti sa setati comanda sudo astfel incât sa nu vi se solicite ulterior, sau sa reinnoiti sesiunea sudo, puteti tasta:

sudo -v

Vi se va solicita parola, care va fi salvata in memoria cache pentru utilizari ulterioare pâna când va expira intervalul de timp.

Daca pur si simplu, doriti sa aflati ce permisii sunt definite pentru contul dumneavoastra de utilizator, tastati:

sudo -l

Aceasta comanda va lista toate regulile din fisierul /etc/sudoers care se aplica contului tau de utilizator. Acest lucru, va va oferi o imagine de ansamblu asupra a ce sau ce nu va este permis sa faceti cu sudo ca orice utilizator.

Vor fi multe dati in care veti esua sa executati o comanda, deoarece nu ati folosit sudo initial. Pentru a evita sa reintroduceti comanda, puteti profita de o functionalitate bash “ repeat the last command”

sudo !!

Dublarea semnului exclamarii indica ca va repeta ultima comanda. Am folosit sudo pentru a schimba starea comenzii din comanda neprivilegiata in privilegiata.

Putem adauga urmatoarea linie in fisierul /etc/sudoers/ cu visudo:

sudo visudo
/etc/sudoers
. . .
Defaults    insults
. . .

Acest lucru va determina sudo sa returneze o eroare atunci când utilizatorul introduce o parola gresita.

Putem folosi comanda sudo –k pentru a sterge parola sudo anterioara salvata in memoria cache a terminalul astfel:

sudo -k
sudo ls

Output
[sudo] password for demo:    # enter an incorrect password here to see the results
Your mind just hasn't been the same since the electro-shock, has it?
[sudo] password for demo: 
My mind is going. I can feel it.

Concluzie:

Parcurgând acest ghid inseamna ca in acest moment cunoasteti modul in care se citeste si modifica fisierul sudoers dar si modul in care puteti obtine permisiuni de root

Din aceeasi categorie

Te muti la noi?

Migrarea catre un nou furnizor de hosting poate fi extrem de complicata . Fii relaxat si lasa-i expertii nostri sa o faca! Vom muta site-ul existent în 48 de ore, fara intrerupere . Inclus GRATUIT la achizitionarea oricarui pachet de gazduire BTS Telecom.