Cum să restricționezi utilizatorii SSH la anumite directoare în Ubuntu 24.04

Cea mai sigură metodă de a restricționa utilizatorii SSH la un anumit director pe Ubuntu 24.04 este să utilizați OpenSSH ChrootDirectorycu ForceCommand internal-sftp. Acest lucru este ideal atunci când contul are nevoie doar de transfer de fișiere. Oferă utilizatorului o vizualizare SFTP a cărei rădăcină a sistemului de fișiere este directorul ales, blocând în același timp un shell interactiv și redirecționarea SSH.

Dacă utilizatorul are nevoie cu adevărat de un shell normal, decizia este diferită. Un shell interactiv chroot are nevoie de propriul său fișier binar shell, biblioteci, noduri de dispozitiv și fișiere de suport în interiorul jail-ului. OpenSSH documentează acest lucru explicit. Pentru majoritatea conturilor de încărcare, backup, agenție, furnizor și găzduire partajată, chroot-ul doar SFTP este mult mai simplu și mai puțin predispus la erori. Pentru utilizatorii neîncrezători care au nevoie de un mediu de comandă complet, un container sau o mașină virtuală dedicată este de obicei mai ușor de întreținut decât construirea manuală a unui chroot shell.

Acest ghid folosește Ubuntu 24.04 LTS și un exemplu de utilizator numit alice. Utilizatorul va fi restricționat la /srv/sftp/aliceși va avea voie să scrie doar în interiorul /files. Înlocuiți numele și căile pentru a se potrivi serverului dvs.

Înainte de a începe: înțelegeți regula privind proprietatea

Cea mai frecventă eroare chroot este cauzată de permisiuni. OpenSSH necesită ca fiecare componentă a ChrootDirectorycăii să fie deținută de root și să nu poată fi scrisă de grup sau de alți utilizatori . Această cerință este verificată necondiționat. Asta înseamnă că nu ar trebui să faceți /srv/sftp/aliceca aceasta să fie scrisă de alice.

În schimb, faceți ca directorul rădăcină al jail-ului să fie deținut de root și creați un director copil cu permisiuni de scriere:

/srv/sftp/alice        root:root   755
└── files              alice:alice 755

Acest design urmează comportamentul documentat în manualul Ubuntu 24.04sshd_config(5) . Același manual menționează că internal-sftpnu necesită fișiere runtime suplimentare în chroot, motiv pentru care este cel mai potrivit pentru un cont de transfer de fișiere restricționat.

Pasul 1: Verificați dacă serverul OpenSSH este instalat

Terminal Ubuntu care arată instalarea serverului OpenSSH și rularea serviciului SSH
Verificați dacă serverul OpenSSH este instalat și ssh.servicerulează înainte de a modifica regulile de acces.

Instalați pachetul serverului dacă este necesar:

sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh.service

Documentația oficială OpenSSH a Ubuntu folosește OpenSSH openssh-serverpentru pachetul daemon și ssh.servicepentru gestionarea serviciilor. Consultați ghidul OpenSSH pentru serverul Ubuntu .

Dacă aceasta este o mașină la distanță și SSH este singura cale administrativă, mențineți sesiunea de administrator existentă deschisă în timp ce faceți modificări. O configurație SSH greșită vă poate bloca accesul.

Pasul 2: Creați un grup și adăugați utilizatorul restricționat

Terminal Ubuntu care creează un grup sftpusers și adaugă utilizatorul alice
Creați un grup dedicat, astfel încât restricția să poată fi aplicată în mod consecvent unuia sau mai multor conturi exclusiv SFTP.

Creați un grup pentru utilizatori restricționați. Dacă aliceexistă deja, adăugați-o doar pe ea în grup:

sudo groupadd sftpusers
sudo adduser alice
sudo usermod -aG sftpusers alice
id alice

Dacă deja folosești chei publice SSH, continuă să o faci. Configurația chroot controlează ce se întâmplă după autentificare ; nu necesită să treci de la autentificarea cu cheie la parole.

O regulă bazată pe grupuri este de obicei mai bună decât un Match Userbloc separat pentru fiecare cont. Aceasta păstrează politica într-un singur loc. O regulă per utilizator este încă utilă atunci când diferiți utilizatori trebuie să fie închiși la layout-uri fără legătură.

Pasul 3: Construiți un jail deținut de root și un subdirector cu permisiuni de scriere

Terminalul Ubuntu creează /srv/sftp/alice și un subdirector de fișiere la care utilizatorul poate scrie, cu proprietăți separate
Directorul chroot rămâne deținut de root; doar filesdirectorul copil poate fi scris de utilizatorul restricționat.

