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

El File-Transfer-Protocol o protocolo de transferencia de archivos, conocido por sus siglas FTP, es una de las técnicas de transferencia de archivos más utilizadas, especialmente para subir y descargar archivos en espacios web. En este tutorial, aprenderás cómo configurar un servidor FTP con cifrado TLS en Debian.

## 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](https://www.ionos.com/es-us/digitalguide/servidores/know-how/file-transfer-protocol/), en su mayoría **[open source](https://www.ionos.com/es-us/digitalguide/servidores/know-how/que-es-el-open-source-o-codigo-abierto/)** y que normalmente se encuentran disponibles en los gestores de paquetes de las distintas [distribuciones Linux](https://www.ionos.com/es-us/digitalguide/servidores/configuracion/distribuciones-linux/).

Una de las aplicaciones más conocidas es [ProFTPD](http://www.proftpd.org "Página de inicio de 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](https://www.ionos.com/es-us/digitalguide/servidores/know-how/que-es-apache/) deben estar familiarizados. Aunque [Debian](https://www.ionos.com/es-us/digitalguide/servidores/know-how/debian-el-software-universal-para-sistemas-operativos/) 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 siguiente comando:

```bash
sudo apt update 
sudo apt install proftpd 
sudo apt install proftpd-mod-crypto
```

Si deseas que el servidor FTP se inicie automáticamente al reiniciar el sistema, ejecuta el siguiente comando:

```bash
sudo systemctl enable proftpd
```

Consejo ¿Necesitas almacenar o transferir datos? Alquila ahora un [servidor Secure FTP](https://www.ionos.es/alojamiento/servidor-ftp "Alquilar servidor Secure FTP") con IONOS. Disfruta de una transferencia segura gracias a [SSH](https://www.ionos.es/ayuda/hosting/configurar-y-gestionar-accesos-ssh/que-es-ssh/ "¿Qué es SSH?") y SSL/[TLS](https://www.ionos.com/es-us/digitalguide/servidores/seguridad/tls-transport-layer-security/), además de copias de seguridad diarias incluidas.

Para finalizar con la instalación es necesario 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.

## Servidor FTP en Debian: posibles escenarios y la tarifa de IONOS adecuada

¿No sabes qué configuración de hardware y red necesitas para tu servidor FTP en Debian? En la siguiente tabla, se presentan tres escenarios posibles para un servidor FTP junto con la tarifa de IONOS más adecuada para cada caso.

<table>
  <thead>
    <tr>
      <th>Escenario del servidor FTP</th>
      <th>Tarifa de IONOS recomendada</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Pequeño servidor web</td>
      <td>VPS Linux M</td>
    </tr>
    <tr>
      <td>Servidor web más grande</td>
      <td>VPS Linux XL</td>
    </tr>
    <tr>
      <td>Servidor FTP empresarial</td>
      <td>Servidor Dedicado AMD Ryzen XXL-128 NVMe</td>
    </tr>
  </tbody>
</table>

## 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:

```bash
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**.

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 esenciales: **asignar un [hostname](https://www.ionos.com/es-us/digitalguide/hosting/cuestiones-tecnicas/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:

```none
# 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 les 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**:

```none
# 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:

```bash
sudo sh -c 'echo "/bin/false" >> /etc/shells'
```

A continuación, creas un primer usuario:

```bash
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, es necesario introducir el **directorio de entrada en proftpd.conf:**

```none
<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 un 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, excepto para el 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](http:///www.proftpd.org/docs/howto/Limit.html "ProFTPD-How-tos: configuración de “Limits”").

### 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*:

```bash
sudo chmod 755 -R /home/ftpdownload
```

El **propietario del directorio** posee **todos los derechos** **(7 = leer, escribir y ejecutar)** mientras que **los usuarios del grupo y el resto de los 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:

```none
<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*:

```bash
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**. Esto se puede llevar a cabo mediante el **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:

```bash
sudo apt 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:

```bash
sudo 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 estos se generan una vez se ha insertado el directorio de almacenamiento con el siguiente comando:

```bash
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, “*US*” para Estados Unidos
- **State or Province Name** **(full name)**: estado o provincia, por ejemplo, “*California*“
- **Locality Name (eg, city)**: ciudad, por ejemplo, “*Los Ángeles*”
- **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**. Para su activación se requiere llevar a cabo una serie de ajustes en *tls.conf*. Abre la configuración de datos y busca la siguiente entrada:

```none
<IfModule mod_tls.c> 
    TLSEngine    off
```

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

```none
<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:

```bash
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](https://www.ionos.com/es-us/digitalguide/servidores/configuracion/filezilla-la-solucion-para-el-cliente-ftp/), 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. También es necesario que se acepte el certificado en la primera creación de conexión con el servidor.

Si no puedes establecer una conexión TLS en FileZilla, puede ser necesario cargar manualmente el módulo mod\_tls. Para ello, añade la siguiente línea al inicio del archivo *proftpd.conf*:

```none
LoadModule mod_tls.c
```

Para que este cambio se lleve a cabo, reinicia el servidor con el siguiente comando:

```bash
sudo systemctl restart proftpd
```

Consejo El [File Transfer Protocol (SSH)](https://www.ionos.com/es-us/digitalguide/servidores/know-how/sftp-ssh-file-transfer-protocol/) utiliza SSH en lugar de TLS/SSL y es una alternativa sencilla y fácil de usar frente a FTPS.

### Configurar ProFTPD: 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](http:///proftpd.org/docs/ "proftpd.org: Online-Manuals") gratuita contiene, entre otras cosas, **configuraciones de ejemplo**, **instrucciones detalladas**, **peguntas frecuentes** y **explicaciones de directivas individuales**. Además, hay información sobre los diferentes módulos estándares y adicionales.

## Posibles errores en la configuración del servidor

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

```none
„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 se ha 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.

```none
# 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:**

```bash
sudo service proftpd status
```

**2. Comprobar si el servidor ProFTPD está escuchando en el [puerto TCP](https://www.ionos.com/es-us/digitalguide/servidores/know-how/puertos-tcp-puertos-udp/) 21 para registrar las solicitudes FTP entrantes**:

```bash
sudo netstat -tlp|grep proftpd
```

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

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

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

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

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

```bash
sudo telnet [IP-Address] 21
```

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

```bash
sudo openssl s_client -connect [IP-Address]:21 -stattls ftp
```


This is a markdown version of: [https://www.ionos.com/es-us/digitalguide/servidores/configuracion/servidor-ftp-en-debian/](https://www.ionos.com/es-us/digitalguide/servidores/configuracion/servidor-ftp-en-debian/) for AI/LLM consumption.