Această pagină poate fi doar citită. Poți vedea sursa, dar nu poți modifica pagina. Consultă administratorul dacă ești de părere că ceva este în neregulă. ====== Sudo: Ghidul complet pentru administrarea privilegiilor în Linux ====== ===== Ce este sudo? ===== **sudo** (prescurtare de la "**s**ubstitute **u**ser **do**" sau "**s**uper**u**ser **do**") este una dintre cele mai importante comenzi din sistemele Unix și Linux. Acest utilitar permite utilizatorilor obișnuiți să execute comenzi cu privilegii de superutilizator (root) sau cu privilegiile altui utilizator, fără a fi nevoie să se autentifice direct ca root. ===== De ce este sudo atât de important? ===== Sudo aduce mai multe avantaje esențiale pentru securitatea și administrarea sistemului: **Securitate îmbunătățită**: În loc să lucrați permanent ca root (ceea ce ar fi extrem de riscant), puteți executa doar comenzile care necesită privilegii elevate. Acest principiu se numește "privilegii minime" (principle of least privilege). **Audit și responsabilitate**: Fiecare comandă executată prin sudo este înregistrată în jurnalele sistemului (de obicei în ''%%/var/log/auth.log%%'' sau ''%%/var/log/secure%%''), permițând urmărirea exactă a cine a făcut ce și când. **Control granular**: Administratorii pot configura exact ce comenzi poate executa fiecare utilizator, pe ce mașini și în ce condiții, totul prin fișierul de configurare ''%%/etc/sudoers%%''. **Convenabilitate**: Nu trebuie să cunoașteți parola de root; folosiți propria parolă pentru autentificare, și sudo memorează autentificarea pentru o perioadă scurtă (implicit 15 minute). ===== Diferența dintre sudo și sudo-rs ===== **sudo-rs** este o reimplementare modernă a sudo, scrisă în limbajul de programare Rust, spre deosebire de sudo clasic care este scris în C. Acest proiect a fost inițiat de compania Tweede Golf și sponsorizat de Amazon Web Services, având ca obiectiv principal îmbunătățirea securității memoriei. ==== Avantajele sudo-rs: ==== * **Siguranță a memoriei**: Rust previne automat erorile comune de memorie (buffer overflows, use-after-free, etc.) care pot duce la vulnerabilități de securitate * **Compatibilitate**: sudo-rs menține compatibilitatea cu sudo original, folosind același fișier ''%%/etc/sudoers%%'' și aceleași comenzi * **Cod modern**: Beneficiază de funcționalitățile moderne ale limbajului Rust și de ecosistemul său ==== Dezavantaje și limitări: ==== * **Maturitate**: sudo-rs este relativ nou comparativ cu sudo care are peste 30 de ani de dezvoltare * **Funcționalități**: Unele funcționalități avansate sau mai puțin folosite din sudo original pot să nu fie încă implementate * **Adopție**: Majoritatea distribuțiilor încă folosesc sudo clasic ca implicită ===== Instalarea sudo ===== Majoritatea distribuțiilor Linux moderne vin cu sudo preinstalat, dar dacă lipsește, iată cum îl instalați: ==== Debian/Ubuntu/Linux Mint: ==== <code bash> su - apt update apt install sudo </code> ==== Fedora/RHEL/CentOS/Rocky Linux: ==== <code bash> su - dnf install sudo </code> ==== Arch Linux/Manjaro: ==== <code bash> su - pacman -S sudo </code> ==== openSUSE: ==== <code bash> su - zypper install sudo </code> ==== Alpine Linux: ==== <code bash> su - apk add sudo </code> După instalare, trebuie să adăugați utilizatorul în grupul sudo sau wheel: <code bash> # Pe Debian/Ubuntu usermod -aG sudo utilizator # Pe Fedora/RHEL/Arch usermod -aG wheel utilizator </code> ===== Instalarea sudo-rs ===== Pentru a instala sudo-rs, opțiunile variază în funcție de distribuție: ==== Pe Arch Linux (din AUR): ==== <code bash> yay -S sudo-rs # sau paru -S sudo-rs </code> ==== Compilare din sursă: ==== <code bash> # Instalați Rust dacă nu îl aveți curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Clonați repository-ul git clone https://github.com/trifectatechfoundation/sudo-rs.git cd sudo-rs # Compilați și instalați cargo build --release sudo install -m 4755 target/release/sudo /usr/local/bin/sudo-rs </code> ===== Comenzile sudo: Ghid complet ===== ==== 1. sudo - Comanda de bază ==== Execută o comandă cu privilegii de superutilizator: <code bash> sudo apt update sudo systemctl restart nginx sudo nano /etc/fstab </code> **Opțiuni importante:** * ''sudo -u utilizator comandă'' - Execută comanda ca un alt utilizator specificat * ''sudo -l'' - Listează comenzile pe care le puteți executa prin sudo * ''sudo -v'' - Reînnoiește timestamp-ul de autentificare fără a executa o comandă * ''sudo -k'' - Invalidează timestamp-ul de autentificare (va cere din nou parola) * ''sudo -i'' - Pornește un shell de login ca root (similar cu ''sudo su -'') * ''sudo -s'' - Pornește un shell ca root, dar păstrează mediul curent * ''sudo -E comandă'' - Păstrează variabilele de mediu ale utilizatorului curent **Exemple practice:** <code bash> # Editare fișier de sistem sudo nano /etc/hosts # Instalare pachet sudo apt install htop # Verificare ce puteți face cu sudo sudo -l # Executare comandă ca alt utilizator sudo -u www-data touch /var/www/html/test.php # Păstrare variabile de mediu sudo -E bash script.sh </code> ==== 2. sudo - sau sudo -i - Shell de login ca root ==== Această comandă pornește un shell de login complet ca utilizatorul root: <code bash> sudo - # sau sudo -i </code> **Diferențe importante:** **''sudo -i'' (sau ''sudo -''):** * Pornește un shell de login complet * Schimbă directorul curent în /root * Încarcă mediul root complet (citește /root/.profile, /root/.bashrc, etc.) * Similar cu autentificarea directă ca root **''sudo -s'':** * Pornește un shell, dar păstrează mediul utilizatorului curent * Nu schimbă directorul curent * Nu încarcă fișierele de configurare ale root **''sudo su'':** * Execută comanda ''su'' prin sudo (mai puțin eficient) * Similar cu ''sudo -s'' **''sudo su -'':** * Execută ''su -'' prin sudo * Similar cu ''sudo -i'', dar mai verbos **Exemplu de diferențe:** <code bash> # Verificați diferențele whoami # utilizatorul_dvs pwd # /home/utilizatorul_dvs sudo -s whoami # root pwd # /home/utilizatorul_dvs (rămâne același) exit sudo -i whoami # root pwd # /root (schimbat în home-ul root) exit </code> ==== 3. sudoedit sau sudo -e - Editare sigură de fișiere ==== Pentru editarea fișierelor de sistem, ''sudoedit'' este metoda recomandată: <code bash> sudoedit /etc/fstab # sau sudo -e /etc/nginx/nginx.conf </code> **De ce este mai sigur:** * Copiază fișierul temporar, îl editează cu editorul dvs. preferat ca utilizator normal * După salvare, copiază înapoi cu privilegii root * Previne expunerea editorului la privilegii root inutile ==== 4. sudo !! - Re-executare ultimă comandă ==== Un truc util când uitați să folosiți sudo: <code bash> apt update # Eroare: Permission denied sudo !! # Execută: sudo apt update </code> Simbolul ''!!'' în bash reprezintă ultima comandă executată. ==== 5. Alte comenzi și variante utile ==== **''sudo -b comandă''** - Execută comanda în background: <code bash> sudo -b apt upgrade </code> **''sudo -n comandă''** - Mod non-interactiv (nu cere parolă, eșuează dacă este necesară): <code bash> sudo -n systemctl status nginx </code> **''sudo -A comandă''** - Folosește un program helper pentru citirea parolei: <code bash> SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A apt update </code> **''sudo -H comandă''** - Setează variabila HOME la directorul utilizatorului țintă: <code bash> sudo -H -u www-data bash </code> **''sudo -g grup comandă''** - Execută comanda cu un grup specific: <code bash> sudo -g www-data touch /var/www/test.txt </code> ===== Configurarea sudo: Fișierul /etc/sudoers ===== Configurarea sudo se face prin fișierul ''%%/etc/sudoers%%'', dar **niciodată** nu trebuie editat direct. Folosiți întotdeauna: <code bash> sudo visudo </code> Această comandă verifică sintaxa înainte de salvare, prevenind blocarea sistemului. ==== Exemple de configurări utile: ==== **Permitere acces complet pentru un utilizator:** <code> utilizator ALL=(ALL:ALL) ALL </code> **Permitere fără parolă:** <code> utilizator ALL=(ALL) NOPASSWD: ALL </code> **Permitere doar anumite comenzi:** <code> utilizator ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt update </code> **Configurare pentru grup:** <code> %sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL) ALL </code> **Creștere timeout autentificare (implicit 15 minute):** <code> Defaults timestamp_timeout=30 </code> **Păstrare variabile de mediu:** <code> Defaults env_keep += "HTTP_PROXY HTTPS_PROXY" </code> ===== Bune practici de securitate ===== - **Nu rulați grafic aplicații cu sudo**: Folosiți ''pkexec'' pentru aplicații grafice - **Limitați accesul sudo**: Nu acordați acces complet tuturor utilizatorilor - **Monitorizați logurile**: Verificați regulat ''%%/var/log/auth.log%%'' pentru activități suspecte - **Folosiți sudoedit**: Pentru editarea fișierelor de sistem - **Nu dezactivați autentificarea**: NOPASSWD trebuie folosit cu precauție - **Preferați sudo față de root direct**: Nu vă autentificați ca root permanent - **Revizuiți periodic sudoers**: Eliminați accesele neutilizate ===== Depanare probleme comune ===== **"utilizator is not in the sudoers file":** <code bash> su - usermod -aG sudo utilizator # sau pe RHEL/Fedora usermod -aG wheel utilizator </code> **Parolă incorectă în continuare:** * Verificați că introduceți parola utilizatorului curent, nu cea de root * Verificați cu ''sudo -k'' dacă cache-ul este problema **Timeout prea scurt:** <code bash> sudo visudo # Adăugați: Defaults timestamp_timeout=30 </code> ===== Concluzie ===== Sudo este un instrument fundamental în ecosistemul Linux, oferind un echilibru perfect între securitate și funcționalitate. Înțelegerea corectă a comenzilor sale și configurarea adecvată sunt esențiale pentru orice administrator de sistem sau utilizator Linux avansat. Fie că alegeți sudo clasic sau varianta modernă sudo-rs, principiile de bază rămân aceleași: privilegii minime, audit complet și control granular. Folosiți-l cu înțelepciune și sistemul dvs. va fi mai sigur și mai ușor de administrat. {{tag>sudo root linux}}