Creați ierarhia directoarelor:

sudo mkdir -p /srv/sftp/alice/files
sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files
sudo chmod 755 /srv/sftp/alice/files

Verificați proprietatea:

ls -ld /srv /srv/sftp /srv/sftp/alice /srv/sftp/alice/files
namei -l /srv/sftp/alice

Dacă /srvsau /srv/sftpeste permisă scrierea de către grup sau de către utilizator, corectați și acest aspect. OpenSSH verifică toate componentele căii, nu doar directorul final.

Pasul 4: Adăugați o regulă de potrivire în sshd_config.d

Editorul Nano afișează un bloc sftpusers Match Group cu restricții ChrootDirectory și sftp interne
Un Match Groupbloc aplică politica chroot și SFTP-only numai membrilor sftpusers.

Documentația actuală a serverului Ubuntu recomandă păstrarea setărilor SSH personalizate în /etc/ssh/sshd_config.d/loc să le amestecați în fișierul principal inclus. Creați un fragment de cod:

sudo nano /etc/ssh/sshd_config.d/90-sftp-restricted.conf

Adăuga:

Match Group sftpusers
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp -d /files
    DisableForwarding yes
    PermitTTY no

Match all

%use extinde la numele de utilizator autentificat, deci aliceeste plasat în /srv/sftp/alice. -d /filesArgumentul îi spune serverului SFTP intern să pornească în directorul copil cu permisiuni de scriere. DisableForwarding yesdezactivează redirecționarea X11, agent, TCP și StreamLocal într-o singură directivă; este documentată special pentru simplificarea configurațiilor restricționate.

Valoarea finală Match alleste importantă într-un fragment de cod deoarece încheie contextul condițional înainte de analizarea configurației ulterioare.

Pasul 5: Alegeți între restricții bazate pe grup și restricții per utilizator

Terminalul Ubuntu creează un utilizator SFTP restricționat dedicat și un director în stilul /srv/sftp/uploads
Folosește un cont dedicat atunci când un furnizor, o lucrare de backup sau un utilizator extern nu ar trebui să aibă acces normal la shell.

Pentru mai mulți utilizatori cu același layout, păstrați regula de grup afișată mai sus. Pentru un singur cont excepțional, utilizați în schimb un bloc specific utilizatorului:

Match User vendor1
    ChrootDirectory /srv/vendor/vendor1
    ForceCommand internal-sftp -d /incoming
    DisableForwarding yes
    PermitTTY no

Match all

Alegeți în funcție de costul de administrare:

ScenariuCea mai bună regulăDe ce
Mulți utilizatori cu acces doar la încărcare și aceeași structurăMatch GroupO singură politică se aplică fiecărui membru.
Un furnizor are nevoie de un director unicMatch UserCalea și restricțiile pot diferi fără a afecta alte persoane.
Utilizatorul are nevoie de o shell interactivă normalăNu utilizați această rețetă exclusiv SFTPUn chroot interactiv are nevoie de un mediu de execuție complet.
Utilizatorii neîncrezători au nevoie de comenzi și izolare puternicăLuați în considerare un container sau o mașină virtualăMai ușor de definit și actualizat un mediu de execuție complet.

Pasul 6: Validați configurația SSH înainte de a reporni

Editorul Ubuntu afișează un bloc sftp intern ChrootDirectory și ForceCommand pentru un utilizator restricționat
Înainte de a aplica o regulă chroot, validați atât sintaxa, cât și setările efective per utilizator.

Nu reporniți niciodată SSH imediat după editarea fișierului. Mai întâi rulați testul de sintaxă recomandat de Ubuntu:

sudo sshd -t

Nicio ieșire înseamnă că verificarea sintaxei a reușit. De asemenea, puteți inspecta configurația efectivă pentru un anumit utilizator:

sudo sshd -T -C user=alice,host=localhost,addr=127.0.0.1   | grep -E 'chrootdirectory|forcecommand|disableforwarding|permittty'

Ar trebui să vedeți calea chroot așteptată și comanda SFTP forțată. Acest lucru este util în special pe Ubuntu, deoarece setările pot proveni atât din /etc/ssh/sshd_configfișierele , cât și din /etc/ssh/sshd_config.d/. Ubuntu notează că OpenSSH folosește în general prima valoare obținută pentru majoritatea directivelor, așadar verificarea configurației efective este mai sigură decât presupunerea care fișier câștigă.

