Búsqueda de sitios web

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 donde no es necesaria autenticación (permite usuarios anónimos). para conectarse a un servidor). Debemos entender que FTP no es seguro por defecto, porque transmite credenciales y datos de usuario sin cifrar.

En esta guía, describiremos los pasos para instalar, configurar y proteger un servidor FTP (VSFTPD significa “Very Secure FTP Daemon“) en CentOS distribuciones /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é operando el servidor con la cuenta root, use el comando sudo para obtener privilegios de root.

Paso 1: instalar el servidor FTP

1. Instalar el servidor vsftpd es sencillo, simplemente ejecute el siguiente comando en la 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 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 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 proteger 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 los 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=/etc/vsftpd.userlist se les deniega el acceso de inicio de sesión con la opción userlist_deny establecida en YES, si userlist_enable=SÍ.

Sin embargo, userlist_deny=NO altera la configuración, lo que significa que solo los usuarios enumerados explícitamente en userlist_file=/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 chroot, este es el directorio raíz local que actuará como su directorio de inicio sólo para la sesión FTP.

A continuación, veremos dos escenarios posibles sobre cómo hacer chroot de usuarios de FTP al directorio de directorios 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=YES significa que los usuarios locales serán colocados en una cárcel chroot, su directorio de inicio después de iniciar sesión según 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.

Asegurar el servidor FTP con SELinux

7. Ahora, configuremos el valor 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 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 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

Después, 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 siguiente captura de pantalla 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. 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 haga una verificación final si un usuario incluido en el archivo /etc/vsftpd.userlist realmente se ubica 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 sólo si sabe exactamente lo que está haciendo. Es importante tener en cuenta que estas implicaciones de seguridad no son específicas de vsftpd, sino que se aplican a todos los demonios FTP que también ofrecen colocar a los usuarios locales en cárceles chroot.

Por lo tanto, veremos una forma más segura de configurar un directorio raíz local diferente y no modificable 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 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, 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 de inicio.

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 todo! En este artículo, describimos cómo instalar, configurar y proteger un servidor FTP en CentOS 7. Utilice la sección de comentarios a continuación para escribirnos sobre esta guía o compartir cualquier información útil sobre este tema.

Lectura sugerida: Instalar el servidor ProFTPD en RHEL/CentOS 7

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, permanezca conectado a TecMint.