¿Cómo instalar y configurar un servidor FTP en Linux?

FTP (protocolo de transferencia de archivos) es un protocolo de Internet que se utiliza para transferir archivos entre el cliente y el servidor a través de Internet o una red informática. Es similar a otros protocolos de Internet como SMTP que se usa para correos electrónicos y HTTP que se usa para sitios web. El servidor FTP habilita la funcionalidad de transferir archivos entre el servidor y el cliente. Un cliente se conecta al servidor con credenciales y, según los permisos que tenga, puede leer archivos o cargar archivos al servidor también. En este artículo veremos cómo configurar un servidor FTP, configurar permisos de usuario, configurar un firewall y finalmente encriptar nuestro tráfico FTP con SSL.

¿Cómo funciona el servidor FTP?

El servidor FTP facilita la transferencia de archivos entre el cliente y el servidor. Puede cargar un archivo en un servidor o descargar un archivo del servidor. Un cliente realiza dos tipos de conexiones con el servidor, una para dar comandos y otra para transferir datos. El cliente envía el comando al servidor FTP en el puerto 21, que es el puerto de comando para FTP. Para transferir datos, se utiliza un puerto de datos . Hay dos tipos de modos de conexión para transferir datos:

  • Modo activo: en el modo activo, el cliente abre un puerto y espera a que el servidor se conecte para transferir datos. El servidor usa su puerto 20 para conectarse al cliente para la transferencia de datos. El modo activo no está configurado de forma predeterminada en la mayoría de los clientes FTP porque la mayoría de los cortafuegos bloquean las conexiones que se inician desde el exterior, en este caso, la conexión iniciada por nuestro servidor FTP. Para usar esto, debe configurar su firewall.
  • Modo pasivo:  en este, cuando un cliente solicita un archivo del servidor, el servidor abre un puerto aleatorio y le dice al cliente que se conecte a ese puerto. En este caso, las conexiones son iniciadas por el cliente y esto también resuelve los problemas del firewall. La mayoría de los clientes FTP utilizan el modo pasivo de forma predeterminada.

Implementación paso a paso

Al principio, acceda a su máquina virtual Linux mediante SSH con un usuario que tenga permisos sudo y siga los siguientes pasos:

Paso 1: Instalar servidor FTP

Hay muchos servidores FTP para elegir, como ProFTPD, vsftpd, etc. Usaremos vsftpd. 

Características del servidor FTP vsftpd

vsftpd tiene muchas características que lo convierten en una excelente opción como servidor FTP. Eso 

  • Soporta integración SSL/TLS
  • Puede encarcelar a los usuarios en su directorio de inicio con una característica llamada chroot. Lo configuraremos más adelante en este artículo.
  • Puede limitar el ancho de banda.
  • Admite usuarios virtuales
  • Admite configuración de IP virtual
  • Soporta IPv6

 Escriba el siguiente comando para instalar vsftpd

sudo apt install vsftpd

Ahora comprobaremos si el servicio vsftpd está activo o no. Escribir

sudo systemctl status vsftpd

Puede ver bajo el encabezado Activo que está activo y ejecutándose. El comando systemctl se usa para administrar y verificar servicios en Linux. También podemos usar este comando para habilitar y deshabilitar servicios en Linux. Si su vsftpd no está activo, escriba

sudo systemctl enable --now vsftpd

El indicador –now garantiza que el comando enable afecte nuestro servicio inmediatamente y no después de un reinicio.

Paso 2: configurar el cortafuegos