Pasul 7: Reporniți SSH și testați cu SFTP

Terminal Ubuntu care afișează ssh.service activ și o autentificare SFTP al cărei director de lucru la distanță este /uploads
După un test de configurare curat, reporniți SSH și verificați dacă contul intră doar în sistemul de fișiere SFTP închis.

Aplicați modificarea:

sudo systemctl restart ssh.service
sudo systemctl status ssh.service

Apoi conectați-vă de la un alt terminal:

sftp alice@server.example.com

În interiorul SFTP, testați:

pwd
ls
put test.txt
ls -l

Cu configurația de mai sus, directorul SFTP inițial ar trebui să fie /files. Bara oblică afișată de SFTP este rădăcina chroot-ului, nu rădăcina reală a serverului.

O încercare normală de shell nu ar trebui să producă un shell nerestricționat:

ssh alice@server.example.com

Deoarece ForceCommand internal-sftpînlocuiește sesiunea solicitată cu serverul SFTP în proces, acest cont este intenționat destinat transferului de fișiere, nu executării comenzilor.

Pasul 8: Confirmați că utilizatorul nu poate evada din închisoare

Terminalul SFTP încearcă să acceseze căile părinte, /etc și /root și afișează acces refuzat
Testează explicit limita: căile precum cea a gazdei /etcnu /roottrebuie să devină vizibile în afara chroot-ului.

Încercați să vă deplasați deasupra rădăcinii aparente și să inspectați căile sensibile ale gazdei:

cd ..
ls /
ls /etc
ls /root

În interiorul chroot-ului, /reprezintă /srv/sftp/alicepe gazdă. Dacă ați creat directorul `no` etcsau root`en` în interiorul acelui jail, utilizatorul nu poate accesa directorul `real` /etcsau `en` al gazdei /root.

Testați și o încărcare în /files. O configurație care blochează escape, dar accidental face ca întregul jail să fie doar pentru citire este sigură, dar nu este utilă pentru un cont de încărcare.

Depanare: „proprietar sau moduri greșite pentru directorul chroot”

Dacă autentificarea eșuează imediat, verificați jurnalul serviciului SSH:

sudo journalctl -fu ssh.service

Ghidul OpenSSH al Ubuntu recomandă jurnalul de servicii SSH pentru depanare. Dacă observați o eroare de proprietate sau mod, inspectați fiecare director părinte:

namei -l /srv/sftp/alice

Calea chroot trebuie să fie deținută de root și să nu poată fi scrisă de grup sau de alții. O greșeală frecventă este următoarea:

sudo chown alice:alice /srv/sftp/alice

Nu rezolvați problema prin slăbirea verificărilor OpenSSH. Plasați zona de scriere a utilizatorului sub rădăcina chroot:

sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files

Ce se întâmplă dacă utilizatorul are nevoie de acces la shell SSH, nu doar la SFTP?

ChrootDirectorypoate fi folosit și cu un shell interactiv, dar configurarea este substanțial mai complexă. OpenSSH afirmă că un chroot interactiv are nevoie de cel puțin un shell și /devnoduri de bază, plus orice fișiere binare, biblioteci, fișiere de rezoluție a numelor și alte dependențe necesare comenzilor pe care le permiteți.

Pentru un cont de dispozitiv strict controlat, construirea unui astfel de jail poate fi justificată. Pentru accesul general la comenzi Linux, acest lucru creează adesea o povară de întreținere: actualizările de securitate pentru instrumente și biblioteci trebuie, de asemenea, să se reflecte în jail. Dacă cerința dvs. reală este „permiteți acestei persoane să execute comenzi, dar izolați-o de gazdă”, un container, o mașină virtuală sau un serviciu restricționat special conceput este de obicei mai ușor de auditat.

Îmbunătățiri de securitate care merită adăugate

Restricția de director este doar un singur nivel. Pentru serverele cu acces la internet, luați în considerare și:

  • Folosiți autentificarea cu cheie publică SSH pentru conturile umane și de automatizare, acolo unde este posibil.
  • Nu acordați sudoacces utilizatorilor cu transfer de fișiere restricționat.
  • Păstrați DisableForwarding yespentru conturile exclusiv SFTP, astfel încât conexiunea SSH să nu poată fi reutilizată pentru tuneluri sau redirecționare prin agenți.
  • Limitați directoarele în care se poate scrie la cea mai mică zonă de care are nevoie fluxul de lucru.
  • Verificați journalctl -u ssh.serviceși stabiliți dreptul de proprietate asupra fișierului după adăugarea utilizatorilor.
  • Mențineți o sesiune de administrator deschisă în timp ce testați modificările configurației SSH la distanță.

