Índice General

  1. Instalación
  2. Personalizar la configuración del servidor FTP

Enlaces externos
 
vsftpd o Very Secure FTP Daemon es un Servidor FTP para sistemas Unix incluido Linux. Es software bajo licencia GNU General Public License. Soporta IPv6 y SSL.

vsftpd soporta FTP Explicito (desde la versión 2.0.0) y FTP Implicito (desde la versión 2.1.0) FTPS.

vsftpd es el servidor FTP por defecto en muchas distribuciones Linux.

Si quieres, puedes ver el artículo Conceptos básicos sobre el Servicio FTP publicado anteriormente en ZeppelinuX.
 

  1. Instalación (Volver al índice General)
    Para instalar vsftpd ejecutaremos desde la consola los siguientes comandos:
    Primero actualizamos los repositorios.

    $ sudo apt-get update

    Tras actualizar los repositorios instalamos el paquete.

    $ sudo apt-get install vsftpd

    Una vez finalizada la instalación podemos realizar las siguientes comprobaciones:

    • Comprobar la creación del usuario y grupo ftp (Volver al índice General)
      Para comprobar que se ha creado el usuario ftp ejecutaremos la siguiente orden:

      $ sudo cat /etc/passwd | grep ftp
      ftp:x:119:123:ftp daemon,,,:/srv/ftp:/bin/false

      Para comprobar que se ha creado el grupo ftp ejecutaremos la siguiente orden:

      $ sudo cat /etc/group | grep ftp
      ftp:x:123:
    • Comprobar la creación del directorio /srv/ftp (Volver al índice General)
      El directorio público por defecto del servidor FTP es /srv/ftp, para comprobar que se ha creado el directorio y que el propietario del mismo es el root y pertenece al grupo ftp, ejecutamos la siguiente orden:

      1
      2
      3
      4
      5
      
      $ ls -la /srv
      total 12
      drwxr-xr-x  3 root root 4096 abr  4 20:52 .
      drwxr-xr-x 22 root root 4096 abr  4 20:11 ..
      drwxr-xr-x  2 root ftp  4096 abr  4 20:52 ftp
    • Comprobar que el servidor está iniciado (Volver al índice General)
      Para comprobar que el servidor FTP esta iniciado ejecutaremos la siguiente orden:

      $ sudo ps -ef | grep vsftpd
      root       8136      1  0 20:52 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd.conf
    • Hacer copia de seguridad del fichero /etc/vsftpd.conf (Volver al índice General)
      Si vas a modificar la configuración del servidor FTP vsftpd, es conveniente hacer copia del archivo /etc/vsftpd.conf antes de realizar cualquier cambio. Para ello, ejecutamos la siguiente orden:

      $ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
    • Comprobar que el servidor está escuchando por el puerto TCP 21 (Volver al índice General)
      Para comprobar que el servidor FTP está escuchando por el puerto TCP 21 ejecutaremos la siguiente orden:

      $ sudo netstat -ltn | grep :21
      tcp6       0      0 :::21                   :::*                    LISTEN

      En la instalación por defecto vsftpd escucha por el puerto 21 TCP los sockets IPv6. A continuación se muestra la configuración por defecto del archivo /etc/vsftpd.conf.

      ...
      ...
      # Run standalone?  vsftpd can run either from an inetd or as a standalone
      # daemon started from an initscript.
      listen=NO
      #
      # This directive enables listening on IPv6 sockets. By default, listening
      # on the IPv6 "any" address (::) will accept connections from both IPv6
      # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
      # sockets. If you want that (perhaps because you want to listen on specific
      # addresses) then you must run two copies of vsftpd with two configuration
      # files.
      listen_ipv6=YES
      ...
      ...

      listen: cuando esta directriz está activada, vsftpd se ejecuta en modo independiente. Esta directriz no se puede utilizar conjuntamente con la directriz listen_ipv6.
      listen_ipv6: cuando esta directriz está activada, vsftpd se ejecuta en modo independiente, pero solamente escucha a los sockets IPv6. Esta directriz no se puede utilizar conjuntamente con la directriz listen.
      Para que vsftpd escuche los sockets IPv4 tendremos que modificar las siguientes directrices en el archivo /etc/vsftpd.conf.

      listen=YES
      listen_ipv6=NO

      Tras las modificaciones reiniciamos el servicio para que los cambios surtan efecto:

      $ sudo service vsftd restart

      Ahora, al ejecutar de nuevo netstat obtendremos el siguiente resultado:

      $ sudo netstat -ltn | grep :21
      tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN

    NOTA: Por defecto, vsftpd se instala de forma que se permite el acceso al usuario anónimo (annonymous). Al usuario anónimo se le permite descargar archivos pero no subir archivos, quedando enjaulado (chroot) en el directorio asignado por defecto /srv/ftp. Además, por defecto, se deniega el acceso al servidor a los usuarios locales.

  2. Personalizar la configuración del servidor FTP (Volver al índice General)

    • Configuraciones Generales (Volver al índice General)
      Para permitir las descargas de archivos habilitaremos la siguiente directriz:

      download_enable=YES

      Al habilitar la siguiente directriz, cada vez que un usuario entra en un directorio con un archivo de mensaje, el usuario verá el mensaje informativo sobre dicho directorio. Este mensaje se encuentra en un archivo ubicado dentro del directorio al que se entra. Por defecto se llama .message y el nombre de este archivo se especifica en la directriz message_file.

      dirmessage_enable=YES
      message_file=.message

      Para mostrar un mensaje de bienvenida podemos utilizar la siguiente directriz:

      ftpd_banner=Bienvenido al servidor FTP de ZeppelinuX

      La siguiente directriz especifica un archivo que contiene el texto que se mostrará cuando se establezca una conexión con el servidor. Esta directriz sobreescribe cualquier texto especificado en la directriz ftpd_banner.

      banner_file=/etc/vsftpd_pre-login

      Para utilizar los nombres de usuarios y grupos en lugar de sus entradas UID o GID habilitaremos la directriz text_userdb_names. Al activar esta opción puede que se reduzca el rendimiento del servidor.

      text_userdb_names=YES

      Para que los listados de directorios muestren la hora local para el ordenador en vez de GMT, habilitaremos la siguiente directriz:

      use_localtime=YES

      La siguiente directriz especifica el nombre de un directorio vació. El directorio no tiene por que tener privilegios para el usuario de ftp. Este directorio se usa para enjaular (chroot).

      secure_chroot_dir=/var/run/vsftpd/empty
    • Configuración del registro (LOGS) (Volver al índice General)
      La siguiente directriz especifica el archivo de registro de vsftpd. Para que se utilice este archivo, xferlog_enable debe estar activado y xferlog_std_format debe ser bien sea NO o, si está en YES, entonces dual_log_enable debe estar activado. Es importante resaltar que si syslog_enable está en YES, se utiliza el registro del sistema en lugar del archivo especificado en esta directriz.

      vsftpd_log_file=/var/log/vsftpd.log

      Cuando se activa la siguiente directriz, vsftpd registra las conexiones, en formato vsftpd y la información de transferencia, al archivo de registro especificado en la directriz vsftpd_log_file. Si xferlog_std_format está configurada a YES, se registra la información de transferencia de archivo pero no las conexiones y en su lugar se utiliza el archivo de registro especificado en xferlog_file que por defecto es /var/log/xferlog. Es importante observar que se utilizan ambos archivos y formatos de registro si dual_log_enable tiene el valor de YES.

      xferlog_enable=YES
      xferlog_std_format=NO
      dual_log_enable=NO

      Cuando está activada la siguiente directriz en conjunto con, xferlog_enable=YES y con xferlog_std_format=NO, se registran todos los comandos y respuestas. Esta directriz es muy útil para propósitos de depuración.

      log_ftp_protocol=YES
    • Configuración de las conexiones (Volver al índice General)
      La siguiente directriz, cuando se activa, vsftpd se ejecuta con privilegios suficientes para abrir el puerto 20 (ftp-data) en el servidor durante las transferencias de datos en modo activo. Al desactivar esta opción, se permite que vsftpd se ejecute con menos privilegios, pero puede ser incompatible con algunos clientes FTP.

      connect_from_port_20=YES

      Con la siguiente directriz, se establece el tiempo de espera, en segundos, para mantener establecidas conexiones inactivas.

      idle_session_timeout=600

      Con la siguiente directriz, se establece el tiempo de espera, en segundos, para mantener establecidas conexiones de datos inactivas.

      data_connection_timeout=120

      La siguiente directriz especifica el nombre de servicio PAM para vsftpd. Suele estar configurado por defecto.

      pam_service_name=vsftpd

      La siguiente directriz especifica el número máximo de clientes simultáneos que pueden conectarse al servidor cuando se ejecuta en modo independiente (standalone). Cualquier conexión adicional producirá un mensaje de error en el cliente FTP.
      El valor predeterminado es 0 y establece un valor ilimitado de conexiones. En nuestro ejemplo limitamos el número máximo de conexiones a 5.

      max_clients=5

      La siguiente directriz especifica el número máximo de clientes que tienen permitido conectarse desde la misma dirección IP.
      El valor predeterminado es 0 y establece un valor ilimitado de conexiones por IP. En nuestro ejemplo limitamos el número máximo de conexiones a 5.

      max_per_ip=5

      La siguiente directriz permite activar o desactivar conexiones pasivas (PASV). En nuestro ejemplo trabajaremos con conexiones Activas (ACTIVE) por lo que desactivaremos las conexiones pasivas.

      pasv_enable=NO

      Si está activado el uso de conexiones pasivas con las siguientes directrices establecemos el rango de puertos que serán utilizados por este modo de conexión. En nuestro ejemplo las tenemos comentadas ya que no utilizamos el modo pasivo.

      #pasv_min_port=40000
      #pasv_max_port=40500

      La siguiente directriz especifica la dirección IP del lado público del servidor (IP pública de nuestro encaminador) para los servidores que se encuentran detrás de cortafuegos Network Address Translation (NAT). Esto permite que vsftpd entregue la dirección correcta de retorno para las conexiones pasivas. En nuestro ejemplo la comentamos ya que no utilizamos el modo pasivo.

      #pasv_address=192.168.1.27
    • Configuración para los usuarios anónimos (Volver al índice General)
      La siguiente directriz, si está activada permite las conexiones anónimas. En nuestro ejemplo denegamos el acceso a usuarios anónimos.

      anonymous_enable=NO

      La siguiente directriz especifica el directorio al cual vsftpd cambia cuando se conecta el usuario anónimo.

      anon_root=/home/ftp-pub/

      La siguiente directriz, si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo.

      anon_world_readable_only=YES

      En la siguiente directriz, si está activada, permitimos la subida de archivos al servidor por parte los usuarios anónimos. En nuestro ejemplo optamos por deshabiliar las subidas de archivos al servidor por parte de los usuarios anónimos.

      anon_upload_enable=NO

      En la siguiente directriz, si está activada, todos los archivos subidos al servidor por los usuarios anónimos serán propiedad del usuario especificado en la directriz chown_username. En nuestro ejemplo, al estár deshabilitadas las conexiones anónimas, la tenemos comentada.

      #chown_uploads=YES

      En la siguiente directriz especificamos el nombre de usuario al que se le atribuirá la propiedad de los archivos subidos al servidor por los usuarios anónimos siempre y cuando esté activada la directriz chown_uploads. En nuestro ejemplo, al estár deshabilitadas las conexiones anónimas, la tenemos comentada.

      #chown_username=usuario

      En la siguiente directriz establecemos el límite de la velocidad máxima transferencia de datos para los usuarios anónimos. En nuestro ejemplo la establecemos a 1MB/seg.

      anon_max_rate=1048576
    • Configuración para los usuarios locales (Volver al índice General)
      Para permitir que los usuarios locales puedan conectarse, habilitaremos la siguiente directriz:

      local_enable=YES

      Para permitir que los usuarios locales puedan subir archivos al servidor, habilitaremos la siguiente directriz:

      write_enable=YES

      Para especificar el valor de umask para la creación de archivos, asignaremos un valor a local_umask. Observad que el valor por defecto está en forma octal (un sistema numérico con base ocho), que incluye un prefijo de “0”. De lo contrario el valor es tratado como un valor entero de base 10. El valor por defecto es 022. Una máscara 022 (enmascarando los permisos de escritura para el grupo y para otros), asegura que los nuevos archivos sólo pueden modificarse por el propietario, es decir, el usuario que los creó. En nuestro caso hemos optado por una máscara 077 (enmascarando los permisos de escritura, lectura y ejecución para el grupo y para otros), que asegura que los nuevos archivos sólo pueden modificarse, leerse y ejecutarse por el propietario, es decir, el usuario que los creó.

      local_umask=077

      Para enjaular a los usuarios locales dentro de su propio directorio personal, utilizaremos la directriz chroot_local_user. Habilitando esta opción mejoramos la seguridad del servidor.

      chroot_local_user=YES

      La siguiente directriz varía en función del valor de chroot_local_user. Si chroot_local_user=NO especifica que se utilizará una lista con los usuarios locales a los cuales se les enjaulará.

      chroot_list_enable=YES

      La siguiente directriz especifica la ruta donde se encuentra el archivo con la lista de usuarios enjaulados o no enjaulados, según se encuentre la directriz chroot_local_user:

      • Si chroot_local_user=NO, indica la lista de usuarios locales enjaulados, es decir, hay que especificar que usuarios locales queremos enjaular.
      • Si chroot_local_user=YES, indica la lista de usuarios locales no enjaulados, es decir, todos los usuarios locales estarían enjaulados excepto los de la lista.

       

      chroot_list_file=/etc/vsftpd.chroot_list

      Con la siguiente directriz, se establece el límite de la velocidad máxima de transferencia de datos para los usuarios locales. 10MB/seg = 10485760. El valor 0 indique que no hay límite.

      local_max_rate=0

      Podemos habilitar la directriz de denegar el acceso al servidor a usuarios determinados, indicados en el archivo que tiene como valor la directriz userlist_file.

      userlist_enable=YES

      La siguiente directriz, cuando se utiliza en combinación con la directriz userlist_enable=NO, se les niega el acceso a todos los usuarios locales a menos que sus nombres esten listados en el archivo especificado por la directriz userlist_file. Puesto que se niega el acceso antes de que se le pida la contraseña al cliente.

      userlist_deny=NO

      Para establecer la ruta del archivo con la lista de usuarios a los que se les deniega el acceso, utilizaremos la siguiente directriz:

      userlist_file=/etc/vsftpd.user_list
    • Configurar FTPS Explicito sobre TLS (Volver al índice General)
      El protocolo FTP, no codifica los datos y tampoco las credenciales del usuario cuando se transmiten para su autenticación. El que alguien pueda capturar los paquetes de una conexión FTP en el momento de la autenticación es un echo muy grave para la seguridad del sistema. Para solucionar esto es necesario utilizar un protocolo seguro. En nuestro ejemplo vamos a configurar el servidor vsftpd para que trabaje sobre SSL y poder cifrar las conexiones.
      En primer lugar debemos instalar, si no está aún instalado, el paquete openssl. Para instalarlo ejecutaremos desde la consola los siguientes comandos:
      Primero actualizamos los repositorios.

      $ sudo apt-get update

      Tras actualizar los repositorios instalamos el paquete.

      $ sudo apt-get install openssl

      Tras la instalación deberemos generar un certificado. En el artículo publicado en ZeppelinuX Crear certificado autofirmado para Apache podréis aprender como generarlo y, aunque el artículo describe como generarlo para Apache, esos mismos certificados nos valdrán para vsftd. Solo tendremos que saber la ruta donde se ubican los certificados de llave (key) que en artículo Crear certificado autofirmado para Apache se le da la extensión .pem y el certificado temporal que en el artículo Crear certificado autofirmado para Apache se le da la extensión .crt.

      Tras generar los certificados, pasamos a la configuración del servidor FTP vsftpd.

      Con la siguiente directriz habilitamos el soporte TLS/SSL.

      ssl_enable=YES

      La siguiente directriz, habilita o deshabilita el que los usuarios anónimos utilicen TLS/SSL. En nuestro ejemplo, como tenemos deshabilitadas las conexiones anónimas, también deshabilitamos las conexiones cifradas para los usuarios anónimos.

      allow_anon_ssl=NO

      Las siguientes directrices obligan a utilizar TLS/SSL para todas las operaciones, es decir, transferencia de datos y autenticación de usuarios locales y anonimos. Establecer el valor NO, hace que sea opcional utilizar TLS/SSL. En nuestro ejemplo forzamos el uso de TLS/SSL.

      force_local_data_ssl=YES
      force_local_logins_ssl=YES
      force_anon_data_ssl=YES
      force_anon_logins_ssl=YES

      Las siguientes directrices establecen la preferencia de TLSv1 sobre SSLv2 y SSLv3.

      ssl_tlsv1=YES
      ssl_sslv2=NO
      ssl_sslv3=NO

      Para finalizar, en las siguientes directrices, indicaremos las rutas a los certificados generados.

      rsa_cert_file=/usr/share/ssl-cert/certs/zeppelinux.crt
      rsa_private_key_file=/usr/share/ssl-cert/private/zeppelinux.pem
    • Configuración específica para Filezilla (Volver al índice General)
      Los desarrolladores de FileZilla decidieron con la versión 3.5.3 que eliminarían el soporte para el algoritmo de cifrado 3DESCBCSHA, con el argumento de que este algoritmo es una de los más lentos. Con ésto rompieron la compatibilidad con miles de servidores FTP que utilizan FTPES (FTP Explícito sobre TLS). La solución temporal, mientras los desarrolladores de FileZilla razonan lo absurdo de su decisión, es utilizar la siguiente directriz:

      ssl_ciphers=HIGH

      Filezilla además requiere desactivar la siguiente directriz que puede romper compatibilidad con otros clientes.

      require_ssl_reuse=NO

      Cabe señalar que Filezilla se ha convertido en un desarrollo políticamente incorrecto por dejar de respetar los estándares.

 
Enlaces externos (Volver al índice General)

 

Espero que este artículo os haya servido de algo. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.