Introducere
FTP, scurt pentru File Transfer Protocol, este un protocol de rețea care a fost odată utilizate pe scară largă pentru mutarea fișierelor între un client și server. De atunci a fost înlocuit cu modalități mai rapide, mai sigure și mai convenabile de livrare a fișierelor. Mulți casual, utilizatorii de Internet aștepta pentru a descărca direct de pe browser-ul lor web cu https
, și de comandă-line utilizatorii sunt mult mai susceptibile de a utiliza protocoale securizate, cum ar fi scp
sau sFTP.,
FTP este încă utilizat pentru a sprijini aplicații vechi și fluxuri de lucru cu nevoi foarte specifice. Dacă aveți posibilitatea de a alege ce protocol să utilizați, Luați în considerare explorarea opțiunilor mai moderne. Cu toate acestea, când aveți nevoie de FTP, vsftpd este o alegere excelentă. Optimizat pentru securitate, performanță și stabilitate, vsftpd oferă o protecție puternică împotriva multor probleme de securitate găsite în alte servere FTP și este implicit pentru multe distribuții Linux.,
în acest tutorial, vă vom arăta cum să configurați vsftpd pentru a permite unui utilizator să încarce fișiere în directorul său de domiciliu folosind FTP cu acreditări de conectare securizate prin SSL/TLS.
Premise
Pentru a urmări, împreună cu acest tutorial, veți avea nevoie de:
- Un Ubuntu 16.04 server cu un utilizator non-root cu
sudo
privilegii: puteți afla mai multe despre cum să înființeze un utilizator cu aceste privilegii în primul Configurare Server cu Ubuntu 16.04 ghid.odată ce aveți un server Ubuntu instalat, sunteți gata să începeți.,Pasul 1 — Instalarea vsftpd
Vom începe prin a actualiza lista de pachete și instalarea vsftpd daemon:
- sudo apt-get update
- sudo apt-get install vsftpd
atunci Când instalarea este completă, vom copia fișierul de configurare astfel încât să putem începe cu un gol de configurare, salvarea original ca o copie de rezervă.
- sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
cu o copie de rezervă a configurației în loc, suntem gata pentru a configura firewall-ul.
Pasul 2-Deschiderea Firewall-ului
vom verifica starea firewall-ului pentru a vedea dacă este activat., Dacă da, ne vom asigura că traficul FTP este permis, astfel încât să nu intrați în regulile firewall-ului care vă blochează atunci când vine vorba de testare.
- sudo ufw status
În acest caz, doar SSH este permis prin:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)este posibil să Aveți alte reguli sau fără reguli firewall, la toate. Deoarece numai
ssh
traficul este permis în acest caz, va trebui să adăugăm reguli pentru traficul FTP.,Am nevoie pentru a deschide porturile 20 si 21 pentru FTP, port 990 pentru mai târziu, când ne-am permite TLS, și porturi 40000-50000 pentru gama de porturi pasive-am de gând să se stabilească în fișierul de configurare:
- sudo ufw allow 20/tcp
- sudo ufw allow 21/tcp
- sudo ufw allow 990/tcp
- sudo ufw allow 40000:50000/tcp
- sudo ufw status
Acum regulile firewall-ului arata ca:
Cu
vsftpd
instalat și necesar porturi deschise, suntem gata pentru a trece la pasul următor.Pasul 3-Pregătirea directorului de utilizator
pentru acest tutorial, vom crea un utilizator, dar este posibil să aveți deja un utilizator care are nevoie de acces FTP., Vom avea grijă să păstrăm accesul unui utilizator existent la datele sale în instrucțiunile care urmează. Chiar și așa, vă recomandăm să începeți cu un utilizator nou până când ați configurat și testat configurarea.mai întâi, vom adăuga un utilizator de test:
- sudo adduser sammy
atribuiți o parolă atunci când vi se solicită și nu ezitați să apăsați „ENTER” prin celelalte solicitări.
FTP este în general mai sigur atunci când utilizatorii sunt restricționați la un anumit director.
vsftpd
realizează acest lucru cuchroot
închisori., Cândchroot
este activat pentru utilizatorii locali, aceștia sunt restricționați în mod implicit la directorul lor de domiciliu. Cu toate acestea, din cauza modului în carevsftpd
securizează directorul, acesta nu trebuie să poată fi scris de utilizator. Acest lucru este bine pentru un utilizator nou, care ar trebui să se conecteze doar prin FTP, dar un utilizator existent ar putea avea nevoie să scrie în folderul lor de acasă dacă au acces și la shell.,În acest exemplu, mai degrabă decât eliminarea scrie privilegii din directorul home, ne va crea un
ftp
director pentru a servi cachroot
și o scrierefiles
director pentru a organiza fișierele reale.,33″>
Outputtotal 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..
Apoi, vom crea directorul unde fișierele pot fi încărcate și de a atribui dreptul de proprietate a utilizatorului:
- sudo mkdir /home/sammy/ftp/files
- sudo chown sammy:sammy /home/sammy/ftp/files
Un permissions verifica pe files
director ar trebui să se întoarcă următoarele:
- sudo ls -la /home/sammy/ftp
în cele din Urmă, vom adăuga un test.txt
fișier pentru a utiliza atunci când am testat mai târziu:
- echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt
Acum că ne-am asigurat ftp
director și-a permis accesul utilizatorului la files
director, ne vom îndrepta atenția spre configurare.,
Pasul 4-Configurarea accesului FTP
planificăm să permitem unui singur utilizator cu un cont shell local să se conecteze cu FTP. Cele două setări cheie pentru aceasta sunt deja setate în vsftpd.conf
. Începeți prin a deschide fișierul de configurare pentru a verifica dacă setările de configurare se potrivesc cu cele de mai jos:
- sudo nano /etc/vsftpd.conf
în continuare va trebui să schimbăm unele valori din fișier. Pentru a permite utilizatorului să încarce fișiere, vom decomenta setarea write_enable
astfel încât să avem:
. . .write_enable=YES. . .
de asemenea, vom decomenta chroot pentru a împiedica utilizatorul conectat la FTP să acceseze orice fișiere sau comenzi din afara arborelui de directoare.
. . .chroot_local_user=YES. . .
Vom adăuga un user_sub_token
pentru a introduce numele de utilizator în local_root directory
calea noastră de configurare va lucra pentru acest utilizator și orice viitor utilizatorii care ar putea fi adăugate.
user_sub_token=$USERlocal_root=/home/$USER/ftp
Vom limita gama de porturi care pot fi utilizate pentru pasiv FTP pentru a face destul de sigur sunt disponibile conexiuni:
pasv_min_port=40000pasv_max_port=50000
Notă: Am pre-deschis porturile pe care le-am setat aici pentru intervalul de port pasiv. Dacă modificați valorile, asigurați-vă că actualizați setările firewall-ului.deoarece planificăm să permitem accesul FTP de la caz la caz, vom configura configurația astfel încât accesul să fie dat unui utilizator doar atunci când acesta este adăugat Explicit într-o listă și nu implicit:
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO
userlist_deny
comută logica. Când este setat la „da”, utilizatorilor din listă li se refuză accesul FTP. Când este setat la „nu”, numai utilizatorii din listă au acces. Când ați terminat de făcut modificarea, salvați și ieșiți din fișier.în cele din urmă, vom crea și adăuga utilizatorul nostru la fișier., Vom folosi -a
pavilion pentru a adăuga la dosar:
- echo "sammy" | sudo tee -a /etc/vsftpd.userlist
Dublu-a verifica care a fost adăugat ca te-ai așteptat:
cat /etc/vsftpd.userlist
Outputsammy
Restart daemon pentru a încărca modificările de configurație:
- sudo systemctl restart vsftpd
Acum suntem gata pentru testare.
Pasul 5-testarea accesului FTP
am configurat serverul pentru a permite doar utilizatorului sammy
să se conecteze prin FTP. Să ne asigurăm că este cazul.utilizatorii anonimi nu ar trebui să se conecteze: am dezactivat accesul anonim., Aici vom testa asta încercând să ne conectăm anonim. Dacă am făcut-o în mod corespunzător, utilizatorii anonimi ar trebui să fie refuzat permisiunea:
- ftp -p 203.0.113.0
Închide conexiune:
- bye
alți Utilizatori decât sammy
ar trebui să nu reușesc să se conecteze: în continuare, vom încerca conectarea noastră sudo
utilizator. De asemenea, ar trebui să li se refuze accesul și ar trebui să se întâmple înainte de a li se permite să introducă parola.,și scrie fișiere: Aici, ne vom asigura că ne desemnat de utilizator canconnect:
- ftp -p 203.0.113.0
Vom schimba în files
director, apoi utilizați get
comandă pentru a transfera fișierul de testare am creat mai devreme pentru a noastră mașină locală:
- cd files
- get test.txt
Ne vom întoarce înapoi în jurul valorii de și să încerce să încărcați fișierul cu un nume nou pentru a testa permisiuni de scriere:
- put test.txt upload.txt
Închide conexiune:
- bye
Acum că am testat noastră de configurare, vom lua măsuri pentru a asigura în continuare pe serverul nostru.,
Pasul 6-securizarea tranzacțiilor
deoarece FTP nu criptează date în tranzit, inclusiv acreditările utilizatorilor, vom permite TTL/SSL să furnizeze acea criptare. Primul pas este crearea certificatelor SSL pentru utilizarea cu vsftpd.
Vom folosi openssl
pentru a crea un nou certificat și de a folosi -days
pavilion pentru a o face valabilă pentru un an. În aceeași comandă, vom adăuga o cheie RSA privată de 2048 biți., Apoi, prin stabilirea atât -keyout
și -out
steaguri la aceeași valoare, cheia privată și certificatul va fi situat în același fișier.vom face acest lucru cu următoarea comandă:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
vi se va solicita să furnizați informații despre adresă pentru certificatul dvs., Substitut propriile informații pentru întrebările de mai jos:
Pentru mai multe informații detaliate despre certificatul steaguri, vezi OpenSSL Esențiale: de Lucru cu SSL Certificate, Chei Private și a recomandărilor specifice fiecărei țări
după ce ați creat certificatelor, deschideți vsftpd
fișier de configurare din nou:
- sudo nano /etc/vsftpd.conf
Spre partea de jos a fișierului, ar trebui să-două linii care încep cu rsa_
. Comentați-le astfel încât să pară:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
mai Jos le, adăugați următoarele linii care indica certificatul și cheia privată ne-am creat:
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem
după aceea, vom forța utilizarea SSL, ceea ce va împiedica conectarea clienților care nu se pot ocupa de TLS. Acest lucru este necesar pentru a vă asigura că tot traficul este criptat, dar poate forța utilizatorul FTP să schimbe clienții. Schimba ssl_enable
și YES
:
ssl_enable=YES
După aceea, adăugați următoarele linii pentru a nega în mod explicit conexiuni anonime peste SSL și să solicite SSL atât pentru transferul de date și datele de conectare:
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES
După asta, vom configura serverul pentru a utiliza TLS, preferat succesorul SSL prin adaugarea urmatoarei linii:
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO
În cele din urmă, vom adăuga încă două opțiuni. În primul rând, nu vom necesita reutilizarea SSL, deoarece poate rupe mulți clienți FTP., Vom avea nevoie de suite de cifruri de criptare „înalte”, ceea ce înseamnă în prezent lungimi de cheie egale sau mai mari de 128 biți:
require_ssl_reuse=NOssl_ciphers=HIGH
când ați terminat, salvați și închideți fișierul.
acum, trebuie să repornim serverul pentru ca modificările să aibă efect:
- sudo systemctl restart vsftpd
În acest moment, nu vom mai putea să ne conectăm cu un client de linie de comandă nesigur. Dacă am încerca, am vedea ceva de genul:
în continuare, vom verifica dacă ne putem conecta folosind un client care acceptă TLS.,
Pasul 7-testarea TLS cu FileZilla
majoritatea clienților FTP moderni pot fi configurați pentru a utiliza criptarea TLS. Vom demonstra cum să vă conectați folosind FileZilla datorită suportului său cross platform. Consultați documentația pentru alți clienți.
când deschideți prima dată FileZilla, găsiți pictograma Manager Site chiar sub fișierul word, pictograma cea mai stângă din rândul de sus. Faceți clic pe acesta:
se va deschide o fereastră nouă., Faceți clic pe butonul” Site Nou”din colțul din dreapta jos:
Sub” Site-urile mele „va apărea o nouă pictogramă cu cuvintele” site nou”. Puteți să-l denumiți acum sau să reveniți mai târziu și să utilizați butonul Redenumire.
trebuie să completați câmpul „gazdă” cu numele sau adresa IP. În meniul derulant” criptare”, selectați”Solicitați FTP explicit peste TLS”.
pentru „Logon Type”, selectați”Ask for password”. Completați utilizatorul FTP pe care l-ați creat în câmpul „Utilizator”:
Faceți clic pe „Conectați” în partea de jos a interfeței., Vi se va cere parola utilizatorului:
Faceți clic pe „OK” pentru a vă conecta. Acum ar trebui să fiți conectat cu serverul dvs. cu criptare TLS/SSL.
când ați acceptat certificatul, faceți dublu clic pe folderul files
și trageți încărcarea.txt la stânga pentru a confirma că sunteți capabil de a descărca fișiere.
când ați făcut asta, faceți clic dreapta pe copia locală, redenumiți-o în upload-tls.txt ‘ și trageți – l înapoi la server pentru a confirma că puteți încărca fișiere.,
acum ați confirmat că puteți transfera în siguranță și cu succes fișiere cu SSL / TLS activat.
Pasul 8-dezactivarea accesului Shell (opțional)
dacă nu puteți utiliza TLS din cauza cerințelor clientului, puteți obține o anumită securitate dezactivând capacitatea utilizatorului FTP de a vă conecta în orice alt mod. Un mod relativ simplu de a preveni este prin crearea unui shell personalizat. Aceasta nu va oferi nicio criptare, dar va limita accesul unui cont compromis la fișierele accesibile prin FTP.,
în Primul rând, deschideți un fișier numit ftponly
în directorul bin:
- sudo nano /bin/ftponly
Vom adăuga un mesaj care spune utilizatorului ce sunt în măsură să vă conectați.,/p>
#!/bin/shecho "This account is limited to FTP access only."
Modifica permisiunile pentru a face fișierul executabil:
- sudo chmod a+x /bin/ftponly
Deschideți lista de valabil scoici:
- sudo nano /etc/shells
În partea de jos, adauga:
. . ./bin/ftponly
Actualizare utilizator shell cu următoarea comandă:
- sudo usermod sammy -s /bin/ftponly
Acum, încercați să vă conectați ca sammy:
ar trebui să vedeți ceva de genul:
OutputThis account is limited to FTP access only.Connection to 203.0.113.0 closed.
Acest lucru confirmă faptul că utilizatorul nu mai poate ssh
la server și este limitată pentru a accesa FTP-ul numai.,
concluzie
în acest tutorial am acoperit configurarea FTP pentru utilizatorii cu un cont local. Dacă trebuie să utilizați o sursă externă de autentificare, ați putea dori să se uite în sprijinul vsftpd de utilizatori virtuali. Aceasta oferă un set bogat de opțiuni prin utilizarea PAM, modulele de autentificare conectabile și este o alegere bună dacă gestionați utilizatorii într-un alt sistem, cum ar fi LDAP sau Kerberos.