acasă # 149; Articole # 149; Instalarea și configurarea programului sudo în Debian 7
Lista secțiunilor
Sudo este un program care permite administratorilor să dea drepturi radicale limitate utilizatorilor și să păstreze un jurnal de activitate rădăcină. Filosofia de bază este să oferim cât mai puține drepturi, dar în același timp să permitem oamenilor să-și îndeplinească sarcinile în mod normal. Diferența de la comanda su este că utilizatorul introduce parola din contul său, nu parola de root.
Sudo în Debian are un timp de așteptare de 15 minute (poate fi anulat) după ce a introdus parola. Aceasta înseamnă că, atunci când ați introdus pentru prima dată parola de root, aveți 15 minute în care puteți rula următoarea comandă fără a introduce o parolă. Timpul de expirare poate fi resetat imediat utilizând comanda sudo -k.
Instalarea lui sudo în Debian 7
În timpul instalării, fișierul de configurare / etc / sudoers și directorul /etc/sudoers.d sunt create. despre care vom vorbi mai târziu.
Parametrii comenzii sudo
Aici puteți găsi majoritatea opțiunilor disponibile, dar nu toate. Pentru a vizualiza lista completă, utilizați comanda om sudo.
Configurarea sudo în Debian 7
Se recomandă ca toate setările utilizatorului să fie specificate în fișierele din directorul /etc/sudoers.d. și nu în fișierul principal / etc / sudoers. Asta este, puteți crea un fișier cu orice nume în directorul /etc/sudoers.d și deja în el lista setările necesare.
Sincronizarea fișierului sudoers
În general, utilitarul sudo este local, nu are mecanisme integrate pentru distribuirea setărilor unice la mai multe servere dintr-un centru. Pentru sincronizare, puteți utiliza, de exemplu, NFS. rsync sau LDAP.
Exemplu de conținut al fișierului sudoers
Când citiți tutorialul despre cum să configurați sudo în Debian, este greu să înțelegeți ceva, dar cu exemplul, totul intră în vigoare. Deci, mai întâi, să aruncăm o privire la un exemplu de om sudor:
# Aliasuri care conțin nume de utilizator
User_Alias FULLTIMERS = millert, mikef, dowdy
User_Alias PARTTIMERS = bostley, jwfox, crawl
User_Alias WEBMASTERS = va, wendy, wim
# Aliasuri Runas care conțin numele utilizatorilor sau grupurilor din care vor rula comenzile
Runas_Alias OP = root, operator
Runas_Alias DB = oracol, sybase
Runas_Alias ADMINGRP = adm, oper
# Alias pentru seturi gazdă
Host_Alias SPARC = maretime, eclipsa, moet, ancora: \
SGI = grolsch, păpădie, negru: \
ALPHA = widget, talamus, foobar: \
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercule
# Aliasuri pentru seturi de comenzi
Cmnd_Alias gunoiști = / usr / bin / mt, / usr / sbin / benă, / usr / sbin / rdump, \
/ usr / sbin / restore, / usr / sbin / rrestore
Cmnd_Alias KILL = / usr / bin / kill
Cmnd_Alias PRINTING = / usr / sbin / lpc, / usr / bin / lprm
Cmnd_Alias SHUTDOWN = / usr / sbin / shutdown
Cmnd_Alias HALT = / usr / sbin / halt
Cmnd_Alias REBOOT = / usr / sbin / reboot
Cmnd_Alias SHELLS = / usr / bin / sh, / usr / bin / csh, / usr / bin / ksh,
/ usr / local / bin / tshsh, / usr / bin / rsh, \
/ usr / local / bin / zsh
Cmnd_Alias SU = / usr / bin / su
Cmnd_Alias PAGERS = / usr / bin / mai mult, / usr / bin / pg, / usr / bin / mai puțin
Apoi, depășim câteva valori implicite la compilare. Vrem ca sudo să se logheze prin syslog folosind auth în toate cazurile. Vrem să-mi angajații care lucrează cu normă întreagă, a primit un avertisment de la sudo, The millert utilizatorul nu trebuie să introduceți o parolă, iar noi nu dorim să resetați comanda variabile de mediu LOGNAME, USER sau USERNAME este executat ca root. În plus, mașinile din Host_Alias SERVERE vom păstra un fișier jurnal suplimentar local și asigurați-vă că vor fi înregistrate în fiecare an în linie ca jurnalele vor fi stocate timp de mai mulți ani. În cele din urmă, din motive de securitate pentru echipele din lista PAGERS, dezactivăm capacitatea de a rula alte comenzi.
# Depășiți setările prestabilite
Setările implicite syslog = auth
Implicit> root! Set_logname
Valori prestabilite: FULLTIMERS!
Valori prestabilite: millert!
[protejat prin e-mail] log_year, logfile = / var / log / sudo.log
PAGERS noexec
Următoarea este partea în care stabiliți cine poate rula.
rădăcină ALL = (ALL) ALL
% roată ALL = (ALL) ALL
Permitem root și tuturor utilizatorilor din grupul de roți să execute comenzi pe orice gazdă în numele oricărui utilizator.
FULLTIMERS ALL = NOPASSWD: TOATE
Angajații care lucrează cu normă întreagă (millert, mikef și dowdy) pot executa comenzi pe orice gazdă fără a introduce o parolă.
PARTTIMERS ALL = ALL
Angajații care lucrează o parte din zi (bostley, jwfox și crawl) pot executa orice comenzi pe orice gazdă, dar trebuie să treacă mai întâi procedura de autentificare.
jack CSNETS = ALL
Mufa de utilizator poate executa orice comenzi pe mașini din lista CSNETS.
operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING, \
sudoedit / etc / printcap, / usr / oper / bin /
Operatorul poate executa comenzi limitate de suport simplu de sistem. Aceste comenzi se referă la crearea de copii de siguranță, procese de ucidere, sistem de tipărire, oprirea sistemului și comenzi din directorul / usr / oper / bin /.
joe ALL = / usr / bin / su operator
Utilizatorul joe poate folosi doar pentru a deveni operator.
pete HPPA = / usr / bin / passwd [A-Za-z] *. / usr / bin / passwd rădăcină
% opers ALL = (: ADMINGRP) / usr / sbin /
Membrii grupului din IRCopii pot executa comenzi de la / usr / sbin /, în numele său în legătură cu orice grup de Runas_Alias ADMINGRP (grup și Oper adm).
Utilizatorul pete poate schimba parola oricarui utilizator, cu exceptia root-ului pe orice aparat din lista HPPA. În acest caz, nu veți putea specifica mai mult de un nume de utilizator pe linia de comandă.
bob SPARC = (OP) ALL. SGI = (OP) ALL
Utilizatorul bob poate executa orice comenzi pe mașini din grupurile SPARC și SGI în numele utilizatorilor din Runas_Alias OP (root și operator).
jim + biglab = TOATE
Utilizatorul jim poate rula orice comenzi din grupul de rețea biglab. Sudo înțelege că biglab este un grup de rețea datorită prefixului "+".
fred ALL = (DB) NOPASSWD: TOATE
john ALPHA = / usr / bin / su [! -] *. / usr / bin / su * rădăcină *
Pe mașinile din lista ALPHA, utilizatorul john poate folosi su pentru a deveni orice alt utilizator decât root. Cu toate acestea, nu poate folosi parametrii comenzii su.
doar ALL. SERVERE = TOATE
Utilizatorul poate rula orice comenzi pe orice mașină, cu excepția celor incluse în lista SERVERS.
jill SERVERS = / usr / bin /. SU. COJI
Pe orice mașină din lista SERVERS, jill poate rula orice comenzi, cu excepția celor din listele SU și SHELLS.
steve CSNETS = (operator) / usr / local / op_commands /
Utilizatorul Steve poate rula orice comenzi din directorul / usr / local / op_commands / pe mașinile din rețeaua CSNETS, dar numai ca operator.
matt valkyrie = KILL
Pe stația sa personală, utilizatorul mat trebuie să omoare procesele.
WEBMASTERS www = (www) ALL, (rădăcină) / usr / bin / su www
Pe www gazdă, orice utilizator din lista WEBMASTERS (voință, și WIM Wendy), poate executa orice comanda de la utilizator www (care deține fișierele site-ului) sau doar obtinerea utilizator www folosind comanda su.
TOATE CDROM = NOPASSWD: / sbin / umount / CDROM, \
/ sbin / mount -o nosuid \, nodev / dev / cd0a / CDROM
Orice utilizator poate monta sau demonta CD-ROM-uri pe mașinile din lista CDROM fără a introduce o parolă.
Apoi, vom examina mai îndeaproape diferitele elemente ale fișierului / etc / sudoers.
Sudoers format de fișier
Fișierul sudoers conține două tipuri de înregistrări: aliasuri (variabile regulate) și specificații ale utilizatorilor (indicați cine, ce și unde pot rula).
Când există mai multe specificații pentru un utilizator, acestea sunt aplicate în ordine, adică ultima este utilizată.
Ca urmare, formularul de specificații are următoarea formă:
cine = unde (în numele căruia)
În formă mai completă:
cine unde = (în numele căruia) ce, (în numele căruia) ce. unde = (în numele cui) ce, (în numele cui), ce
De asemenea, puteți specifica din ce grup puteți rula comanda:
cine = unde (în numele căror grup)
Sau chiar și o versiune mai complicată:
cine = unde (în numele căruia, în numele căruia, din care grup, din care grup), ce, ce
Parantezele indică utilizatorul sau grupul de la care puteți rula comenzi. Utilizatorii și grupurile sunt separate între ele prin virgule. Utilizatorii din grupuri sunt separați de colonii.
Dacă doriți să specificați setări diferite pentru un utilizator pe diferite host-uri, atunci și colonii sunt utilizați pentru separare.
user1 host1 = (op. opgr) / bin / ls
această regulă indică faptul că utilizatorul1 poate executa comanda / bin / ls după cum urmează:
Alias Records Formular
Alias_name Name = element 1, punctul 2. Nume = element 3, element 4
Numele de alias poate consta din litere latine ale ambelor registre, cifre si subliniere. Numele trebuie să înceapă cu o literă cu majuscule.
Tipuri de pseudonime
User_Alias
Acesta poate conține unul sau mai mulți utilizatori nume, utilizatori id (prefix cu #), numele grupurilor de utilizatori și id lor (prefixată% și% #, respectiv), netgroups (prefixat cu +), non-yunikosovye nume de grup și ID (cu prefixe%: și%: #, respectiv), precum și aliasuri de utilizatori (User_Aliases). Fiecare element poate fi precedat de un simbol al punctului de exclamare ("!").
Elementele pot fi închise în ghilimele duble pentru a evita folosirea caracterelor speciale. Atunci când se utilizează ghilimele duble, prefixele trebuie incluse în text între ghilimele.
Runas_Alias
Acest alias poate conține aceleași elemente ca și User_Alias. Rețineți că numele și grupurile sunt comparate ca șiruri de caractere. Cu alte cuvinte, doi utilizatori (grupuri) cu nume diferite, dar cu același uid (gid) sunt considerate diferite. Dacă doriți să specificați toate numele utilizatorilor cu același uid (de exemplu, root și toor), puteți utiliza uid (# 0 în exemplul nostru).
Host_Alias
Cmnd_Alias
Lista poate include una sau mai multe comenzi, directoare sau alte pseudonime. O comandă este un nume de fișier complet definit (care conține o cale către un fișier) care poate conține metacaractere. Un nume de fișier simplu permite utilizatorului să execute o comandă cu argumente. Cu toate acestea, puteți specifica și argumentele liniei de comandă (inclusiv caractere cu repere). Pe de altă parte, puteți specifica "" pentru a împiedica utilizarea oricăror argumente cu această comandă. Un director este o cale definită în întregime într-un caracter "/". Când Cmnd_Alias specifică un director, utilizatorul poate rula orice fișiere din acest director (dar nu în subdirectoarele sale).
Valori prestabilite
Unele opțiuni pot fi schimbate în timpul funcționării de către unul sau mai multe înregistrări valori prestabilite, care pot afecta toți utilizatorii de pe orice gazdă, toți utilizatorii de pe o gazdă specifică pe un anumit utilizator, o anumită comandă sau comenzi executate de către un anumit utilizator. Merită să ne amintim că intrările pentru comenzi individuale nu pot include argumente. Dacă trebuie să specificați argumente, setați Cmnd_Alias și utilizați-l.
Când scrieți Setări prestabilite pentru aliasuri diferite, pentru a indica tipul de alias sunt folosite diferite caractere:
'Defaults' '@' Host_List
'Defaults' ':' User_List
'Defaults' '!' Cmnd_List
'Defaults' '>' Runas_List
Parametrii pot fi drapele, valori întregi, șiruri de caractere și liste. Steagurile sunt booleene și pot fi dezactivate utilizând operatorul "!". Valorile pot fi închise în ghilimele duble dacă conțin mai multe cuvinte. Caracterele speciale pot fi scoase cu un backslash (\).
Listele au doi operatori de atribuire + = și - =. Acești operatori sunt utilizați pentru adăugarea și eliminarea din listă.
Înregistrările "Defaults" sunt procesate în următoarea ordine: în primul rând, de bază, pentru gazde și utilizatori, apoi runas, și în cele din urmă pentru comenzi.
Cuvinte cheie
Un cuvânt cheie cu zero sau mai mult poate fi folosit cu comanda. Există opt cuvinte-cheie: NOPASSWD, passwd, noexec, EXEC, setenv, NOSETENV, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT și NOLOG_OUTPUT.
NOPASSWD și PASSWD
user1 gazdă1 = NOPASSWD: / bin / ls, / bin / ln, PASSWD: / bin / kill
NOEXEC și EXEC
NOEXEC poate fi utilizat pentru a preveni lansarea de fișiere executabile legate dinamic folosind comenzi executabile. exemplu:
user1 host1 = NOEXEC: / usr / bin / mai mult
metacaractere
sudo vă permite să utilizați metacaractere (precum și caractere meta sau globale) în nume de gazde, căi și argumente de linie de comandă în fișierul sudoers. Merită să ne amintim că acestea nu sunt expresii regulate.
* - înlocuiește zero sau mai multe caractere.
? - înlocuiește un singur caracter.
[. ] - înlocuiește orice caracter din intervalul specificat.
[. ] - înlocuiește orice caracter care nu intră în intervalul specificat.
\ este caracterele de evacuare, astfel încât caracterele speciale pot fi folosite în nume.
De asemenea, puteți utiliza clasele de caractere. Cu toate acestea, deoarece "(") este un caracter special, trebuie scapat:
aceasta va denota orice fișier care începe cu o literă.
În plus, slash-ul din față nu este înlocuit cu metacaractere. De exemplu:
se potrivește / usr / bin / care, dar nu se potrivește / usr / bin / X11 / xterm.
Pentru a dezactiva utilizarea argumentelor liniei de comandă, puteți utiliza ghilimele duble - "".
Includerea conținutului altor fișiere în sudori
Includerea ("Include de la") a conținutului altor fișiere este posibilă cu directivele #include și #includedir.
Acest lucru poate fi folosit într-o situație în care aveți directive pentru sudo comune tuturor serverelor și speciale pe fiecare server. În acest caz, puteți crea două fișiere, de exemplu sudoers și sudoers.local. Apoi, al doilea este inclus în primul, cu ajutorul directivei (împreună cu pictograma grilă):
De asemenea, puteți crea fișiere cu părți diferite după punctul corespunzător denumirilor serverelor și includeți-le după cum urmează:
unde în loc de% h numele de gazdă este înlocuit.
În ceea ce privește directiva nr. puteți crea un director separat în care puteți adăuga fișiere și acestea vor fi incluse automat în fișierul sudoers. De exemplu, în Debian, după instalarea lui sudo, directorul /etc/sudoers.d/ este creat. și în dosarul / etc / sudoers a fost adăugată o directivă:
Trebuie remarcat faptul că fișierele sunt procesate și sortate lexical, nu prin numere. Aceasta este, de exemplu, fișierul /etc/sudoers.d/01_first vor fi procesate înainte de /etc/sudoers.d/10_second, dar fișierul numit /etc/sudoers.d/1_whoops vor fi prelucrate după /etc/sudoers.d/10_second , deoarece la începutul titlului nu există zero.
Caractere speciale suplimentare
ALL este un cuvânt rezervat care indică toate valorile posibile. Poate fi folosit în loc de pseudonime și valori în câmpurile "cine", "unde", "de la cine", "ce". Nu încercați să creați aliasuri cu numele ALL.
Marcajul exclamării ("!") Este folosit ca operator de negare logică (nu) și permite excluderea anumitor valori. De exemplu, puteți permite efectuarea oricăror operațiuni, cu excepția câtorva care utilizează ALL și "! “.
Corzile lungi pot fi împărțite în substring folosind caracterul invers ("\") la sfârșitul fiecărui subrevers, cu excepția ultimului.
Spațiile dintre elementele '=', ':', '(', ')' sunt opționale. Adică, le puteți folosi sau nu le puteți folosi.
Următoarele caractere trebuie scoase cu un caracter din spate ('\'):