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 ca ssh să aleagă facilitatea încorporată pentru a furniza servicii SFTP (pe care le puteți controla independent).
  • ChrootDirectory spune sshd unde să restricționeze utilizatorul.
  • Subsystem sftp internal-sftp spune sshd să încarce serviciul intern sftp ș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.

Lasă un răspuns

Adresa ta de email nu va fi publicată.