Com instal·lar, configurar i assegurar el servidor FTP a CentOS 7 - [Guia completa]


FTP (File Transfer Protocol) és una eina estàndard tradicional i àmpliament utilitzada per transferir fitxers entre un servidor i clients a través d'una xarxa, especialment quan no és necessària l'autenticació (permet que usuaris anònims es connectin a un servidor). Hem d'entendre que l'FTP no és segur per defecte, perquè transmet les credencials i les dades dels usuaris sense xifratge.

En aquesta guia, descriurem els passos per instal·lar, configurar i protegir un servidor FTP (VSFTPD significa Very Secure FTP Daemon) a les distribucions CentOS/RHEL 7 i Fedora.

Tingueu en compte que totes les ordres d'aquesta guia s'executaran com a root, en cas que no feu servir el servidor amb el compte root, utilitzeu l'ordre sudo per obtenir privilegis de root.

Pas 1: instal·lació del servidor FTP

1. La instal·lació del servidor vsftpd és senzilla, només cal que executeu l'ordre següent al terminal.

# yum install vsftpd

2. Un cop finalitzada la instal·lació, el servei es desactivarà al principi, per la qual cosa hem d'iniciar-lo manualment de moment i habilitar-lo també per iniciar-se automàticament a partir de la següent arrencada del sistema:

# systemctl start vsftpd
# systemctl enable vsftpd

3. A continuació, per permetre l'accés als serveis FTP des de sistemes externs, hem d'obrir el port 21, on els dimonis FTP escolten de la següent manera:

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

Pas 2: Configuració del servidor FTP

4. Ara passarem a realitzar algunes configuracions per configurar i protegir el nostre servidor FTP, comencem fent una còpia de seguretat del fitxer de configuració original /etc/vsftpd/vsftpd.conf:

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

A continuació, obriu el fitxer de configuració anterior i configureu les opcions següents amb aquests valors corresponents:

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. Ara configureu FTP per permetre/denegar l'accés FTP als usuaris en funció del fitxer de llista d'usuaris /etc/vsftpd.userlist.

Per defecte, als usuaris que figuren a userlist_file=/etc/vsftpd.userlist se'ls denega l'accés a l'inici de sessió amb l'opció userlist_deny establerta en YES, si userlist_enable=YES.

Tanmateix, userlist_deny=NO altera la configuració, el que significa que només els usuaris que figuren explícitament a userlist_file=/etc/vsftpd.userlist podran iniciar sessió.

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   

Això no és tot, quan els usuaris inicien sessió al servidor FTP, es col·loquen en una presó amb chroot, aquest és el directori arrel local que actuarà com a directori d'inici només per a la sessió FTP.

A continuació, analitzarem dos possibles escenaris de com fer el chroot dels usuaris FTP al directori Home (arrel local) per als usuaris FTP, tal com s'explica a continuació.

6. Ara afegiu aquestes dues opcions següents per restringir els usuaris FTP als seus directoris d'inici.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=SI significa que els usuaris locals seran col·locats en una presó chroot, el seu directori d'inici després d'iniciar sessió per defecte.

I també per defecte, vsftpd no permet que el directori chroot jail sigui escrivible per motius de seguretat, però, podem utilitzar l'opció allow_writeable_chroot=YES per anul·lar aquesta configuració.

Deseu el fitxer i tanqueu-lo.

Assegurar el servidor FTP amb SELinux

7. Ara, configurem el booleà SELinux a continuació per permetre que FTP llegeixi fitxers al directori d'inici d'un usuari. Tingueu en compte que això es va fer inicialment amb l'ordre:

# setsebool -P ftp_home_dir on

Tanmateix, la directiva ftp_home_dir s'ha desactivat per defecte tal com s'explica en aquest informe d'error: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Ara utilitzarem l'ordre semanage per establir la regla SELinux per permetre que FTP llegeixi/escrigui el directori inicial de l'usuari.

# semanage boolean -m ftpd_full_access --on

En aquest punt, hem de reiniciar vsftpd per efectuar tots els canvis que hem fet fins ara:

# systemctl restart vsftpd

Pas 4: prova del servidor FTP

8. Ara provarem el servidor FTP creant un usuari FTP amb l'ordre useradd.

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

Després, hem d'afegir l'usuari ravi al fitxer /etc/vsftpd.userlist utilitzant l'ordre echo de la següent manera:

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

9. Ara és el moment de provar si la nostra configuració anterior funciona correctament. Comencem provant els inicis de sessió anònims, podem veure a la captura de pantalla següent que els inicis de sessió anònims no estan permesos:

# 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. També provem si un usuari que no figura al fitxer /etc/vsftpd.userlist tindrà permís per iniciar sessió, que no és el cas com a la captura de pantalla següent:

# 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. Ara feu una comprovació final si un usuari que apareix al fitxer /etc/vsftpd.userlist es troba realment al seu directori d'inici després d'iniciar sessió:

# 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

Només activeu aquesta opció si sabeu exactament el que esteu fent. És important tenir en compte que aquestes implicacions de seguretat no són específiques de vsftpd, s'apliquen a tots els dimonis FTP que també ofereixen posar els usuaris locals a les presons chroot.

Per tant, veurem una manera més segura d'establir un directori arrel local diferent que no es pot escriure a la secció següent.

Pas 5: configureu diferents directoris d'inici d'usuaris FTP

12. Obriu el fitxer de configuració vsftpd de nou i comenceu comentant l'opció no segura a continuació:

#allow_writeable_chroot=YES

A continuació, creeu el directori arrel local alternatiu per a l'usuari (ravi, probablement el vostre sigui diferent) i elimineu els permisos d'escriptura a tots els usuaris d'aquest directori:

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

13. A continuació, creeu un directori sota l'arrel local on l'usuari emmagatzemarà els seus fitxers:

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

A continuació, afegiu/modifiqueu les opcions següents al fitxer de configuració vsftpd amb aquests valors:

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

Deseu el fitxer i tanqueu-lo. Una vegada més, reiniciem el servei amb la nova configuració:

# systemctl restart vsftpd

14. Ara torneu a fer una prova final i comproveu que el directori arrel local dels usuaris és el directori FTP que hem creat al seu directori d'inici.

# 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

Això és! En aquest article, vam descriure com instal·lar, configurar i protegir un servidor FTP a CentOS 7, utilitzeu la secció de comentaris següent per escriure'ns sobre aquesta guia/compartir qualsevol informació útil sobre aquest tema.

Al següent article, també us mostrarem com protegir un servidor FTP mitjançant connexions SSL/TLS a CentOS 7, fins aleshores, manteniu-vos connectat a TecMint.