Ce înseamnă Sudo i? Tot ce aveți nevoie pentru a înțelege sudo vs su pe Ubuntu Linux. Configurarea sudo și a permisiunilor pentru a rula diverse comenzi

Din cele mai vechi timpuri, mulți au fost derutați de varietatea opțiunilor de securitate atunci când efectuează operațiuni cu privilegii maxime. De exemplu, în documentația oficială Ubuntu este recomandat să folosiți ceva de genul sudo nano ca o comandă de editare și în numeroase manuale pentru amatori (în stilul „5 trucuri în linia de comandă care o vor surprinde pe bunica”) pentru a obține un shell rădăcină. este sugerat să scrieți sudo su - voi încerca să explic de ce această stare de lucruri mi se pare greșită.

Din punct de vedere istoric, singura modalitate universală de a executa o comandă ca alt utilizator pe Unix a fost cu programul su. Lansat fără parametri, a cerut parola de superutilizator și, dacă a avut succes, a înlocuit pur și simplu numele de utilizator actual cu root, lăsând aproape toate variabilele de mediu de la vechiul utilizator (cu excepția PATH, USER și încă câteva, vezi man su din distribuția ta ). Ar fi mai corect să-l rulați ca su - caz în care shell-ul ar primi și mediul corect. Cu opțiunea -c puteți rula comanda: su -c "vim /etc/fstab" .

În acest caz, utilizatorii de încredere trebuiau să-și amintească parola root, iar toți utilizatorii listați în grupul „roată” (adică în grupul ai cărui membri puteau rula comanda su și deveni superutilizator) aveau același acces nerestricționat la întreg sistem, care era o problemă serioasă de securitate.

Apoi a venit comanda sudo și a fost o descoperire. Acum administratorul ar putea specifica o listă de comenzi permise pentru fiecare utilizator (sau grup de utilizatori), fișiere disponibile pentru editare, variabile speciale de mediu și multe altele (toată această frumusețe este controlată din /etc/sudoers, vezi man sudoers din distribuția ta) . Când este lansat, sudo cere utilizatorului propria sa parolă, nu parola root. Un shell complet poate fi obținut folosind „sudo -i”

De remarcat este comanda specială sudoedit, care lansează în siguranță editorul specificat în variabila de mediu $EDITOR. Cu o schemă mai tradițională, editarea fișierelor a fost făcută cam așa:
sudo vi /etc/fstab

Lansat în acest fel, vi a moștenit shell-ul cu drepturi nerestricționate și prin:! utilizatorul putea rula orice comandă (cu excepția cazului în care, desigur, administratorul s-a ocupat de asta în prealabil) și să deschidă orice fișier.

Sudoedit verifică dacă acest utilizator poate modifica un anumit fișier, apoi copiază fișierul specificat într-un director temporar, îl deschide într-un editor (care moștenește drepturile utilizatorului, nu root), iar după editare, dacă fișierul a fost modificat, îl copiază cu precauţii speciale înapoi.

În distribuțiile bazate pe Debian, utilizatorul root nu are o parolă, toate acțiunile administrative trebuie efectuate prin sudo sau echivalentul său grafic gksudo. Fiind un înlocuitor complet pentru su , sudo ar trebui să fie singura comandă pentru comutarea între utilizatori, totuși, așa cum sa spus la început, în acest moment nu este cazul și din anumite motive toată lumea inventează secvențe sălbatice de sudo, su, vi și liniuțe.

Prin urmare, recomand tuturor să-și amintească odată pentru totdeauna:

După prima publicare a acestei note, mi s-au pus câteva întrebări. Din răspunsuri am reușit să facem un mini-FAQ.

Î: Cum pot folosi sudo pentru a face su -c "echo 1 > /etc/privileged_file"? sudo echo 1 /etc/privileged_file se plânge de „permisiunea refuzată”
R: Acest lucru se întâmplă deoarece numai comanda echo este executată cu drepturi ridicate, iar rezultatul este redirecționat către fișierul cu drepturi ale unui utilizator obișnuit. Pentru a adăuga ceva la privileged_file, trebuie să rulați următoarea comandă:
$ ecou 1| sudo tee -a privileged_file >/dev/null
Sau deveniți temporar o rădăcină:
$ sudo -i # echo 1 > privileged_file # exit $
Î: sudo -i este mai lung decât su - , dar se pare că nu există nicio diferență între ele, de ce tipăriți mai mult?
R: sudo are câteva avantaje care merită osteneala de a introduce câteva caractere suplimentare:

  • implicit, sudo înregistrează toată activitatea utilizatorului în canalul syslog authpriv (de regulă, rezultatul este plasat în fișierul /var/log/auth.log), iar în su o caracteristică similară trebuie activată prin setarea unui parametru special în fișierul de setări, care variază de la distribuție la distribuție (SULOG_FILE în /etc/login.defs pe Ubuntu Linux, /etc/login.conf și /etc/pam.d/su pe FreeBSD etc.)
  • în cazul su, administratorul de sistem nu poate restricționa comenzile executate de utilizatori, dar în sudo - poate
  • dacă utilizatorul ar trebui să fie privat de drepturi administrative, în cazul lui su, după ce l-a scos din grupul de roți, trebuie să uite parola de root dacă se folosește sudo, este suficient să-l elimine din grupul corespunzător (de exemplu, wheel sau admin) și/sau fișierul sudoers, dacă a fost personalizat în continuare.
Î: Sunt singurul utilizator de pe sistemul meu și sunt obișnuit să su, de ce am nevoie de sudo?
R: Voi răspunde la întrebare cu o întrebare: dacă există sudo corect, de ce să folosiți sudo învechit?

Câteva despre sudo în sine, de la Wikipedia. sudo(Engleză) superutilizator face , literalmente „a efectua în numele superutilizator") este un program dezvoltat pentru a ajuta administratorul de sistem și vă permite să delegați anumite resurse privilegiate utilizatorilor menținând în același timp un jurnal de lucru. Ideea principală este de a oferi utilizatorilor cât mai puține drepturi, dar în același timp exact câte sunt necesare pentru a rezolva sarcinile atribuite.

Comanda sudo permite utilizatorilor să ruleze comenzi ca root sau alți utilizatori. Regulile pe care le folosește sudo pentru a decide dacă să acorde acces sunt în fișierul /etc/sudoers; Limbajul scrisului lor și exemplele de utilizare sunt descrise în detaliu în sudoers(5).

Pentru a edita fișierul /etc/sudoers, ar trebui să utilizați programul visudo, care verifică sintaxa și astfel evită erorile în reguli.

În cele mai multe cazuri, configurarea corectă a sudo face ca rularea ca superutilizator să nu fie necesară.

În mod implicit, contul root în Ubuntu este dezactivat și root pur și simplu nu are o parolă. Toate sarcinile administrative sunt efectuate prin sudo. În mod implicit, dreptul de a executa sudo este acordat primului utilizator creat în timpul instalării. Toți ceilalți sunt utilizatori obișnuiți în mod implicit.

Sudo este un instrument foarte flexibil care vă permite să configurați drepturi pentru a efectua acțiuni administrative pentru fiecare utilizator separat. De exemplu, permiteți unuia să repornească un server și oferiți altuia posibilitatea de a schimba drepturile de acces la fișiere și foldere. Deschideți fișierul /etc/sudoers. Acest lucru se poate face fie prin lansarea unei comenzi pentru a deschide fișierul în editorul de text preferat, de exemplu, astfel:

# nano /etc/sudoers

sau folosind utilitarul visudo:
# visudo

Această din urmă metodă va deschide fișierul /etc/sudoers în editorul implicit al utilizatorului sau, dacă nu este specificat unul, atunci în editorul vi. Avantajul acestei metode este că la salvarea fișierului se va verifica conformitatea cu sintaxa.

Cea mai simplă configurație arată astfel:

Valori implicite env_reset

#Specificație privilegii utilizator
root ALL=(TOT) TOATE
utilizator ALL=(ALL) ALL

Această configurație oferă utilizatorului toate drepturile utilizatorului root atunci când rulează comanda sudo. Valori implicite env_reset dezactivează complet toate variabilele utilizatorului la executarea comenzilor ca root. Acest lucru este bun din punct de vedere al securității, dar uneori provoacă probleme. Puteți permite variabilelor private să fie utilizate de către un grup sau un individ, adăugând o linie ca aceasta:
Valori implicite:%admin !env_reset

