En este tutorial explicaremos cómo instalar y configurar un servidor ftp mediante vsftpd en Linux.
Para quien esté algo perdido FTP, es un protocolo de red dedicado a la transferencia de archivos. Por lo que nos permite compartir archivos ya sea en una red local o por Internet, logueandonos con un usuario y una contraseña
En este tutorial enseñaremos a instalar y configurar un servidor ftp en tu Raspberry PI, para ello usaremos el
servidor ftp “VSFTPD”, actualmente el más extendido entre las distribuciones de Linux.
Cómo instalar el servidor FTP
Lo primero es hacer “apt-get update” par actualizar los repositorios, y lo siguiente “apt-get install vsftpd” para instalar el servidor ftp. Recordad siempre añadir delante sudo para ser root y no tener problemas de permisos en el proceso.

Cómo configurar el servidor FTP
Una vez termine el proceso de instalación, es recomendable hacer una copia del fichero de configuración “/etc/vstfpd.conf” haciendo “cp /etc/vsftpd.conf /etc/vsftpd.conf.bak”, ya que vamos a tocarlo mucho y no queremos fastidiarlo.
Ahora vamos a configurar nuestro servidor ftp, así que hacemos “nano /etc/vsftpd.conf”, comando con el cual podremos editar la configuración del servidor ftp.
Pasemos a detallar los aspectos de este fichero de configuración, traduciendo cada opción del archivo original del servidor ftp:
vsftpd se ejecuta independientemente, es decir automáticamente al inicio
-
listen=YES
Lo mismo que el anterior pero para la IP versión 6
-
listen_ipv6=YES
Podemos habilitar o deshabilitar el inicio de sesión de usuarios anónimos, “anonymous” y “ftp”. (Desactivado por defecto)
-
anonymous_enable=NO
Para poder loguear usuarios locales del sistema(nosotros).
-
local_enable=YES
Permite el uso de comandos para cambiar el sistema de ficheros, como MKD o DELETE.
-
write_enable=YES
Es la máscara de permisos que se usará para los usuarios del sistema. Básicamente funciona restando a 777 los permisos que queramos tener, por ejemplo, si queremos que los permisos sean 755, entonces, 777-755=022 (Para los propietarios de los archivos, todos los permisos y para el resto, lectura y ejecución).
La opción más usada en los servidores ftp es 022.
-
local_umask=022
Esta opción permite a los usuarios anónimos subir archivos al servidor ftp. Hay que tener en cuenta que únicamente funcionará si la opción de escritura global está activada y obviamente el usuario anónimo tiene permisos de escritura en el directorio.
-
anon_upload_enable=YES
Esta opción permite a los usuarios anónimos crear directorio en el servidor ftp
-
anon_mkdir_write_enable=YES
Muestra el mensaje de cambio de directorio
-
dirmessage_enable=YES
Si está activado, mostrará la hora local de los directorios
-
use_localtime=YES
Es el registro de login para subir y bajar archivos
-
xferlog_enable=YES
Si usara el puerto 20 de transferencia de archivos
-
connect_from_port_20=YES
Esta opción permite cambiar el propietario de los archivos que suban los usuarios anónimos, para de esta forma conseguir una mayor organización.
-
chown_uploads=YES
-
chown_username=whoever
Directorio del archivo de registro
-
xferlog_file=/var/log/vsftpd.log
Puedes cambiar el standar por el que rige el formato del archivo de registro ftpd xferlog.
-
xferlog_std_format=YES
Esta opción especifica el tiempo de inactividad del usuario antes de que el servidor ftp cierre su sesión.
-
idle_session_timeout=600
Esta opción es la misma que la anterior pero para la conexión de datos.
-
data_connection_timeout=120
Se recomienda que definas en tu sistema un usuario único que el servidor ftp pueda utilizar como un usuario totalmente aislado y sin privilegios.
-
nopriv_user=ftpsecure
Si se activa permite al servidor reconocer las peticiones asíncronas “ABOR”. No se recomienda por motivos de seguridad.
-
async_abor_enable=YES
Por defecto, el servidor permite el modo ASCII pero ignorar las peticiones. Activa las opciones de “ascii_upload_enable” y “ascii_download_enable” para que el servidor realmente acepte las peticiones.
-
ascii_upload_enable=YES
-
ascii_download_enable=YES
Permite personalizar la frase de presentación en el inicio de sesión
-
ftpd_banner=Welcome to blah FTP service.
Permite especificar si se denegara los correos anónimos y un archivo especificando qué direcciones. En ocasiones muy útil para combatir ciertos ataques DoS.
-
deny_email_enable=YES
-
banned_email_file=/etc/vsftpd.banned_emails
Con esta opción podemos restringir el acceso, es decir, si lo activamos los usuarios del sistema solo tendrán acceso a su /home/ (Directorio personal en Ubuntu). Selecciona YES para restringir, y NO para tener acceso a todos los archivos y carpetas.
-
chroot_local_user=YES
Se puede especificar qué usuarios se verán afectados por la opción antes comentada “chroot_local_user”, activando la opción “chroot_list_enable” y especificando una ruta para la lista de usuarios en la opción “chroot_list_file”.
-
chroot_local_user=YES
-
chroot_list_enable=YES
-
chroot_list_file=/etc/vsftpd.chroot_list
Permite usar la opción -R del comando ls en el servidor ftp. Por defecto se recomienda que esté desactivado para evitar que los usuarios remotos conectados al servidor generen gran cantidad de tráfico.
-
ls_recurse_enable=YES
Personalización
Algunas de las configuraciones de "vsftpd" no se ajustan por defecto al diseño del sistema de archivos (Estas opciones no son compatibles con Debian).
Esta opción debe ser un directorio el cual debe estar vacío. Además, el directorio no debe ser modificable por el usuario ftp. Este directorio se usa como una cárcel segura de "chroot()" al tiempo que "vsftpd" no requiere acceso a los archivos del sistema.
-
secure_chroot_dir=/var/run/vsftpd/empty
Esta cadena es el nombre del servicio "PAM" que "vsftpd" va a utilizar.
-
pam_service_name=vsftpd
Esta opción especifica la localización del certificado RSA que es usado por las conexiones encriptadas SSL
-
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
Esta opción especifica la localización de la clave privada RSA que es usado por las conexiones encriptadas SSL
-
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Cómo reiniciar el servidor FTP
Una vez configurado el archivo de configuración, debemos tener claro que para que la configuración que cambiemos en el archivo vsftpd.conf se haga efectiva debemos reiniciar el servidor ftp.
Para reiniciar el servicio ftp usaremos el siguiente comando:
-
sudo service vsftpd restart
Además, podemos parar el servicio vsftpd mediante el siguiente comando:
-
sudo service vsftpd stop
Y para iniciarlo tenemos el siguiente comando:
-
sudo service vsftpd start
-
Comandos básicos del cliente FTP
Teniendo claro cada aspecto del archivo de configuración vsftpd.conf, vamos ahora a detallar los comandos más importantes que podemos usar en un servidor ftp:
-
!: Colocado delante de un comando del sistema, habiendo iniciado sesión con el servidor ftp, este se ejecuta fuera del servidor, o sea en nuestra máquina local.
-
ascii: Especifica que el tipo de transferencia de archivos con el servidor ftp sea ASCII (Texto).
-
binary: Especifica que el tipo de transferencia de archivos con el servidor ftp sea Binaria (por defecto).
-
bell: indica al sistema que ejecute un pitido cuando se finalice la ejecución de los comandos.
-
bye, quit: termina la sesión con el servidor FTP y vuelve al terminal.
-
close: termina la sesión FTP sin salir del programa, es decir, cierra la sesión del usuario con el que te hayas logueado en el servidor ftp.
-
delete y mdelete: Borra uno o varios archivos respectivamente dentro del servidor ftp.
-
get y mget: Descargar uno o varios archivos respectivamente dentro del servidor ftp.
-
put: Sube un archivo al servidor ftp.
-
reget: continuar bajando un archivo cortado anteriormente
-
open: Conecta con un FTP remoto.
-
rename: Permite cambiar el nombre de un archivo del servidor ftp.
Ejemplo de configuración en VSFTPD
Teniendo claro todos los aspectos de configuración y los comandos básicos del servidor ftp claros, vamos a probar un poco el servidor ftp. Para ello vamos a usar una configuración de ejemplo en la que el usuario anonimo tendrá su propio directorio donde tendrá libertad para trabajar.
Podemos mediante la opción “anon_root” darle al usuario anonymous (ftp) un directorio donde trabajar, por ejemplo, “/ftp/anonimo”.

