Com instal·lar i configurar el servidor FTP a Ubuntu


FTP (File Transfer Protocol) és un protocol de xarxa estàndard relativament antic i més utilitzat per a la càrrega/descàrrega de fitxers entre dos ordinadors a través d'una xarxa. No obstant això, FTP pel seu original insegur, perquè transmet dades juntament amb les credencials d'usuari (nom d'usuari i contrasenya) sense xifratge.

Avís: si teniu previst utilitzar FTP, considereu la possibilitat de configurar la connexió FTP amb SSL/TLS (es tractarà a l'article següent). En cas contrari, sempre és millor utilitzar FTP segur com SFTP.

En aquest tutorial, mostrarem com instal·lar, configurar i protegir un servidor FTP (VSFTPD al complet \Very Secure FTP Daemon\) a Ubuntu per tenir una potent seguretat contra les vulnerabilitats FTP.

Pas 1: instal·lació del servidor VsFTP a Ubuntu

1. En primer lloc, hem d'actualitzar la llista de fonts de paquets del sistema i després instal·lar el paquet binari VSFTPD de la següent manera:

$ sudo apt-get update
$ sudo apt-get install vsftpd

2. Un cop finalitzada la instal·lació, el servei es desactivarà inicialment, per tant, caldrà iniciar-lo manualment durant el temps i també habilitar-lo perquè s'iniciï automàticament a partir de la següent arrencada del sistema:

------------- On SystemD ------------- 
# systemctl start vsftpd
# systemctl enable vsftpd

------------- On SysVInit ------------- 
# service vsftpd start
# chkconfig --level 35 vsftpd on

3. A continuació, si teniu el tallafoc UFW habilitat (no està activat per defecte) al servidor, heu d'obrir els ports 21 i 20 on els dimonis FTP estan escoltant, per tal de permetre l'accés als serveis FTP des de màquines remotes i, a continuació, afegiu-hi les noves regles del tallafoc de la següent manera:

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw status

Pas 2: Configuració i seguretat del servidor VsFTP a Ubuntu

4. Ara realitzem unes quantes configuracions per configurar i protegir el nostre servidor FTP, primer crearem una còpia de seguretat del fitxer de configuració original /etc/vsftpd/vsftpd.conf així:

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

A continuació, obrim el fitxer de configuració vsftpd.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

Afegiu/modifiqueu les opcions següents amb aquests valors:

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

Tingueu en compte que, per defecte, als usuaris llistats a userlist_file=/etc/vsftpd.userlist se'ls nega l'accés a l'inici de sessió amb l'opció userlist_deny=YES si userlist_enable=YES.

Però, l'opció userlist_deny=NO torça el significat de la configuració predeterminada, de manera que només els usuaris el nom d'usuari dels quals apareix explícitament a userlist_file=/etc/vsftpd.userlist podran iniciar sessió al servidor FTP.

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   

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

A continuació, veurem dos possibles escenaris de com configurar el directori de la presó (arrel local) amb chroote, tal com s'explica a continuació.

6. En aquest punt, anem a afegir/modificar/descomentar aquestes dues opcions següents per restringir els usuaris FTP als seus directoris d'inici.

chroot_local_user=YES
allow_writeable_chroot=YES

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

I també hem d'entendre que VSFTPD no permet que el directori chroot jail sigui escrivible, per defecte per motius de seguretat, però, podem utilitzar l'opció allow_writeable_chroot=YES per desactivar aquesta configuració.

Deseu el fitxer i tanqueu-lo. Aleshores hem de reiniciar els serveis VSFTPD perquè els canvis anteriors tinguin efecte:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

Pas 3: prova del servidor VsFTP a Ubuntu

7. Ara provarem el servidor FTP creant un usuari FTP amb l'ordre useradd de la següent manera:

$ sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
$ sudo passwd aaronkilik

Aleshores, hem d'enumerar explícitament l'usuari aaronkilik al fitxer /etc/vsftpd.userlist amb l'ordre echo i l'ordre tee de la següent manera:

$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
$ cat /etc/vsftpd.userlist

8. Ara és hora de provar que les nostres configuracions anteriors funcionen segons calgui. Començarem provant els inicis de sessió anònims; podem veure clarament a la sortida següent que els inicis de sessió anònims no estan permesos al servidor FTP:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. A continuació, provem si un usuari que no figura al fitxer /etc/vsftpd.userlist tindrà permís per iniciar sessió, cosa que no és cert a la sortida que segueix:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. Ara farem una prova final per determinar si un usuari que apareix al fitxer /etc/vsftpd.userlist, es troba realment al seu directori d'inici després d'iniciar sessió. I això és cert a partir de la sortida següent:

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

Avís: establir l'opció allow_writeable_chroot=YES pot ser tan perillós que té possibles implicacions de seguretat, sobretot si els usuaris tenen permís de càrrega, o més, accés a l'intèrpret d'ordres. Utilitzeu-lo només si sabeu exactament el que esteu fent.

Hem de tenir en compte que aquestes implicacions de seguretat no són específiques de VSFTPD, també poden afectar tots els altres dimonis FTP que ofereixen posar usuaris locals a les presons chroot.

Per aquest motiu, a la secció següent, explicarem un mètode més segur per establir un directori arrel local diferent que no es pot escriure per a un usuari.

Pas 4: configureu els directoris d'inici d'usuaris FTP a Ubuntu

11. Ara, obriu el fitxer de configuració VSFTPD una vegada més.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

i comenta l'opció no segura utilitzant el caràcter # tal com es mostra a continuació:

#allow_writeable_chroot=YES

A continuació, creeu el directori arrel local alternatiu per a l'usuari (aaronkilik, possiblement el vostre no sigui el mateix) i configureu els permisos necessaris desactivant els permisos d'escriptura a tots els altres usuaris d'aquest directori:

$ sudo mkdir /home/aaronkilik/ftp
$ sudo chown nobody:nogroup /home/aaronkilik/ftp
$ sudo chmod a-w /home/aaronkilik/ftp

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

$ sudo mkdir /home/aaronkilik/ftp/files
$ sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
$ sudo chmod -R 0770 /home/aaronkilik/ftp/files/

Després, afegiu/modifiqueu les opcions següents al fitxer de configuració VSFTPD amb els seus valors corresponents:

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. I reinicieu els serveis VSFTPD amb la configuració recent:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

13. Ara, fem una verificació final i ens assegurem que el directori arrel local de l'usuari és el directori FTP que hem creat al seu directori d'inici.

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

Això és! Recordeu compartir la vostra opinió sobre aquesta guia mitjançant el formulari de comentaris a continuació o, possiblement, proporcionar-nos qualsevol informació important sobre el tema.

Per últim, però no menys important, no us perdeu el nostre proper article, on descriurem com protegir un servidor FTP mitjançant connexions SSL/TLS a Ubuntu 16.04/16.10, fins aleshores, estigueu sempre atents a TecMint.