Cum să instalați, să configurați și să securizați serverul FTP în CentOS 7 - [Ghid cuprinzător]


FTP (File Transfer Protocol) este un instrument standard tradițional și utilizat pe scară largă pentru transferul de fișiere între un server și clienți printr-o rețea, în special acolo unde nu este necesară autentificarea (permite utilizatorilor anonimi pentru a vă conecta la un server). Trebuie să înțelegem că FTP este nesecurizat în mod implicit, deoarece transmite acreditările și datele utilizatorului fără criptare.

În acest ghid, vom descrie pașii pentru instalarea, configurarea și securizarea unui server FTP (VSFTPD înseamnă „Very Secure FTP Daemon“) în CentOS Distribuțiile/RHEL 7 și Fedora.

Rețineți că toate comenzile din acest ghid vor fi executate ca root, în cazul în care nu utilizați serverul cu contul root, utilizați comanda sudo pentru a obține privilegii de root.

Pasul 1: Instalarea serverului FTP

1. Instalarea serverului vsftpd este simplă, trebuie doar să rulați următoarea comandă în terminal.

yum install vsftpd

2. După finalizarea instalării, serviciul va fi dezactivat la început, așa că trebuie să-l pornim manual deocamdată și să-l activăm să pornească automat și de la următoarea pornire a sistemului:

systemctl start vsftpd
systemctl enable vsftpd

3. În continuare, pentru a permite accesul la serviciile FTP din sisteme externe, trebuie să deschidem portul 21, unde demonii FTP ascultă după cum urmează:

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

Pasul 2: Configurarea serverului FTP

4. Acum ne vom deplasa pentru a efectua câteva configurații pentru a configura și a securiza serverul nostru FTP, să începem prin a face o copie de rezervă a fișierului de configurare original /etc/vsftpd/vsftpd.conf :

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Apoi, deschideți fișierul de configurare de mai sus și setați următoarele opțiuni cu aceste valori corespunzătoare:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Acum configurați FTP pentru a permite/interza accesul FTP utilizatorilor pe baza fișierului cu listă de utilizatori /etc/vsftpd.userlist.

În mod implicit, utilizatorilor listați în userlist_file=/etc/vsftpd.userlist li se refuză accesul de conectare cu opțiunea userlist_deny setată la DA, dacă userlist_enable=DA.

Cu toate acestea, userlist_deny=NO modifică setarea, ceea ce înseamnă că numai utilizatorii enumerați în mod explicit în userlist_file=/etc/vsftpd.userlist vor avea permisiunea de a se conecta.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Asta nu este tot, atunci când utilizatorii se conectează la serverul FTP, ei sunt plasați într-o închisoare chroot-ed, acesta este directorul rădăcină local care va acționa ca directorul lor de domiciliu numai pentru sesiunea FTP.

În continuare, ne vom uita la două scenarii posibile cu privire la modul în care utilizatorii FTP pot fi crootați în directoarele Home (rădăcină locală) pentru utilizatorii FTP, așa cum este explicat mai jos.

6. Acum adăugați aceste două opțiuni următoare pentru a restricționa utilizatorii FTP la directoarele lor de pornire.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES înseamnă că utilizatorii locali vor fi plasați într-o închisoare chroot, directorul lor de pornire după conectare prin setări implicite.

Și, de asemenea, în mod implicit, vsftpd nu permite ca directorul chroot jail să fie scris din motive de securitate, cu toate acestea, putem folosi opțiunea allow_writeable_chroot=YES pentru a înlocui această setare.

Salvați fișierul și închideți-l.

Securizarea serverului FTP cu SELinux

7. Acum, să setăm valoarea booleană SELinux de mai jos pentru a permite FTP să citească fișierele din directorul principal al unui utilizator. Rețineți că acest lucru a fost făcut inițial folosind comanda:

setsebool -P ftp_home_dir on

Cu toate acestea, directiva ftp_home_dir a fost dezactivată implicit, așa cum este explicat în acest raport de eroare: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Acum vom folosi comanda semanage pentru a seta regula SELinux pentru a permite FTP să citească/scrie directorul principal al utilizatorului.

semanage boolean -m ftpd_full_access --on

În acest moment, trebuie să repornim vsftpd pentru a efectua toate modificările făcute până acum mai sus:

systemctl restart vsftpd

Pasul 4: Testarea serverului FTP

8. Acum vom testa serverul FTP creând un utilizator FTP cu comanda useradd.

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

După aceea, trebuie să adăugăm utilizatorul ravi în fișierul /etc/vsftpd.userlist folosind comanda echo, după cum urmează:

echo "ravi" | tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

9. Acum este timpul să testați dacă setările noastre de mai sus funcționează corect. Să începem prin a testa conectările anonime, putem vedea din captura de ecran de mai jos că conectările anonime nu sunt permise:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Să testăm și dacă unui utilizator care nu este listat în fișierul /etc/vsftpd.userlist i se va acorda permisiunea de a se autentifica, ceea ce nu este cazul ca în captura de ecran de mai jos:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Acum verificați final dacă un utilizator listat în fișierul /etc/vsftpd.userlist este de fapt plasat în directorul său principal după conectare:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Activați această opțiune doar dacă știți exact ce faceți. Este important de reținut că aceste implicații de securitate nu sunt specifice vsftpd, ele se aplică tuturor demonilor FTP care oferă să pună și utilizatorii locali în închisori chroot.

Prin urmare, ne vom uita la o modalitate mai sigură de a seta un alt director rădăcină local care nu poate fi scris în secțiunea următoare.

Pasul 5: Configurați diferite directoare de acasă ale utilizatorilor FTP

12. Deschideți din nou fișierul de configurare vsftpd și începeți prin a comenta opțiunea nesigură de mai jos:

#allow_writeable_chroot=YES

Apoi creați directorul rădăcină local alternativ pentru utilizator (ravi, al dvs. este probabil diferit) și eliminați permisiunile de scriere pentru toți utilizatorii din acest director:

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. Apoi, creați un director sub rădăcina locală în care utilizatorul își va stoca fișierele:

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

Apoi adăugați/modificați următoarele opțiuni în fișierul de configurare vsftpd cu aceste valori:

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

Salvați fișierul și închideți-l. Încă o dată, să repornim serviciul cu noile setări:

systemctl restart vsftpd

14. Acum faceți din nou un test final și vedeți că directorul rădăcină local al utilizatorilor este directorul FTP pe care l-am creat în directorul său principal.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Asta este! În acest articol, am descris cum să instalați, să configurați și să securizați un server FTP în CentOS 7, utilizați secțiunea de comentarii de mai jos pentru a ne scrie înapoi cu privire la acest ghid/a împărtăși orice informații utile despre acest subiect.

Lectură sugerată: Instalați serverul ProFTPD pe RHEL/CentOS 7

În următorul articol, vă vom arăta și cum să securizați un server FTP folosind conexiuni SSL/TLS în CentOS 7, până atunci, rămâneți conectat la TecMint.