Además tenemos que tener activas las siguientes configuración para que el usuario ftp/anonymous pueda crear carpetas, subir archivos y modificarlos.
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
chroot_local_user=YES (Por seguridad)
anon_other_write_enable=YES (Permite al usuario ftp/anonymous borrar)
anon_root=/ftp/anonimo
Debemos crear el directorio mediante el comando mkdir:
sudo mkdir /ftp
sudo mkdir /ftp/anonimo
sudo mkdir /ftp/anonimo/subidas
Y darle los permisos que estimemos oportunos mediante el comando chmod.
sudo chmod 777 /ftp
sudo chmod 775 /ftp/anonimo
sudo chmod 777 /ftp/anonimo/subidas
NOTA: Los permisos que le demos a los directorios deben coincidir con la configuración de permisos del archivo de configuración vsftpd.conf. Además, el directorio donde iniciar el usuario ftp/anonymous no puede tener todos los permisos por motivos de seguridad, sino al iniciar sesion en el servidor ftp es posible que de el siguiente error (500 OOPS: vsftpd : refusing to run with writeable root inside chroot()).
Al probar el funcionamiento en local veremos que funciona correctamente:

-
Y como en remoto también:

Tampoco tendremos ningún problema al iniciar sesión con una cuenta local en el servidor ftp:


