Servidor FTP en Debian: cómo instalar y configurar un servidor

El almacenamiento o la descarga frecuente de archivos de gran tamaño en un servidor requieren una tecnología de transmisión apropiada, destacando la transferencia de archivos a través del conocido como protocolo de transferencia de archivos (FTP) por ser la solución disponible más solicitada. El protocolo de transferencia para redes IP, que actúa sobre la capa de aplicación, ofrece al usuario la posibilidad de crear directorios y estructurarlos según se requiera, además de transportar los datos con los puertos de red TCP 20 y 21. Dos razones explican el uso frecuente de esta tecnología de transferencia para subir y descargar archivos en el espacio web: por un lado, solo se necesita un software cliente para acceder al servidor FTP y, por otro, basta con la conexión de ambos componentes a través de Internet.

Cuando se usa este tipo de recursos web en alquiler se obtienen del proveedor los específicos de acceso que permiten establecer la conexión con su servidor FTP. Cuando es el usuario quien aloja un servidor también se puede recurrir a la tecnología de transferencia de datos para instalar y configurar adecuadamente el propio servidor. En este artículo se aclara cómo instalar un servidor FTP en Debian, dedicando también un apartado a la encriptación TLS.

Instalar un servidor FTP en Debian

Antes de pasar a la instalación y configuración es necesario encontrar primero el software de servidor adecuado. Linux ofrece diversos servidores FTP, en su mayoría open source y que normalmente se encuentran en la administración del paquete de la distribución correspondiente. Una de las aplicaciones más conocidas es ProFTPD, con licencia GPL y que debido a su construcción modular es fácilmente escalable. El archivo de configuración principal funciona basándose en directivas o grupos de ellas con las que los administradores que ya hayan estado en contacto con el servidor de Apache deben estar familiarizados. Aunque Debian ejecuta ProFTPD de forma predeterminada en el repositorio del software, la instalación se lleva a cabo en el terminal, como es usual, a través del comando siguiente:

sudo apt-get install proftpd

Para finalizar con la instalación hay que decidir si se va a usar ProFTPD en modo servidor (standalone) o en uno de los servicios controlados por inedt. En el primer caso el servidor FTP se ocupa de forma autónoma de las peticiones entrantes. En la segunda variante el “superservidor” inetd/xinetd se encarga de las peticiones y las dirige al servidor FTP, opción de interés solo en el caso de esperar poco tráfico en el FTP.

El servidor FTP en Debian: tutorial de configuración

Tras la instalación se puede empezar a configurar ProFTPD. En el directorio /etc/proftpd/ se encuentra el archivo de configuración proftpd.conf que puede abrirse con un editor de tu elección, como, por ejemplo, el programa estándar nano de Debian, al que se accede a través del siguiente comando:

sudo nano /etc/proftpd/proftpd.conf

