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 los permisos de usuario, configurar el 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 conexión con el servidor, una para dar órdenes 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 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 TCP 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 raíz 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/nombre de usuario y la mayoría de los otros directorios no tienen permiso de escritura para 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 ftpuser. La segunda y tercera líneas 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 jivendrasah y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA