sudo (prescurtare de la „substitute user do“ sau „superuser 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.
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).
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.
/etc/sudoers și aceleași comenziMajoritatea distribuțiilor Linux moderne vin cu sudo preinstalat, dar dacă lipsește, iată cum îl instalați:
su - apt update apt install sudo
su - dnf install sudo
su - pacman -S sudo
su - zypper install sudo
su - apk add sudo
După instalare, trebuie să adăugați utilizatorul în grupul sudo sau wheel:
# Pe Debian/Ubuntu usermod -aG sudo utilizator # Pe Fedora/RHEL/Arch usermod -aG wheel utilizator
Pentru a instala sudo-rs, opțiunile variază în funcție de distribuție:
yay -S sudo-rs # sau paru -S sudo-rs
# 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
Execută o comandă cu privilegii de superutilizator:
sudo apt update sudo systemctl restart nginx sudo nano /etc/fstab
Opțiuni importante:
sudo -u utilizator comandă - Execută comanda ca un alt utilizator specificatsudo -l - Listează comenzile pe care le puteți executa prin sudosudo -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 curentsudo -E comandă - Păstrează variabilele de mediu ale utilizatorului curentExemple practice:
# 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
Această comandă pornește un shell de login complet ca utilizatorul root:
sudo - # sau sudo -i
Diferențe importante:
sudo -i (sau sudo -):
sudo -s:
sudo su:
su prin sudo (mai puțin eficient)sudo -s
sudo su -:
su - prin sudosudo -i, dar mai verbosExemplu de diferențe:
# 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
Pentru editarea fișierelor de sistem, sudoedit este metoda recomandată:
sudoedit /etc/fstab # sau sudo -e /etc/nginx/nginx.conf
De ce este mai sigur:
Un truc util când uitați să folosiți sudo:
apt update # Eroare: Permission denied sudo !! # Execută: sudo apt update
Simbolul !! în bash reprezintă ultima comandă executată.
sudo -b comandă - Execută comanda în background:
sudo -b apt upgrade
sudo -n comandă - Mod non-interactiv (nu cere parolă, eșuează dacă este necesară):
sudo -n systemctl status nginx
sudo -A comandă - Folosește un program helper pentru citirea parolei:
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A apt update
sudo -H comandă - Setează variabila HOME la directorul utilizatorului țintă:
sudo -H -u www-data bash
sudo -g grup comandă - Execută comanda cu un grup specific:
sudo -g www-data touch /var/www/test.txt
Configurarea sudo se face prin fișierul /etc/sudoers, dar niciodată nu trebuie editat direct. Folosiți întotdeauna:
sudo visudo
Această comandă verifică sintaxa înainte de salvare, prevenind blocarea sistemului.
Permitere acces complet pentru un utilizator:
utilizator ALL=(ALL:ALL) ALL
Permitere fără parolă:
utilizator ALL=(ALL) NOPASSWD: ALL
Permitere doar anumite comenzi:
utilizator ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt update
Configurare pentru grup:
%sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL) ALL
Creștere timeout autentificare (implicit 15 minute):
Defaults timestamp_timeout=30
Păstrare variabile de mediu:
Defaults env_keep += "HTTP_PROXY HTTPS_PROXY"
pkexec pentru aplicații grafice/var/log/auth.log pentru activități suspecte„utilizator is not in the sudoers file“:
su - usermod -aG sudo utilizator # sau pe RHEL/Fedora usermod -aG wheel utilizator
Parolă incorectă în continuare:
sudo -k dacă cache-ul este problemaTimeout prea scurt:
sudo visudo # Adăugați: Defaults timestamp_timeout=30
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.