Servidor FTP con VSFTPD
En esta entrada os voy a explicar como montar un servidor FTP que podamos usar como destino de las capturas de imágenes de una cámara IP, en mi caso cámaras Foscam.
El software que instalaremos es el servidor FTP vsftpd sobre Linux (Ubuntu y similares). Crearemos un usuario en el sistema con permisos para subir archivos y un directorio donde se almacenarán. Vamos a ello:
root@servidor:~# apt-get install vsftpd Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Use apt-get autoremove to remove them. Se instalarán los siguientes paquetes NUEVOS: vsftpd 0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 114 kB de archivos. Se utilizarán 368 kB de espacio de disco adicional después de esta operación. Des:1 http://es.archive.ubuntu.com/ubuntu/ trusty-updates/main vsftpd i386 3.0.2-1ubuntu2.14.04.1 [114 kB] Descargados 114 kB en 2seg. (51,5 kB/s) Preconfigurando paquetes ... Seleccionando el paquete vsftpd previamente no seleccionado. (Leyendo la base de datos ... 107094 ficheros o directorios instalados actualmente.) Preparing to unpack .../vsftpd_3.0.2-1ubuntu2.14.04.1_i386.deb ... Unpacking vsftpd (3.0.2-1ubuntu2.14.04.1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Processing triggers for ureadahead (0.100.0-16) ... ureadahead will be reprofiled on next reboot Configurando vsftpd (3.0.2-1ubuntu2.14.04.1) ... vsftpd start/running, process 1676 Processing triggers for ureadahead (0.100.0-16) ... root@servidor:~#
Ahora vamos a crear el usuario ftp, y el grupo ftp (es posible que la instalación del servidor vsftpd los haya creado, así que los eliminamos primero). También debemos añadir el shell nologin a la lista de shells válidos, porque si no cuando el módulo PAM autentique la información del usuario, no le dejará entrar porque el shell especificado para él no está en la lista de shells válidos (/etc/shells). Esto es necesario para que se permita al usuario ftp entrar por FTP, pero no entrar a través de SSH a la linea de comandos del sistema.
root@servidor:~# userdel ftp root@servidor:~# addgroup ftp Añadiendo el grupo `ftp` (GID 1003) ... Hecho. root@servidor:~# adduser --shell $(command -v nologin) --ingroup ftp ftp Añadiendo el usuario `ftp` ... Añadiendo el nuevo usuario `ftp` (1002) con grupo `ftp` ... Creando el directorio personal `/home/ftp` ... Copiando los ficheros desde `/etc/skel` ... Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: password updated successfully Changing the user information for ftp Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: ¿Es correcta la información? [S/n] s root@servidor:~# grep "$(command -v nologin)" /etc/shells || echo "$(command -v nologin)" >> /etc/shells root@servidor:~#
A la hora de crear el directorio dónde el usuario ftp subirá sus archivos, debemos tener en cuenta que vsftpd no permite que el usuarios tenga permisos de escritura en la carpeta que comparte, pero sí en las que cuelgan de ella (dará el error 500 OOPS: vsftpd: refusing to run with writable root inside chroot(), dicen que es por seguridad, pero bueno…). Debemos crear una carpeta que sera la home del usuario ftp y dentro de ella, otra que sera en la que guardemos los archivos que subamos:
root@servidor:~# mkdir /mnt/Data/ftproot root@servidor:~# mkdir /mnt/Data/ftproot/documentos root@servidor:~# chown -R ftp:ftp /mnt/Data/ftproot root@servidor:~# chmod 555 /mnt/Data/ftproot root@servidor:~# usermod --home /mnt/Data/ftproot ftp root@servidor:~#
Finalmente editamos el archivo de configuración de vsftpd, /etc/vsftpd.conf haciendo estos cambios:
- write_enable=YES, para permitir que los usuarios suban archivos.
- local_umask=022, son los permisos con los que se almacenarán los archivos que se suban.
- xferlog_file=/var/log/vsftpd.log, sirve para monitorizar las subidas de archivos.
- chroot_local_user=YES, limita un usuario a su directorio home, y no le permite navegar por todo el sistema.
Con esta configuración todos los usuarios del sistema podrán entrar por FTP, excepto los listados en el fichero /etc/ftpusers (que es contra el que el modulo PAM hace las comprobaciones de usuarios NO válidos, ver archivo /etc/pam.d/vsftpd).
El archivo completo quedaría mas o menos así:
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd #rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Solo nos queda reiniciar el servidor vsftpd y comprobar que todo ha ido bien 🙂
root@servidor:~# service vsftpd restart vsftpd stop/waiting vsftpd start/running, process 2166
Y en nuestra cámara IP, o en el sistema que queramos que utilice nuestro FTP como almacén de archivos deberemos decirle que lo haga en ftp://direccion_ip/documentos.
Espero que os haya gustado y os ahorre dolores de cabeza 🙂