visudo în Linux / Bash

Permisiuni și securitate sudo (toate versiunile)

Editează în siguranță fișierul /etc/sudoers, verificând sintaxa înainte de salvare ca să nu pierzi accesul la sudo.

Sintaxă comandă
visudo [-c] [-f FIȘIER]

Ce face visudo

Fișierul /etc/sudoers spune cine are voie să ruleze comenzi cu sudo și ce comenzi. O greșeală de sintaxă în el poate bloca complet sudo, așa că nu se editează direct, ci prin visudo: acesta blochează fișierul, deschide o copie în editor și o verifică înainte să o salveze.

Regulile proprii se pun de preferat în fișiere separate din /etc/sudoers.d/, incluse automat. Fișierele al căror nume conține un punct sau se termină cu ~ sunt ignorate. Editorul folosit vine din variabila EDITOR sau SUDO_EDITOR.

Opțiuni și argumente

Opțiune / Parametru Descriere
-c Doar verifică sintaxa, fără a deschide editorul.
-f FIȘIER Editează sau verifică alt fișier decât /etc/sudoers (de exemplu unul din /etc/sudoers.d/).
-s Verificare strictă: semnalează și aliasurile folosite înainte de a fi definite.
utilizator GAZDA=(CA_CINE) COMENZI Forma unei reguli: cine, pe ce mașină, ca ce utilizator și ce comenzi poate rula.
NOPASSWD: Permite comenzile din regulă fără a cere parola.

Exemple

Exemplul 1: Permisiune limitată pentru utilizatorul de deploy

Utilizatorul deploy poate reporni doar Nginx, fără parolă. În editorul deschis scrii o singură linie, apoi salvezi.

sudo EDITOR=nano visudo -f /etc/sudoers.d/deploy
# linia scrisă în fișier:
# deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
sudo -l -U deploy | tail -n 2

Ieșire în terminal

User deploy may run the following commands on web-iasi:
    (root) NOPASSWD: /usr/bin/systemctl restart nginx

Exemplul 2: Verificarea tuturor fișierelor sudoers

Util după ce un script sau un instrument de configurare a scris în /etc/sudoers.d/.

sudo visudo -c

Ieșire în terminal

/etc/sudoers: parsed OK
/etc/sudoers.d/README: parsed OK
/etc/sudoers.d/deploy: parsed OK

Greșeli frecvente

  • Editarea /etc/sudoers cu nano sau vim direct: o virgulă lipsă poate lăsa sistemul fără acces la sudo.
  • Reguli prea largi, de tipul ALL=(ALL) NOPASSWD: ALL pentru conturi de servicii; dă doar comenzile necesare, cu cale completă.
  • Un fișier din /etc/sudoers.d/ numit deploy.conf: din cauza punctului este ignorat fără niciun mesaj.

Comenzi înrudite

  • sudo: Execută o comandă cu drepturile depline ale administratorului (root) sau ale altui utilizator.
  • su: Comută sesiunea curentă de terminal pe alt utilizator sau deschide un shell ca root.
  • usermod: Modifică proprietățile unui cont existent de utilizator (grupuri, shell, director acasă).
  • groupadd / groupdel: Creează, redenumește și șterge grupuri de utilizatori, folosite pentru a da drepturi comune mai multor conturi.