Pentru comportamentul definitiv al ChrootDirectory, Match, ForceCommand, și DisableForwarding, utilizați manualul de configurare a serverului OpenSSH Ubuntu 24.04 . Pentru configurația specifică Ubuntu, validare, comenzi de repornire și înregistrare în jurnal, consultați documentația oficială a serverului OpenSSH Ubuntu .

Concluzie

Dacă obiectivul este „acest cont SSH poate încărca și descărca fișiere doar într-un singur director”, utilizați o `root` ChrootDirectory, plasați conținutul care poate fi scris într-un director copil deținut de utilizator și forțați ` internal-sftp. Validați cu ` sshd -tînainte de a reporni`, apoi testați atât calea de încărcare permisă, cât și tentativa de acces în afara jail-ului. Aceasta vă oferă o limită de securitate mică și ușor de înțeles, fără a fi nevoie să construiți un mediu Linux complet în interiorul chroot-ului.

Lasă un comentariu

Descărcați FlightGear gratuit: Ghid oficial de instalare

Descărcați FlightGear gratuit: Ghid oficial de instalare

Descarcă FlightGear gratuit de pe site-ul oficial. Compară pachetele Windows, macOS și Linux, instalează fișierele de date și începe primul tău zbor.

Aplicația desktop Google Tasks: Cum se utilizează pe computer

Aplicația desktop Google Tasks: Cum se utilizează pe computer

Deschide Google Tasks într-un browser, adaugă o comandă rapidă pentru Chrome sau o lansare în stilul aplicației și gestionează activitățile de făcut în avans prin Calendar și Gmail.

OKSampler: Un sampler muzical gratuit și simplu pentru ritmuri de claviatură

OKSampler: Un sampler muzical gratuit și simplu pentru ritmuri de claviatură

OKSampler mapează clipuri MP3 pe tastele tastaturii și poate reda audio în buclă. Află ce face software-ul gratuit vechi, unde se termină funcțiile sale vechi și ce trebuie să verifici înainte de descărcare.

Cum să joci Don't Starve Together pe Linux

Cum să joci Don't Starve Together pe Linux

Instalează versiunea Linux a jocului Don't Starve Together prin Steam, creează o lume sau alătură-te prietenilor urmând acești pași de configurare și depanare.

Cum să joci Squad pe Linux cu Steam Proton

Cum să joci Squad pe Linux cu Steam Proton

Configurează Squad pe Linux cu Steam Play și Proton, instalează jocul, alege un instrument de compatibilitate și depanează problemele anti-cheat.

Cum se instalează Linux Mint Debian Edition 5 „Elsie” de pe USB

Cum se instalează Linux Mint Debian Edition 5 „Elsie” de pe USB

Descărcați și verificați fișierul ISO LMDE 5 arhivat, creați un USB bootabil și alegeți setările de instalare sigure. Elsie a ajuns la sfârșitul duratei de viață; consultați versiunea curentă a LMDE.

Cum se creează o unitate USB bootabilă cu Windows 11 pe Linux

Cum se creează o unitate USB bootabilă cu Windows 11 pe Linux

Creați un USB de instalare Windows 11 pe Linux cu Ventoy: obțineți fișierul ISO oficial, instalați Ventoy în siguranță, copiați imaginea și porniți PC-ul țintă.

Cum se instalează Wireshark pe Linux: Ubuntu, Fedora, Arch și altele

Cum se instalează Wireshark pe Linux: Ubuntu, Fedora, Arch și altele

Instalați Wireshark pe Ubuntu, Debian, Fedora, Arch sau openSUSE cu comenzile actuale ale pachetului, apoi configurați captura de pachete live în siguranță.

Cum se joacă DiRT Rally pe Linux: Configurarea Steam și remedierile Proton

Cum se joacă DiRT Rally pe Linux: Configurarea Steam și remedierile Proton

Învață cum să joci DiRT Rally pe Linux dacă îl deții deja pe Steam: instalează versiunea nativă, lansează-l și folosește Proton doar ca soluție de rezervă.

Cum se instalează Devuan Linux de pe un USB bootabil

Cum se instalează Devuan Linux de pe un USB bootabil

Instalați Devuan Excalibur din fișierul ISO Desktop Live. Verificați descărcarea, creați un USB bootabil, protejați partițiile existente și finalizați configurarea cu Refracta Installer.