FTP usa el puerto 20 para el modo activo, el puerto 21 para los comandos y una variedad de puertos para el modo pasivo. Necesitamos abrir estos puertos desde nuestro firewall. Si no utiliza ningún firewall, puede omitir este paso. La mayoría de los sistemas Linux usan ufw para administrar los firewalls, sin embargo, algunos proveedores de servicios en la nube como Microsoft Azure tienen firewalls fuera de la máquina virtual y debe configurarlos desde su portal. Cualquiera sea el caso, simplemente abra los puertos 20 y 21 para conexiones TCP y abra un rango de puertos para conexiones FTP pasivas. El rango de puertos pasivos depende de cuántos clientes de usuarios simultáneos espera tener. Además, un solo cliente puede usar múltiples puertos para transferir múltiples archivos o un archivo grande. También necesitamos especificar nuestro servidor FTP para usar esos puertos y veremos cómo hacerlo más adelante en este tutorial. Los puertos hasta el 1024 están reservados y nuestro rango de puertos FTP pasivo debe ser mayor que eso. Abriré puertos desde 5000-10000. También abriremos el puerto 990 para TLS que configuraremos más adelante. Hagámoslo por la ufw. Escribir

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 5000:10000/tcp

Paso 3: Configurar usuarios

Los dos casos de uso más comunes de los servidores FTP son:

  • Desea alojar un servidor FTP público y muchos usuarios públicos se conectarán a su servidor FTP para descargar archivos.
  • Desea cargar sus archivos en su servidor Linux para uso personal y no tendría usuarios públicos.

En el primer caso, deberá crear un usuario adicional y compartir su nombre de usuario y contraseña con sus clientes para acceder a los archivos. Todo lo demás es igual para el segundo caso.

La idea básica es que el usuario administrador debería poder cargar archivos en cualquier carpeta de la máquina, y el usuario público debería poder ver y descargar archivos solo desde un directorio específico. Para que esto suceda, debe tener una idea básica de los permisos de usuario. El usuario root tiene permiso para escribir archivos en cualquier carpeta del servidor, y cualquier otro usuario tiene acceso a todas las carpetas dentro de su directorio de inicio, que es /home/username , y la mayoría de los otros directorios no pueden ser escritos por otros usuarios. Entonces, si desea cargar archivos en otros directorios fuera del directorio de inicio de su usuario administrador, digamos /var/www , entonces deberá cambiar el propietario de este directorio a su usuario administrador con chowno cambie los permisos de modificación del directorio con el comando  chmod .

Comencemos por crear nuestra cuenta de usuario pública. Escribir

sudo adduser ftpuser

Ingrese su contraseña, deje otros valores vacíos y, por último, ingrese Y para guardar los cambios.

Ahora, por motivos de seguridad, deshabilitaremos el permiso ssh para este usuario. Escribir

sudo nano /etc/ssh/sshd_config

Agregue la siguiente línea en este archivo

DenyUsers ftpuser

Presiona Ctrl + x , luego y y luego enter. Ahora, reinicia el servicio SSH para que estos nuevos ajustes surtan efecto.

sudo systemctl restart sshd

Paso 4: Cree la carpeta FTP y configure los permisos

Crearemos nuestra carpeta FTP. Escribir

sudo mkdir /ftp

Ahora, cambiaremos el propietario de este directorio a nuestro usuario administrador. Escribir

sudo chown adminuser /ftp

Si desea cargar archivos en cualquier carpeta que no sea propiedad de su usuario administrador, deberá cambiar el propietario de esa carpeta con el comando mencionado anteriormente.

Paso 5: configurar y asegurar vsftpd

Abra el archivo de configuración vsftpd. Escribir

sudo nano /etc/vsftpd.conf

Asegúrese de que las siguientes líneas no estén comentadas

...
anonymous_enable=NO

local_enable=YES

write_enable=YES
...

Además, abrimos los puertos 5000 a 10000 en el paso 2 para el modo pasivo, por lo que ahora le informaremos a vsftpd qué puertos usar para la conexión FTP pasiva. Agregue las siguientes líneas en el archivo vsftpd.conf

pasv_min_port=5000
pasv_max_port=10000

Ahora, especificaremos el directorio predeterminado para las conexiones FTP que se abrirá cuando alguien se conecte a nuestro servidor FTP. Agrega la siguiente línea

