Servicio FTP SERVICIOS DE RED Josué Martínez Estaún 2º ASIR 31-10-2017
Índice 1. Introducción... 2 2. Preparación Entorno Virtual... 2 2.1. Ubuntu Server... 2 2.2. Clientes... 2 3. Instalación Servicio FTP... 3 3.1. Mensaje de bienvenida... 4 3.2. Creación de usuarios y enjaularlos... 4 3.2.1. Crear usuarios... 4 3.2.2. Enjaularlos... 5 3.3. Anonymous... 5 3.4. Creación de permisos... 6 3.4.1. Usuario prueba... 6 3.4.2. Usuario usu1... 7 3.4.3. Usuario usu2... 8 3.4.4. Usuario usu3... 9 4. Seguridad Servicio FTP... 10 4.1. Open ssl... 10 5. Clientes... 12 5.1. CMD Windows 10... 12 5.2. FileZilla Client (Windows 10)... 13 5.3. Terminal Ubuntu Desktop... 13 6. Troubleshooting... 14 7. Conclusión... 15 8. Bibliografía... 15 1
1. Introducción FTP (siglas en inglés de File Transfer Protocol, Protocolo de Transferencia de Archivos ), es el protocolo para la transferencia de archivos entre sistemas informáticos. En mi caso lo haré entre máquinas virtuales (Virtual Box), utilizando como servidor un Ubuntu Server y como clientes un Windows 10 y un Ubuntu Desktop, todos ellos en red interna, esto es posible ya que no importa el sistema operativo que se esté utilizando. 2. Preparación Entorno Virtual 2.1. Ubuntu Server En este caso voy a hacer solamente un servidor FTP. Lo haré en un Linux Ubuntu Server. Lo que necesitaré será: Programa de Virtual Box. ISO de Ubuntu Server Acceso a internet Empiezo instalando el Ubuntu Server en el Virtual Box con las siguientes especificaciones: Después instalo el Ubuntu Server de manera predeterminada y simple (Siguiente todo el rato). Después debo poner desde la máquina que la red esté en modo RED NAT (para tener acceso a internet) Para que se guarde esta configuración debemos introducir el comando: 2.2. Clientes Para comprobar que el Servidor FTP funciona lo haré mediante un cliente Windows y un Cliente Linux. A ambos les asignaré una @ip del rango 10.0.0.0/8 e interfaz de red en Red interna. 2
Para el cliente Windows elijo un Windows 10 el cual instalaré con las características predeterminadas. Aquí aparte del cliente FTP de Windows utilizaré una aplicación de terceros llamada FileZilla Client la cual explicaré más adelante. Para el cliente Linux utilizaré el Ubuntu Desktop para hacer las pruebas de FTP el cual también instalaré con las características predeterminadas. 3. Instalación Servicio FTP Para la instalación del Servicio FTP no nos olvidemos que tenemos que tener acceso a internet. Cuando nos aseguremos de eso introduciremos el comando apt-get install vsftpd A partir de aquí cambio la configuración de red de la máquina a Red Interna, para que no intervenga fuera de nuestro ordenador. Ahora le asignaré una dirección ip estática del rango 10.0.0.0/8 mediante el comando nano /etc/network/interfaces A continuación viene un paso muy importante que es hacer la copia del archivo de configuración; por si en un futuro nos equivocamos tener la opción de volver atrás. 3
3.1. Mensaje de bienvenida Para modificar el mensaje de bienvenida tenemos que modificar el archivo de configuración. Desde allí modifico lo siguiente: Lo compruebo mediante el Cliente Windows: 3.2. Creación de usuarios y enjaularlos 3.2.1. Crear usuarios Ahora voy a crear los usuarios que se conectarán en un futuro a su respectiva carpeta con sus correspondientes permisos. Para crear el usuario y a la vez su carpeta lo haré mediante el siguiente comando: useradd d /home/usuario m s /bin/bash usuario A parte del usuario prueba, crearé los usuarios usu1, usu2 y usu3: 4
3.2.2. Enjaularlos Enjaular a los usuarios viene a decir que estén encerrados en su directorio y que no puedan ascender. Esto se hace para que un usuario corriente no pueda toquitear el servidor FTP. Para eso tengo que modificar el archivo de configuración y pone lo siguiente: Ahora compruebo que estén en su directorio y no puedan ir hacia arriba: 3.3. Anonymous Existe la conexión anónima en el FTP, por el cual no necesitas contraseña. Para habilitarlo tengo que modificar el archivo de configuración. También tengo que crearle una carpeta a ese usuario anónimo, esto lo hago mediante mkdir: A continuación tengo que enjaular al usuario anónimo para que no pueda ascender de su carpeta asignada. Esto lo haré mediante: Compruebo que no pueda ascender de su carpeta: 5
3.4. Creación de permisos Al crear los permisos lo hago usuario por usuario, para ello lo consigo con la opción user_config_dir que lo especificaré en el directorio /etc/vsftpd/users, esto lo haré en el archivo de configuración. Para ello tengo que tener creado el directorio /etc/vsftpd/users y dentro archivos de configuración por cada usuario de esta manera: 3.4.1. Usuario prueba Ahora voy a designar los permisos que va a tener el usuario prueba para la conexión ftp. Dirlist_enable: Tiene permiso para listar el directorio Download_enable: Tiene permiso para descargar del directorio Local_root: Le indico la ruta de la carpeta a la que hago referencia con los permisos. Write_enable: Tiene permiso de escritura Anon_world_readable_only: Si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo Comprobación: Voy a comprobar que tengo el permiso de descarga: 6
3.4.2. Usuario usu1 Ahora voy a designar los permisos que va a tener el usuario usu1 para la conexión ftp. Dirlist_enable: Tiene permiso para listar el directorio Download_enable: Tiene permiso para descargar del directorio Local_root: Le indico la ruta de la carpeta a la que hago referencia con los permisos. Write_enable: No tiene permiso de escritura Anon_world_readable_only: Si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo Comprobación: Voy a comprobar que no tengo el permiso de escritura: 7
3.4.3. Usuario usu2 Ahora voy a designar los permisos que va a tener el usuario usu2 para la conexión ftp. Dirlist_enable: Tiene permiso para listar el directorio Download_enable: No tiene permiso para descargar del directorio Local_root: Le indico la ruta de la carpeta a la que hago referencia con los permisos. Write_enable: No tiene permiso de escritura Anon_world_readable_only: Si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo Comprobación: Voy a comprobar que no tengo el permiso de descarga: 8
3.4.4. Usuario usu3 Ahora voy a designar los permisos que va a tener el usuario usu3 para la conexión ftp. Dirlist_enable: No tiene permiso para listar el directorio Download_enable: No tiene permiso para descargar del directorio Local_root: Le indico la ruta de la carpeta a la que hago referencia con los permisos. Write_enable: No tiene permiso de escritura Anon_world_readable_only: Si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo Comprobación: Ahora voy a comprobar que no tengo el permiso de listar en la carpeta: 9
4. Seguridad Servicio FTP Para probar la seguridad del Servicio FTP, lo primero que haré será instalar el programa Wireshark que es un sniffer de red. Este es el link de descarga: https://www.wireshark.org/download.html ; lo instalo con todas las características por defecto. Luego filtro los paquetes por el protocolo TCP y observo que los datos van sin cifrar: 4.1. Open ssl Voy a crear un certificado para el servicio vsftp para ello pongo el comando: sudo openssl req -x509 nodes days 365 newkey rsa:1024 keyout /etc/ssl/private/vsftpd.pem out /etc/ssl/private/vsftpd.pem 10
Ahora nos pedirá una serie de datos personales para crear el certificado. Después añadimos lo siguiente al archivo de configuración y reiniciamos el servicio. Ahora para comprobarlo tengo que ir a FileZilla, archivo gestor de sitios, crear un sitio y configurarlo de la siguiente manera: 11
Ahora compruebo desde el wireshark que los paquetes que se envían van cifrados (filtrados por el protocolo tcp): 5. Clientes 5.1. CMD Windows 10 Tengo la máquina de Windows 10 con la interfaz de red en Red interna y la configuración de esta así: 12
Para comprobar que se comunican lo hago mediante un ping : Por tanto ya tengo conexión y ya podré conectarme con el FTP. Lo compruebo con el usuario prueba: 5.2. FileZilla Client (Windows 10) Voy a utilizar la aplicación de terceros llamada FileZilla Client que la descargo desde: https://filezilla-project.org/download.php Lo instalo con todas las características por defecto. Ahora hago la comprobación con el usuario usu1: 5.3. Terminal Ubuntu Desktop Primero compruebo que tengo la interfaz de red en Red Interna y la @ip del rango de 10.0.0.0/8 13
Después compruebo que hay conexión entre ambas máquinas mediante ping Por último compruebo la conexión ftp mediante el usuario usu2: 6. Troubleshooting Algo que es necesario es cada vez que modificas algo en el archivo de configuración es reiniciar el servicio para ver que has escrito la sintaxis correctamente y lo guarda bien. Un fallo que he tenido solamente en Windows 7, es que al intentar ejecutar comandos (ya conectado con ftp) como por ejemplo ls me daba un error de error al establecer conexión. Esto lo he solucionado desactivando el Firewall (ya que al poner por primera vez el comando me daba la opción para incluir esto en el firewall pero le di a No). 14
Otro fallo muy común es que al intentar conectarte con cualquier usuario da el error 500 OOPS por falta de permisos. Esto se puede solucionar de dos maneras; una es agregándole los permisos a cada carpeta y reiniciando el servicio (que es más tedioso). La otra solución es agregándole esos permisos directamente al archivo de configuración de manera que se solucionará para todos los usuarios y sus respectivas carpetas. 7. Conclusión En conclusión he creado un servidor FTP el cual me permite subir, descargar, renombrar y listar archivos entre máquinas virtuales. Este acceso se puede hacer de manera autenticada (con los usuarios) y de manera anónima (mediante anonymous). También he incluido seguridad añadiendo un certificado para que pueda cifrar los paquetes que se envían mediante el protocolo TCP. 8. Bibliografía Permisos: https://mieles.wordpress.com/2009/11/14/permisos-usuario-por-usuario-en-vsftpd/ Error 500 OOPS: https://www.liquidweb.com/kb/error-500-oops-vsftpd-refusing-to-run-with-writable-rootinside-chroot-solved/ 15