care va salva variabilele de mediu pentru toți utilizatorii grupului de administrare sau:
Valori implicite: utilizator env_keep=TZ

care va salva variabila TZ pentru utilizatorul utilizator.

Dacă serverul este administrat de un grup de persoane, atunci este logic să faceți acest lucru:
%admin ALL=(ALL) ALL

După cum ați putea ghici, această intrare oferă acces root tuturor membrilor grupului de administrare.

Puteți configura fiecare utilizator specific pentru a avea acces numai la anumite comenzi. De exemplu:
utilizator ALL = /bin/mount, /bin/kill

va acorda utilizatorilor drepturi de a executa comenzi de montare și oprire de pe orice mașină și:
user2 mydebiancomp = /sbin/modprobe

va acorda utilizatorului 2 permisiunea de a rula modprobe din mydebiancomp. Cred că sintaxa este clară:
gazdă utilizator = comandă

unde comanda este scrisă cu calea completă. Pentru un grup, totul este similar, se adaugă doar semnul „%”.

III.Setări sudo avansate.

Este foarte convenabil să creați un grup de aliasuri atunci când configurați sudo. Pentru a nu introduce comenzi repetate constant, utilizatori și gazde, le putem colecta în grupuri și stabili reguli pentru fiecare grup de aliasuri. De exemplu astfel:

Cmnd_Alias ​​​​command_alias = command1, command2, ... // aliasuri de comandă
Host_Alias ​​​​host_alias = hostname1, hostname2, ... // aliasuri de gazdă
User_Alias ​​​​user_alias = user1, user2, ... // aliasuri de utilizator

Este posibilă și executarea unei comenzi în numele altui utilizator. De exemplu, cu această intrare:
user ALL = (utilizator2, utilizator3) /usr/bin/ark

user user poate rula comanda ark ca user2 sau user3, folosind tasta u, astfel:
$ sudo -u user2 ark

Implicit, sudo își amintește parolele timp de 5 minute. Dacă nu doriți acest lucru, atunci pentru fiecare utilizator, grup sau alias puteți seta o regulă separată, de exemplu atunci când:
Valori implicite: user timestamp_timeout=0

Parola utilizatorului nu va fi memorată deloc, dar dacă:
Valori implicite: user timestamp_timeout=-1

va fi reținut pentru întreaga durată de funcționare.

Sudo fără parole este, de asemenea, posibil. Există un design similar pentru aceasta:
utilizator myubuntucomp = NOPASSWD: /bin/kill

care va permite utilizatorului utilizatorului de pe gazda myubuntucomp să folosească kill fără a cere o parolă. Introduceți propriile valori, cum ar fi ALL în loc de numele de gazdă și de comandă, astfel încât utilizatorul să nu poată introduce niciodată o parolă pentru a executa comenzi ca root de la orice gazdă, dar rețineți că acest lucru face sistemul foarte vulnerabil.

gardian

Bloguri, bloguri, bloguri. Maxim Fuckin știe multe despre asta.

Harta interactivă a orașului Orenburg. Realizat folosind tehnologia Google Maps folosind propriile noastre dezvoltări. Resursa este tânără, dar deja destul de interesantă și utilă.

Uneori, pentru a rezolva o problemă, trebuie să deschideți un terminal și să executați comenzi ca superutilizator (sudo sau su), numit și ROOT. Deși unele dintre ele pot fi făcute folosind o interfață grafică.

Puteți afla de ce este necesar și utilizat Root în sistemele Unix și vom discuta în continuare despre modul în care este utilizat sudo sau su în sistemele Linux.

Să presupunem că trebuie să realizăm o sarcină non-standard în care instrumentele grafice nu ne vor ajuta. În plus, linia de comandă este un instrument foarte flexibil aici puteți vedea rezultatul comenzilor și puteți înțelege ce nu merge bine. Și cel mai important, comenzile din terminal sunt standard pentru toate distribuțiile Linux.

Deci, există două modalități principale de a obține drepturi de superutilizator (Root) - sudo sau su

