Cómo instalar, configurar y proteger el servidor FTP en CentOS 7 - [Guía completa]


FTP ( File Transfer Protocol ) es una herramienta estándar tradicional y ampliamente utilizada para transferir archivos entre un servidor y clientes a través de una red, especialmente cuando no se necesita autenticación (permite usuarios anónimos para conectarse a un servidor). Debemos entender que FTP no es seguro de manera predeterminada, ya que transmite credenciales de usuario y datos sin cifrado.

En esta guía, describiremos los pasos para instalar, configurar y asegurar un servidor FTP ( VSFTPD significa “ Daemon FTP muy seguro “) en CentOS / RHEL 7 y Fedora .

Tenga en cuenta que todos los comandos de esta guía se ejecutarán como root , en caso de que no esté utilizando el servidor con la cuenta root , use el comando sudo para obtener privilegios de root.

Paso 1: Instalar el servidor FTP

1. La instalación de vsftpd en el servidor es sencilla, simplemente ejecute el siguiente comando en el terminal.

# yum install vsftpd

2. Una vez completada la instalación, el servicio se deshabilitará al principio, por lo que debemos iniciarlo manualmente por el momento y permitir que se inicie automáticamente desde el próximo inicio del sistema también

# systemctl start vsftpd
# systemctl enable vsftpd

3. A continuación, para permitir el acceso a servicios FTP desde sistemas externos, debemos abrir el puerto 21 , donde los daemons de FTP están escuchando de la siguiente manera:

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

Paso 2: Configuración del servidor FTP

4. Ahora vamos a realizar algunas configuraciones para configurar y asegurar nuestro servidor FTP, comencemos haciendo una copia de seguridad del archivo de configuración original /etc/vsftpd/vsftpd.conf :

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

A continuación, abra el archivo de configuración de arriba y configure las siguientes opciones con estos valores correspondientes:

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

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

Sin embargo, userlist_deny = NO altera la configuración, lo que significa que solo se permitirá el inicio de sesión de los usuarios que se enumeran explícitamente en userlist_file =/etc/vsftpd.userlist .

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   

Eso no es todo, cuando los usuarios inician sesión en el servidor FTP, se colocan en una jaula chroot, este es el directorio raíz local que actuará como su directorio de inicio para la sesión FTP solamente.

A continuación, veremos dos escenarios posibles de cómo utilizar los usuarios de FTP en directorios de directorios de Inicio (raíz local) para los usuarios de FTP, como se explica a continuación.

6. Ahora agregue estas dos opciones siguientes para restringir a los usuarios de FTP a sus directorios de Inicio.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user = YES significa que los usuarios locales serán ubicados en una jaula chroot, su directorio de inicio después de iniciar sesión con la configuración predeterminada.

Y también de forma predeterminada, vsftpd no permite que se pueda escribir en el directorio chroot jail por razones de seguridad; sin embargo, podemos usar la opción allow_writeable_chroot = YES para anular esta configuración.

Guarde el archivo y ciérrelo.

Asegurando el servidor FTP con SELinux

7. Ahora, configuremos el booleano SELinux a continuación para permitir que FTP lea archivos en el directorio de inicio de un usuario. Tenga en cuenta que esto se hizo inicialmente usando el comando:

# setsebool -P ftp_home_dir on

Sin embargo, la directiva ftp_home_dir se ha deshabilitado de forma predeterminada como se explica en este informe de error: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Ahora usaremos el comando semanage para configurar la regla de SELinux para permitir que FTP lea/escriba el directorio de inicio del usuario.

# semanage boolean -m ftpd_full_access --on

En este punto, tenemos que reiniciar vsftpd para efectuar todos los cambios que hemos hecho hasta ahora:

# systemctl restart vsftpd

Paso 4: Prueba del servidor FTP

8. Ahora probaremos el servidor FTP creando un usuario FTP con el comando useradd.

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

Luego, debemos agregar el usuario ravi al archivo /etc/vsftpd.userlist usando el comando echo de la siguiente manera:

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

9. Ahora es el momento de comprobar si nuestra configuración anterior funciona correctamente. Comencemos probando inicios de sesión anónimos, podemos ver en la siguiente captura de pantalla que no se permiten inicios de sesión anónimos:

# 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. También probemos si a un usuario que no figura en el archivo /etc/vsftpd.userlist se le otorgará permiso para iniciar sesión, lo que no es el caso como en la captura de pantalla abajo:

# 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. Ahora realice una comprobación final si un usuario que figura en el archivo /etc/vsftpd.userlist , se coloca en su directorio de inicio después de iniciar sesión:

# 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

Solo active esta opción si sabe exactamente lo que está haciendo. Es importante tener en cuenta que estas implicaciones de seguridad no son específicas de vsftpd, se aplican a todos los demonios FTP que ofrecen poner a los usuarios locales en jaulas chroot también.

Por lo tanto, veremos una forma más segura de configurar un directorio raíz local no grabable diferente en la siguiente sección.

Paso 5: Configurar diferentes directorios de inicio de usuario de FTP

12. Vuelva a abrir el archivo de configuración vsftpd y comience por comentar la siguiente opción no segura:

#allow_writeable_chroot=YES

Luego cree el directorio raíz local alternativo para el usuario ( ravi , el suyo es probablemente diferente) y elimine los permisos de escritura de todos los usuarios en este directorio:

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

13. A continuación, cree un directorio en la raíz local donde el usuario almacenará sus archivos:

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

Luego agregue/modifique las siguientes opciones en el archivo de configuración vsftpd con estos valores:

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. Una vez más, vamos a reiniciar el servicio con la nueva configuración:

# systemctl restart vsftpd

14. Ahora vuelva a realizar una prueba final y compruebe que el directorio raíz local del usuario es el directorio FTP que creamos en su directorio 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

¡Eso es! En este artículo, describimos cómo instalar, configurar y asegurar un servidor FTP en CentOS 7, use la sección de comentarios a continuación para escribirnos sobre esta guía/compartir cualquier información útil sobre este tema.

En el siguiente artículo, también le mostraremos cómo proteger un servidor FTP mediante conexiones SSL/TLS en CentOS 7, hasta entonces, permanezca conectado a TecMint.