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 🙂

Añadir un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.