Comanda sudo este folosită în sistemele asemănătoare Debian sau în cel mai popular Ubuntu, „su” este folosit în aproape toate celelalte distribuții Linux.

Introducerea sudo în sistemul de operare Ubuntu necesită introducerea parolei Root și apoi, după intrarea cu succes, acordă drepturi de superutilizator pe durata executării unei singure comenzi. Înainte de toate comenzile ulterioare care necesită drepturi de root pe sisteme asemănătoare Debian, trebuie să introduceți din nou „sudo”. Iar în alte distribuții Linux, unde se folosește comanda „su”, oferă acces complet Root, după introducerea parolei, până când intri în „logout” sau închideți terminalul.

Pe sistemele asemănătoare Debian (Ubuntu) există un truc care poate acorda acces complet Root până când închideți terminalul. Acest lucru este necesar dacă veți executa multe comenzi ca Root și nu trebuie să introduceți „sudo” înainte de fiecare comandă. Pentru a face acest lucru, comandați:

De exemplu, trebuie să găsim toți utilizatorii existenți în sistem, să le vedem directoarele și să atribuim drepturile directorului dorit de la un utilizator la altul. Pentru a face acest lucru, dacă aș folosi Ubuntu, comanda din terminal ar fi:

Sudo du -sch /home/*

Aceasta ar fi urmată de parola de rădăcină:

16K /home/lost+found 27G /home/pavel 34G /home/pavelubuntu 50G /home/pavelzen 110G total

Știu că sunt utilizatorul directorului /home/pavelzen, dar trebuie să devin și proprietarul directorului /home/pavelubuntu. Pentru a face acest lucru, trebuie să introduc din nou „sudo” înainte de comandă.

Și pentru alte sisteme: mai întâi aș comanda

parola și apoi

Du-sch /acasă/*

Chown -R pavelzen: /home/pavelubuntu

Așa apar terminalele și superutilizatorii pe sistemele Linux.

Uneori, trebuie doar să rulați o comandă de la alt utilizator. Și există mai multe moduri în care se poate face acest lucru. Voi vorbi despre ele în articolul meu „Rulează o comandă ca alt utilizator în Unix/Linux”.

Rulați o comandă ca alt utilizator în Unix/Linux - metoda 1

Și astfel, puteți utiliza utilitarul SUDO. Să ne uităm la un exemplu:

$ sudo -H -u Your_nother_user -c "ping site"

Explicatii:

  • -H YOUR_HOME: Setează HOME (variabilă de mediu pentru casa unui anumit utilizator) și implicit este root.
  • -u YOUR_USER: Specificați utilizatorul de la care va fi executată comanda.
  • -c YOUR_COMMAND: Servește ca opțiune pentru a introduce o comandă.

Ceva de genul.

Rulați o comandă ca alt utilizator în Unix/Linux - metoda 2

Puteți utiliza utilitarul SU. Și acum voi da câteva exemple.

Conectați-vă ca utilizator root

Pentru a obține root, rulați:

$su - rădăcină

Rulați comanda ca utilizator root

Iată un exemplu de comandă:

# su - root -c „COMANDA_TAUA_AICI”

Su - -c „YOUR_COMMAND_HERE arg1”

Executați o comandă de la alt utilizator folosind su

Deci, iată un exemplu:

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr S-a creat un nou nucleu "test_solr_core"

Să ne uităm la un alt exemplu:

$ su another_user -c "site ping"

$su -YOUR_USER -c „YOUR_COMMAND_HERE”

  • — — Va simula autentificarea utilizatorului specificat.
  • -c - Folosit pentru a specifica comanda de executat (pentru utilizatorul specificat).

Ceva de genul.

Rulați o comandă ca alt utilizator în Unix/Linux - metoda 3

Și astfel, puteți utiliza utilitarul runuser. Comanda runuser pornește un shell cu ID-uri de utilizator și grup de înlocuire. Această comandă este utilă numai atunci când sunteți conectat ca root. Sintaxa este următoarea:

# runuser -l YOUR_USER -c „YOUR_COMMAND_HERE”

Ca exemplu, voi arăta următoarea linie:

# runuser -l nginx -c "serviciu nginx start"

PS: Comanda runuser nu necesită o parolă și ar trebui să fie rulată doar de utilizatorul root.

Opțiuni principale:

  • -l: Creați un shell de conectare folosind fișierul PAM runuser-l în loc de cel implicit.
  • -g: Indică grupul principal.
  • -G: Indică un grup suplimentar.
  • -c: De fapt, este folosit pentru a specifica o comandă.
  • –session-command=COMMAND: Transmite o singură comandă la shell cu opțiunea „-c” și nu creează o nouă sesiune.
  • -m: Nu resetați variabilele de mediu (ENV).

Gata, subiectul „Rulează o comandă ca alt utilizator în Unix/Linux” este complet.

Sudo este un program care permite administratorilor să acorde utilizatorilor drepturi root limitate și să păstreze un jurnal al activității root. Filosofia de bază este de a acorda cât mai puține drepturi posibil, permițând totuși oamenilor să-și îndeplinească sarcinile în mod normal. Diferența cu comanda su este că utilizatorul introduce parola contului, mai degrabă decât parola utilizatorului root.

Sudo pe Debian are un timeout de cincisprezece minute (poate) după introducerea parolei. Aceasta înseamnă că atunci când introduceți prima dată parola de root, aveți la dispoziție 15 minute timp în care puteți executa următoarea comandă fără a introduce parola. Timeout-ul poate fi resetat imediat folosind comanda sudo -k.

Instalarea sudo pe Debian 7

aptitude install sudo

Un fișier de configurare este creat în timpul instalării /etc/sudoersși director /etc/sudoers.d, despre care vom vorbi puțin mai târziu.

opțiuni de comandă sudo

-k- vă permite să resetați timpul de expirare până când trebuie să introduceți din nou parola. Dacă specificați o comandă care poate necesita o parolă, timeout-ul va fi resetat special pentru acea comandă.
-h- va fi afișat un mic indiciu pe ieșirea standard.
-V- va fi afișată versiunea sudo și a pluginurilor. Dacă rulați ca root, vor fi afișate toate setările.
-g grup - vă permite să specificați din ce grup va fi lansată comanda.
-H- specifică directorul care va fi specificat în variabila de mediu HOME.
-i- simulează intrarea inițială. Dacă comanda nu este specificată, vă va conecta, astfel încât să puteți deveni root în loc să utilizați sudo su.
-ll]- dacă comanda nu este specificată, atunci va fi afișată o listă de comenzi disponibile pentru utilizatorul apelant (sau utilizatorul specificat cu parametrul -U). Dacă este specificată o comandă și este disponibilă, va fi afișată calea completă către comandă și parametrii disponibili. Dacă comanda nu este disponibilă, sudo va ieși cu starea 1. Dacă utilizați opțiunea -ll sau specificați -l de două ori, va fi folosit un format de ieșire mai detaliat.
-s- va fi lansat shell-ul specificat în variabila de mediu SHELL. Dacă este specificată o comandă, aceasta va fi transmisă shell-ului care rulează pentru execuție.
-U utilizator- împreună cu parametrul -l, vă permite să afișați privilegiile unui anumit utilizator. În mod implicit, root și utilizatorii cu toate privilegiile (ALL) au acces la listele de privilegii.
-u utilizator- comanda specificată va fi rulată ca utilizator specificat, nu ca root.
-v- vă permite să extindeți timpul de expirare cu 15 minute sau orice este specificat în sudoers), dar nu executați nicio comandă.

Cele mai multe dintre opțiunile disponibile sunt enumerate aici, dar nu toate. Pentru a vedea lista completă, utilizați comanda man sudo.

Configurarea sudo pe Debian 7

Se recomandă să setați toate setările utilizatorului în fișierele din director /etc/sudoers.d, nu în fișierul principal /etc/sudoers. Adică, puteți crea un fișier cu orice nume din director /etc/sudoers.dși listează deja setările necesare în el.

Fişier /etc/sudoers se recomandă editarea utilizând utilitarul visudo, deoarece blochează fișierul și verifică corectitudinea directivelor la închidere. visudo folosește un editor de text implicit, care poate fi suprascris în sudoeri directivă ca: