Cómo instalar y configurar el servidor FTP en Ubuntu


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

rojo

En este tutorial, le mostraremos cómo instalar, configurar y asegurar un servidor FTP ( VSFTPD completo “ Daemon FTP muy seguro “) en Ubuntu para tener una seguridad poderosa contra las vulnerabilidades de FTP.

Paso 1: Instalando el Servidor VsFTP en Ubuntu

1. Primero, debemos actualizar la lista de fuentes de paquetes 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 próximo 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 tienes el firewall UFW habilitado (no está habilitado de manera predeterminada) en el servidor, debes abrir los puertos 21 y 20 donde los daemons de FTP están escuchando, para permitir el acceso a los servicios de 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: Configuración y seguridad del servidor VsFTP en Ubuntu

4. Ahora vamos a realizar 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 como asi que:

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

A continuación, vamos a abrir 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 que figuran en userlist_file =/etc/vsftpd.userlist se les niega el acceso de inicio de sesión con la opción userlist_deny = YES si userlist_enable = YES .

Sin embargo, la opción userlist_deny = NO tuerce el significado de la configuración predeterminada, por lo que solo los usuarios cuyo nombre de usuario aparezca explícitamente en userlist_file =/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   

rojo

A continuación, veremos dos posibles escenarios de cómo configurar el directorio de jaula chroot (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 = YES significa que los usuarios locales serán ubicados en una jaula chroot, su directorio de inicio de forma predeterminada después del inicio de sesión.

Y también debemos entender que VSFTPD no permite que se pueda escribir en el directorio chroot jail, de manera predeterminada, por razones de seguridad, podemos usar la opción allow_writeable_chroot = 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: Probando 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 al usuario aaronkilik en el archivo /etc/vsftpd.userlist con el comando echo y 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 la salida 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 la salida 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 que figura en el archivo /etc/vsftpd.userlist , se coloca realmente en su directorio de inicio después de iniciar sesión. Y esto es cierto a partir de la siguiente salida:

# 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

rojo

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

Por este motivo, en la sección a continuación, explicaremos un método más seguro para configurar un directorio raíz local no grabable diferente para un usuario.

Paso 4: Configurar los directorios de inicio de usuario de 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 comente la opción no segura utilizando 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 , posiblemente el suyo no sea el mismo) y configure los permisos necesarios deshabilitando los permisos de escritura de 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 siguientes opciones en el archivo de configuración de 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, vamos a realizar una comprobación final y asegurarnos de que el directorio raíz local del usuario sea 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 posiblemente proporcionarnos información importante sobre el tema.

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