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


FTP (Protocolo de transferencia de archivos) 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 es necesaria la autenticación (permite que los usuarios anónimos se conecten a un servidor). Debemos entender que FTP no es seguro por defecto, porque 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 "Very Secure FTP Daemon") en CentOS/RHEL 7 y distribuciones Fedora.

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

Paso 1: instalación del servidor FTP

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

# yum install vsftpd

2. Una vez completada la instalación, el servicio se desactivará al principio, por lo que debemos iniciarlo manualmente por el momento y habilitarlo para que se inicie automáticamente desde el siguiente inicio del sistema también:

# systemctl start vsftpd
# systemctl enable vsftpd

3. A continuación, para permitir el acceso a los servicios FTP desde sistemas externos, tenemos que abrir el puerto 21, donde los demonios 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: configurar el servidor FTP

4. Ahora pasaremos 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 anterior 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 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 u003d/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 u003d YES.

Sin embargo, userlist_deny u003d NO altera la configuración, lo que significa que solo los usuarios enumerados explícitamente en userlist_file u003d/etc/vsftpd.userlist podrán iniciar sesión.

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 les 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 escenarios posibles de cómo hacer un chroot de usuarios de FTP en el directorio de inicio (raíz local) para 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 u003d YES significa que los usuarios locales serán colocados en una cárcel chroot, su directorio de inicio después de iniciar sesión por 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 u003d YES para anular esta configuración.

Guarde el archivo y ciérrelo.

Asegurar 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 con 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?idu003d1097775.

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

# semanage boolean -m ftpd_full_access --on

En este punto, tenemos que reiniciar vsftpd para efectuar todos los cambios que hicimos 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, tenemos que 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 probar si nuestra configuración anterior funciona correctamente. Comencemos probando los inicios de sesión anónimos, podemos ver en la captura de pantalla a continuación que los inicios de sesión anónimos no están permitidos:

# 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. Probemos también 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 el caso como en la captura de pantalla a continuació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) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Ahora haga una revisión final si un usuario listado en el archivo /etc/vsftpd.userlist, está realmente ubicado 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

Active esta opción solo 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 de FTP que ofrecen poner a los usuarios locales en cárceles chroot también.

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

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

12. Abra el archivo de configuración vsftpd nuevamente y comience comentando la opción no segura a continuación:

#allow_writeable_chroot=YES

Luego cree el directorio raíz local alternativo para el usuario ( ravi , el suyo probablemente sea diferente) y elimine los permisos de escritura para 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 bajo 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, reiniciemos el servicio con la nueva configuración:

# systemctl restart vsftpd

14. Ahora haga una prueba final nuevamente y vea que el directorio raíz local del usuario es el directorio FTP que creamos en su directorio personal.

# 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 próximo artículo, también le mostraremos cómo proteger un servidor FTP usando conexiones SSL/TLS en CentOS 7, hasta entonces, manténgase conectado a TecMint.