local_root=/ftp 

Recuerde, no ponga ningún espacio antes y después de = en este archivo de configuración. 

Bloquear al usuario en el directorio de inicio

Ahora, por razones de seguridad, bloquearemos ftpuser en el directorio predeterminado, ya que, de forma predeterminada, un usuario puede navegar por todo el servidor Linux. Para hacer esto, vsftpd usa chroot. Para hacer esto, descomente las siguientes líneas 

...
chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list
...

Además, agregue la siguiente línea ya que no está en el archivo de configuración de forma predeterminada

allow_writeable_chroot=YES

La primera línea habilita la función chroot para usuarios locales que incluye nuestro usuario administrador y nuestro usuario ftpuser. La segunda y la tercera línea nos permiten elegir a qué usuarios aplicar chroot. 

Configuración de permisos de archivo

local_umask=0002

Esta línea establecerá el permiso de modificación de cada archivo nuevo creado en 664 (-rw-rw-r-) y de cada carpeta nueva en 775 (rwxrwxr-x). Con esto, el ftpuser solo puede leer y descargar archivos de cada subdirectorio de nuestro directorio FTP, pero no tiene permiso para cargar nada en nuestro directorio FTP ya que no es el propietario. 

Presiona Ctrl + x , luego y y luego enter. Ahora, necesitamos crear ese archivo de lista. Escribir

sudo touch /etc/vsftpd.chroot_list
sudo nano /etc/vsftpd.chroot_list

Cualquiera que sea el usuario que especifique en este archivo, no será chroot. Así que agregue su nombre de usuario de administrador en este archivo porque no queremos bloquearlo. Presione Ctrl + x luego y luego ingrese . Ahora necesitamos reiniciar nuestro servidor vsftpd para que todas estas configuraciones se apliquen de inmediato. Escribir

sudo systemctl restart --now vsftpd

Paso 6: Asegurar vsftpd con SSL/TLS

Se recomienda cifrar el tráfico FTP si desea utilizarlo en Internet. Cifraremos nuestro tráfico con FTPS (protocolo de transferencia de archivos sobre SSL). Comencemos generando un certificado autofirmado. Escribir 

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Ingrese toda la información requerida y se generará su certificado. También puede pulsar Intro si desea que se establezcan los valores predeterminados. Ahora, abra el archivo de configuración de vsftpd. Escribe 

sudo nano /etc/vsftpd.conf

Vaya al final del archivo y elimine las siguientes líneas

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

ssl_enable=NO

Y pega las siguientes lineas

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Guarde los cambios y, finalmente, reinicie el servicio vsftpd escribiendo

sudo systemctl restart --now vsftpd

Paso 7: Conexión a nuestro servidor FTP

Para hacer esto, necesitará un cliente FTP. Una vez más, hay un montón de ellos para elegir. Te sugiero que vayas con Filezilla. Descárgalo e instálalo y luego ábrelo. Ingrese la dirección IP de su servidor en el campo Host, su nombre de usuario y contraseña, y haga clic en conectar y listo. 

En el lado izquierdo, verá los directorios de su PC, y en el lado derecho, verá los directorios de su servidor FTP. Puede arrastrar y soltar archivos para cargar y descargar archivos entre el servidor FTP y su dispositivo (cliente).

Comandos del servidor FTP

También puede conectarse a su servidor FTP en el terminal y operarlo con comandos FTP. A continuación se proporciona una lista de algunos de ellos.

Dominio Función
personas con discapacidad imprimir el directorio de trabajo actual
cwd cambiar directorio de trabajo
siglo de dele eliminar el archivo especificado
cdup cambiar al directorio principal
ayuda muestra información de ayuda
discos compactos cambiar el directorio de trabajo
obtener nombre de archivo descargar el archivo especificado
poner nombre de archivo carga el archivo especificado
adiós finalizar sesión FTP

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *