Cómo instalar y configurar el servidor FTP en Ubuntu


FTP (Protocolo de transferencia de archivos) es un protocolo de red estándar relativamente antiguo y más utilizado que se utiliza para cargar/descargar archivos entre dos computadoras a través de una red. Sin embargo, FTP por su original inseguro, porque transmite datos junto con las credenciales de usuario (nombre de usuario y contraseña) sin cifrado.

Advertencia: si planea utilizar FTP, considere configurar la conexión FTP con SSL/TLS (se tratará en el próximo artículo). De lo contrario, siempre es mejor utilizar FTP seguro, como SFTP.

En este tutorial, mostraremos cómo instalar, configurar y asegurar un servidor FTP (VSFTPD en su totalidad “Very Secure FTP Daemon”) en Ubuntu para tener una poderosa seguridad contra vulnerabilidades FTP.

Paso 1: Instalar el servidor VsFTP en Ubuntu

1. Primero, debemos actualizar la lista de fuentes del paquete del sistema y luego instalar el paquete binario VSFTPD de la siguiente manera:

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

2. Una vez que se complete la instalación, el servicio se deshabilitará inicialmente, por lo tanto, debemos iniciarlo manualmente por el tiempo medio y también habilitarlo para que se inicie automáticamente desde el siguiente inicio del sistema:

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

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

3. A continuación, si tiene el firewall UFW habilitado (no está habilitado de manera predeterminada) en el servidor, debe abrir los puertos 21 y 20 donde los demonios FTP están escuchando, para permitir el acceso a los servicios FTP desde máquinas remotas, luego agregue las nuevas reglas de firewall de la siguiente manera:

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

Paso 2: configurar y proteger el servidor VsFTP en Ubuntu

4. Realicemos ahora algunas configuraciones para configurar y asegurar nuestro servidor FTP, primero crearemos una copia de seguridad del archivo de configuración original /etc/vsftpd/vsftpd.conf así:

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

A continuación, abramos el archivo de configuración vsftpd.

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

Agregue/modifique las siguientes opciones con estos valores:

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. Ahora, configure VSFTPD para permitir/denegar el acceso FTP a los usuarios según el archivo de lista de usuarios /etc/vsftpd.userlist.

Tenga en cuenta que, de forma predeterminada, a los usuarios enumerados en userlist_file u003d/etc/vsftpd.userlist se les niega el acceso de inicio de sesión con la opción userlist_deny u003d YES si userlist_enable u003d YES .

Pero, la opción userlist_deny u003d NO cambia el significado de la configuración predeterminada, por lo que solo los usuarios cuyo nombre de usuario esté explícitamente listado en userlist_file u003d/etc/vsftpd.userlist podrán iniciar sesión en el 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   

Importante: Cuando los usuarios inician sesión en el servidor FTP, se los coloca en una cárcel con chroot, este es el directorio raíz local que actuará como su directorio de inicio solo para la sesión FTP.

A continuación, veremos dos posibles escenarios de cómo configurar el directorio de la cárcel chrooted (raíz local), como se explica a continuación.

6. En este punto, agreguemos/modifiquemos/descomentemos estas dos opciones siguientes para restringir a los usuarios de FTP a sus directorios de inicio.

chroot_local_user=YES
allow_writeable_chroot=YES

La opción chroot_local_user u003d YES significa que los usuarios locales serán ubicados en una cárcel chroot, su directorio de inicio por defecto después de iniciar sesión.

Y también debemos entender que VSFTPD no permite que se pueda escribir en el directorio chroot jail, de forma predeterminada por razones de seguridad, sin embargo, podemos usar la opción allow_writeable_chroot u003d YES para deshabilitar esta configuración.

Guarde el archivo y ciérrelo. Luego, tenemos que reiniciar los servicios VSFTPD para que los cambios anteriores surtan efecto:

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

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

Paso 3: Probar el servidor VsFTP en Ubuntu

7. Ahora probaremos el servidor FTP creando un usuario FTP con el comando useradd de la siguiente manera:

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

Luego, tenemos que listar explícitamente el usuario aaronkilik en el archivo /etc/vsftpd.userlist con el comando echo y el comando tee como se muestra a continuación:

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

8. Ahora es el momento de probar que nuestras configuraciones anteriores funcionan como es necesario. Comenzaremos probando los inicios de sesión anónimos; Podemos ver claramente en el resultado a continuación que los inicios de sesión anónimos no están permitidos en el 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ón, probemos si a un usuario que no figura en el archivo /etc/vsftpd.userlist se le otorgará permiso para iniciar sesión, lo cual no es cierto en el resultado que sigue:

# 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. Ahora realizaremos una prueba final para determinar si un usuario listado en el archivo /etc/vsftpd.userlist, está realmente ubicado en su directorio de inicio después de iniciar sesión. Y esto es cierto a partir de la salida a continuación:

# 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

Advertencia: configurar la opción allow_writeable_chroot u003d YES puede ser muy peligroso, tiene posibles implicaciones de seguridad, especialmente si los usuarios tienen permiso de carga, o más, acceso de shell. Úselo solo si sabe exactamente lo que está haciendo.

Debemos tener en cuenta que estas implicaciones de seguridad no son específicas de VSFTPD, sino que también pueden afectar a todos los demás demonios de FTP que ofrecen poner a los usuarios locales en cárceles chroot.

Por esta razón, en la sección siguiente, explicaremos un método más seguro para configurar un directorio raíz local no modificable diferente para un usuario.

Paso 4: configurar directorios de inicio de usuario FTP en Ubuntu

11. Ahora, abra el archivo de configuración VSFTPD una vez más.

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

y comenta la opción insegura usando el carácter # como se muestra a continuación:

#allow_writeable_chroot=YES

A continuación, cree el directorio raíz local alternativo para el usuario (aaronkilik, el suyo posiblemente no sea el mismo) y establezca los permisos necesarios deshabilitando los permisos de escritura para todos los demás usuarios en este directorio:

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

12. Luego, cree un directorio bajo la raíz local con los permisos apropiados donde el usuario almacenará sus archivos:

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

Luego, agregue/modifique las opciones a continuación en el archivo de configuración VSFTPD con sus valores correspondientes:

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

Guarde el archivo y ciérrelo. Y reinicie los servicios VSFTPD con la configuración reciente:

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

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

13. Ahora, realicemos una verificación final y asegurémonos de que el directorio raíz local del usuario es el directorio FTP que creamos en su directorio de inicio.

# 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

¡Eso es! Recuerde compartir su opinión sobre esta guía a través del formulario de comentarios a continuación o proporcionarnos cualquier información importante sobre el tema.

Por último, pero no menos importante, no se pierda nuestro próximo artículo, donde describiremos cómo proteger un servidor FTP usando conexiones SSL/TLS en Ubuntu 16.04/16.10, hasta entonces, esté siempre atento a TecMint.