cum se configurează Linux chroot jails
termenul chroot jail a fost folosit pentru prima dată în 1992, într-un articol al unui cercetător de securitate proeminent, Bill Cheswick, (ceea ce este interesant dacă vă interesează astfel de lucruri, puteți găsi articolul aici). Închisorile Chroot au început să apară în 2003, cu aplicații precum IRC și FTP. În 2005, Sun a introdus tehnologia sa “containere” numită zone, care la rândul său a fost un precursor al conceptului de spații de nume, care este o tehnologie de bază utilizată cu containere.
elementele de bază Chroot
Chroot permite unui administrator să controleze accesul la un serviciu sau sistem de fișiere în timp ce controlează expunerea la mediul de server subiacent. Cele două exemple comune pe care le-ați putea întâlni sunt în timpul secvenței de pornire și “shell-ul de urgență” pe sistemele Red Hat/CentOS/Fedora și în Secure FTP (SFTP).
comanda arată astfel:
chroot <newroot> ]
Similar cu comanda sudo
, comanda chroot
schimbă mediul următoarei comenzi. Cu alte cuvinte, vă va schimba în directorul newroot
și, de asemenea, face din acel director directorul “de lucru”. command
se execută apoi în acea locație, ceea ce este util pentru lucruri precum salvarea unui sistem care nu va porni.
spre deosebire de sudo
, veți fi “în” directorul. Această practică, din nou, este utilă dacă porniți de pe suporturi externe, dar trebuie să accesați un sistem de fișiere sau o comandă “locală” pentru a lucra.
cealaltă utilizare obișnuită a chroot
este de a restricționa un serviciu sau un utilizator utilizând un înveliș pentru a ascunde restul sistemului de fișiere, restricționând astfel vizualizarea de către un utilizator la distanță a datelor altor utilizatori. O implementare populară folosind această abordare SFTP.
exemplu
înainte de a începe să lucrați prin acest exemplu, trebuie să vă asigurați că aveți copii de rezervă. În acest caz, faceți o copie de rezervă a fișierului /etc/ssh/sshd_config
, deoarece veți face modificări la acesta în mod specific:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
deocamdată, veți restricționa doar utilizatorii SFTP la directoarele lor de acasă de pe server. Această cerință înseamnă că va trebui să adăugați utilizatori și să îi puneți într-un grup:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
rețineți că acest lucru va atribui nick
un cont fără coajă de conectare. Această tehnică este atât practică, cât și o bună practică de securitate: dacă folosește doar SFTP, nu ar trebui să aibă privilegii de conectare. Voi discuta despre furnizarea unui shell utilizatorilor la distanță în articolul următor.
acum, trebuie să spuneți serviciului ssh
ce trebuie să faceți atunci când utilizatorii SFTP se conectează. Deschideți fișierul /etc/ssh/sshd_config
și adăugați următoarele la sfârșit:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
este important să adăugați aceste setări ca un set separat de intrări și să utilizați sintaxa Match
pentru a indica faptul că această secțiune se aplică numai utilizatorilor din acest grup. Dacă ați făcut modificările la intrările existente, acestea s-ar aplica tuturor utilizatorilor SSH, ceea ce ar putea întrerupe accesul la distanță.
liniile de configurare se descompun după cum urmează:
-
ForceCommand
face cassh
să aleagă facilitatea încorporată pentru a furniza servicii SFTP (pe care le puteți controla independent). -
ChrootDirectory
spunesshd
unde să restricționeze utilizatorul. -
Subsystem sftp internal-sftp
spunesshd
să încarce serviciul internsftp
și să-l pună la dispoziție.
poate fi necesar să vă asigurați că acest Subsystem
nu este definit deja comentând această linie mai devreme în fișierul de configurare:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
după ce ați făcut modificările și ați verificat ortografia, continuați și salvați modificările. Apoi, reporniți sshd
:
# systemctl restart sshd
testați noul utilizator:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
Hopa, stai doar un minut: se pare că poți vedea și toate directoarele celorlalți utilizatori. Cu toate acestea, nu puteți naviga la aceste directoare:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
puteți direcționa utilizatorul chrooted către propriul director de acasă schimbând linia ChrootDirectory
din fișierul sshd_config
astfel:
ChrootDirectory /
această schimbare rapidă îl face să pară Nick ca și cum ar fi în propriul său director de acasă și nu va putea vedea fișierele altui utilizator:
sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>
unde s-a dus? Verifica acest lucru:
# ls /home/nicktest.txt
rețineți că un chroot jail
nu este considerat a fi o restricție de securitate adecvată de la sine. Deși împiedică un utilizator să se schimbe dintr – un director restricționat, există modalități în acest sens (ideea generală este menționată în pagina de manual chroot(2)
, la care ar trebui să aruncați o privire dacă aveți în vedere utilizarea acestui truc într-un context critic de producție sau de afaceri.)
împachetarea (deocamdată)
deci, puteți vedea că chroot
poate fi un instrument destul de util. În partea 2, Mă voi uita mai mult la atribuirea directoarelor specifice utilizatorilor și la furnizarea unui mediu shell unui utilizator la distanță fără a expune restul serverului.
nou pentru containere? Descărcați containerele Primer și aflați elementele de bază ale containerelor Linux.