En las siguientes líneas del editor se encuentran las funciones y opciones de configuración más importantes. Cada componente tiene su línea propia y requiere valores predefinidos. Si, por ejemplo, se quiere indicar si se puede usar una función, se dispone del valor “on” (función activada) y “off” (función desactivada). Además, existe la opción de anteponer una almohadilla (#) a una línea para prescindir de ella, de modo que el servidor ProFTPD ignora la línea completa, es decir, la almohadilla se considera como alternativa a “off” para desactivar funciones. No obstante, el cometido principal de estos símbolos (las almohadillas) es el de hacer comentarios sobre las diferentes posibilidades de configuración y así mejorar la legibilidad de proftpd.conf.

Consejo

En vez de un archivo proftpd.conf puedes usar también tu propio archivo de configuración y almacenarlo en el directorio /etc/proftpd/conf.d/. Este directorio permanece intacto cuando el software FTP se actualiza, de tal modo que se consigue reducir el riesgo de perder las configuraciones. Con las directivas include, las especificaciones del servidor guardadas en el directorio conf.d pueden integrarse sin mayor problema en el archivo principal (tiene lugar automáticamente con la configuración estándar).

Configuraciones básicas: hostname y directorio FTP

Antes de proceder a la configuración del servidor FTP en Debian hay que prestar atención a la instalación base, es decir, a los ajustes elementales: asignar un hostname al servidor o determinar el directorio que se va a usar para subir o descargar datos. Además, existen diferentes posibilidades de configuración relacionadas con los usuarios de FTP potenciales, como se puede ver en la configuración a modo de ejemplo que aparece a continuación:

# Indicación de hostname y mensaje de bienvenida
ServerName  "hostname/ip-address"
DisplayLogin  "El inicio de sesión en el servidor FTP en Debian se ha realizado con éxito”  

# Directivas generales de inicio de sesión
<Global>
  # Solo permite el acceso con shells definidos en /etc/shells
  RequireValidShell  on
  # No aceptar Root-Log-in 
  RootLogin  off
  # Indicación del directorio FTP al que debe acceder el usuario
  DefaultRoot  Directorio
</Global>

# Definir usuario/grupo de usuarios autorizados al inicio de sesión en FTP 
<Limit LOGIN>
  # El inicio de sesión solo se permite a los usuarios del grupo ftpuser 
  # En vez de una larga lista se ignora al grupo con (!)
  DenyGroup  !ftpuser
</Limit>

Con esta configuración básica se permite el acceso a un directorio concreto a los usuarios. Esto es muy útil, entre otras cosas, si estos se encargan del mantenimiento de la web, dado que requieren extensos derechos de acceso. Si, por el contrario, la función del servidor FTP de Linux pretende ofrecer al usuario un espacio de almacenamiento para los archivos, hay que configurar ProFTPD de modo que el acceso se limite al directorio inicial:

# Permitir a los usuarios solamente el acceso al directorio inicial 
DefaultRoot ~

Crear usuarios en FTP

Si lo que quieres es crear un nuevo usuario ProFTPD debes definir siempre /bin/false como shell de inicio de sesión. De esta forma se consigue que el nuevo usuario solo tenga acceso a este servidor y no al sistema en su conjunto. Primero inserta /bin/false con el siguiente comando de terminal en el shell del archivo dado:

sudo echo "/bin/false" >> /etc/shells

Seguidamente creas un primer usuario:

sudo adduser user1 --shell /bin/false --home /home/user1

En este ejemplo se crea la cuenta de usuario con el nombre “user 1” y se indica también el directorio de entrada. Hay que establecer también una contraseña para la nueva cuenta de usuario y confirmar el nuevo perfil. No obstante, para que este nuevo usuario pueda conectarse realmente al servidor FTP en Debian y le sea posible subir y descargar los datos en su propio directorio, debes introducir su directorio de entrada en proftpd.conf:

<Directory /home /user1>
  Umask 022 
  AllowOverwrite off
  <Limit LOGIN>
    AllowUser user1
    DenyAll
  </Limit>
  <Limit ALL>
    AllowUser user1
    DenyAll
  </Limit>
</Directory>

Este ejemplo de código limita el directorio de diferentes formas para convertirlo en lugar de almacenamiento privado de los archivos del user1 y con el comando Umask (022) se asignan todos los derechos al propietario del directorio. Otros usuarios, por el contrario, podrán leer los archivos pero solo se les permitirá exportarlos cuando el propietario les conceda los derechos necesarios. La directiva desactivada AllowOverwrite evita que al subir nuevos datos se reescriban los ya almacenados. Finalmente, el FTP log in (Limit LOGIN) y la implementación del comando (Limit ALL) están bloqueados para todos los usuarios, exceptuando al user1.

Consejo

En vez de prohibir la implementación de todos los comandos de FTP, es posible impedir operaciones únicas y de este modo tener la posibilidad de crear, por ejemplo, un directorio al que los usuarios solo tengan permitido subir archivos. Una vista previa guiada sobre las diferentes posibilidades de configuración se puede encontrar en los siguientes manuales online.

Permitir el acceso anónimo

Si deseas que tu servidor FTP en Debian se configure de manera que sirva como servidor de descarga público, en la mayoría de los casos también se espera que los usuarios puedan acceder anónimamente a los archivos facilitados. Para ello, hay que definir primero los derechos de acceso a través de chmod para el directorio de descarga posterior, denominado en este caso /home/ftpdownload:

sudo chmod 755 -R /home/ftpdownload

El propietario del directorio posee todos los derechos (7 = Leer, escribir y ejecutar) mientras que el los usuarios del grupo y el resto de usuarios solo pueden leer y ejecutar (5). Una vez se han definido los derechos, se puede configurar el acceso anónimo en el archivo proftpd.conf:

<Anonymous ~ftp>
User  ftp
Group  ftpgroup

# Posibles perfiles de login para clientes
UserAlias  anonymous  ftp

# Número máximo de clientes y ocultar las propiedades de usuario y de grupo 
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell  off
MaxClients  10

<Directory *>
  <Limit WRITE>
    DenyAll
  </Limit>
</Directory>
</Anonymous>

Para que el inicio de sesión en el servidor FTP en Debian funcione con el perfil ftp primero hay que añadir el grupo ftpuser:

sudo adduser ftp ftpgroup

Configurar encriptación SSL/TLS

El protocolo FTP transfiere en texto plano tanto la información de registro como los datos enviados. Por ello, si quieres configurar ProFTPD en modo privado para que no sea accesible a todo el mundo, se recomienda encriptar el acceso. La solución más usada es la encriptación con SSL/TLS, fácil de instalar con ayuda del software OpenSSL. El administrador de paquetes de Debian contiene esta herramienta de encriptación de forma estándar, aunque la instalación se puede llevar a cabo también de forma alternativa como prosigue:

apt-get install openssl

Paso 1: generar el certificado y la clave

Utiliza OpenSSL para crear un certificado. Para poder guardarlo, crea una carpeta en el directorio ProFTPD con el siguiente comando:

mkdir /etc/proftpd/ssl

Tanto el certificado (proftpd.cert.pem) como la clave (proftpd.key.pem) tienen una validez anual. En servidores FTP en Linux se generan una vez se ha insertado el directorio de almacenamiento en:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem

Además, es necesario que indiques tu información para que el certificado se registre de forma adecuada:

  • Country Name (2 letter code): código de país, por ejemplo, “ES” para España
  • State or Province Name (full name): estado o provincia, por ejemplo, “Barcelona“
  • Locality Name (eg, city): ciudad, por ejemplo, “Madrid”
  • Organization Name (eg, company): nombre de la compañía o tu propio nombre
  • Organizational Unit Name (eg, company): departamento (si hay), por ejemplo, “TI”
  • Common Name (eg, YOUR name): nombre del dominio que debe protegerse, por ejemplo, “ftp.example.com.
  • Email Address: dirección de correo electrónico

Paso 2: activar SSL/TLS en ProFTPD

Tras haber creado tu propio certificado junto a una clave privada debes activar la técnica de encriptación para el servidor ProFTPD. Para ello el software del servidor FTP en Debian dispone del módulo mod_tls, instalado de forma predeterminada pero apagado. Para su activación se requiere llevar a cabo una serie de ajustes en proftpd.conf. Abre la configuración de datos y busca la siguiente entrada:

<IfModule mod_tls.c>
  TLSEngine  off
</IfModule>

Asigna a la directiva TLSEngine al valor “on” y amplía el párrafo como sigue:

<IfModule mod_tls.c>
  TLSEngine      on
  TLSLog        /var/log/proftpd/tls.log
  TLSProtocol      TLSv1 TLSv1.1 TLSv1.2
  TLSRSACertificateFile    /etc/proftpd/ssl/proftpd.cert.pem
  TLSRSACertificateKeyFile  /etc/proftpd/ssl/proftpd.key.pem
  TLSVerifyClient      off
  TLSRequired      on
</IfModule>

De esta forma no solo has habilitado la encriptación SSL/TLS para tu servidor FTP en Debian, sino que en el mismo paso has realizado las configuraciones más importantes al definir el archivo de acceso para el registro de las conexiones FTP (TLSLog) así como las rutas al certificado (TLSRSACertificateFile) y la clave (TLSRSACertificateKeyFile), además de introducir las versiones de protocolo posibles (TLSProtocol). Las dos últimas líneas hacen que el módulo no verifique el certificado presentado por el cliente (TLSVerifyClient) y que la encriptación sea un requisito previo para establecer la conexión (TLSRequired). Tras reiniciar el servidor ProFTPD se hacen efectivos los ajustes:

sudo /etc/init.d/proftpd restart

Paso 3: registrarse a través de SSL/TLS en el servidor ProFTPD

Si ya has habilitado SSL/TLS para ProFTPD, como se ha recomendado en este tutorial, los usuarios necesitan un cliente FTP compatible con la creación de la conexión encriptada. Uno de los agentes más importantes es FileZilla, no solo disponible para Debian y otras distribuciones de Linux, sino también para macOS y Windows. El programa de código abierto se presenta como la mejor solución para acceder desde diferentes plataformas al servidor FTP.

En el administrador del servidor de FileZilla, al elegir el tipo de servidor, introduce la variante segura FTPS (“FTP a través de TLS/SSL explícito”) en vez de FTP. En la primera creación de conexión con el servidor es también necesario que se acepte el certificado.

Configurar ProFTD: consejos y trucos

Las opciones de configuración anteriores constituyen solo una pequeña selección, pues el polifacético software FTP permite escenarios muchos más específicos y complejos para la configuración de un servidor. La página web oficial de ProFTPD ofrece una cantidad ilimitada de información útil. La documentación online gratuita contiene, entre otras cosas, configuraciones de ejemplo, instrucciones detalladas, FAQ o peguntas frecuentes y explicaciones de directivas individuales. Además hay información sobre los diferentes módulos estándares y adicionales.

 

Configurar el servidor FTP en Debian fácilmente con GUI

En este tutorial te hemos mostrado cómo se configura un servidor FTP con ProFTPD a través de líneas de comandos y modificaciones manuales en el archivo de configuración. Al igual que en muchos otros programas de Linux/Unix, aquí también existen diferentes interfaces gráficas de usuario para el software del servidor FTP que permiten configurar el servidor sin recurrir al terminal. Gadmintools incluye una interfaz de usuario que se puede instalar sin problemas con el administrador de paquetes. La interfaz con el nombre gadmin-proftpd respalda el inicio del servidor FTP en Debian, la creación de un perfil de usuario y la ejecución de cambios en proftpd.conf, esto último para evitar abrir los archivos de configuración. Las entradas nuevas o modificadas se transfieren directamente.

Nota

El uso de una interfaz gráfica de usuario no excluye la configuración y gestión paralela del servidor con la línea de comandos.

Posibles errores en la configuración del servidor

En algunos casos, al reiniciar el servidor ProFTPDS se pueden mostrar los siguientes mensajes de error:

„mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled“

En este caso concreto el problema reside en que el módulo caché mod_tls_memcache en la compilación de ProFTPD ha sido activado automáticamente como componente de SSL/TLS. En la configuración de la encriptación SSL/TLS el módulo se ocupa, en teoría y si así se desea, del almacenamiento temporal de las sesiones FTP encriptadas. Dado que no se requiere la caché de sesión de forma predeterminada, tampoco se han realizado los ajustes necesarios para que el módulo funcione, lo que ha provocado el aviso de error. La solución a este problema es simple: puedes comentar el módulo o el proceso de carga en los archivos de configuración.

# LoadModule mod_tls_memcache.c

Además del error antes descrito, también puede producirse una conexión defectuosa tras instalar un servidor FTP en Debian. Para erradicar este problema se puede acceder a diferentes opciones de análisis:

1. Comprobar si funciona el servidor ProFTPD:

sudo service proftpd status

2. Comprobar si el servidor ProFTPD escucha en el puerto 21 para registrar las solicitudes FTP propias:

sudo netstat -tlp|grep proftpd

3. Comprobar avisos de error en el acceso a ProFTPD:

sudo tail -20 /var/log/proftpd/proftpd.log

4. Comprobar avisos de error en el acceso a TLS:

sudo tail -20 /var/log/proftpd/tls.log

5. Pruebas de conectividad en el puerto 21 con telnet:

sudo telnet 192.0.2.10 21

6. Pruebas de conectividad en el puerto 21 con TLS:

sudo openssl s_client -connect 192.0.2.10:21 -stattls ftp