Servidor FTP

ProFTPD és un servidor FTP de codi obert, molt configurable i robust, àmpliament usat en entorns GNU/Linux. Suporta connexions segures via TLS/SSL, hosts virtuals, xroot per usuari i autenticació flexible.

ProFTPD logo

1. Prepara el sistema

Abans d’instal·lar res, actualitza el sistema:

sudo apt update
sudo apt upgrade -y

2. Instal·la ProFTPD

ProFTPD es troba als dipòsits oficials d’Ubuntu:

sudo apt install proftpd -y

Verifica que el servei s’ha iniciat correctament:

sudo systemctl status proftpd

Gestió bàsica del servei:

sudo systemctl start proftpd       # Iniciar
sudo systemctl stop proftpd        # Aturar
sudo systemctl restart proftpd     # Reiniciar
sudo systemctl enable proftpd      # Activar a l'arrencada
sudo systemctl disable proftpd     # Desactivar a l'arrencada

3. Fitxer de configuració principal

El fitxer de configuració es troba a /etc/proftpd/proftpd.conf. Fes sempre una còpia de seguretat abans de modificar-lo:

sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak

Obre’l per editar-lo:

sudo nano /etc/proftpd/proftpd.conf

4. Opcions de configuració principals

A continuació es descriu un fitxer de configuració complet amb les opcions més importants comentades:

# Nom del servidor (visible als clients FTP)
ServerName                      "Servidor FTP Exemple"

# Tipus d'arrencada (standalone o inetd)
ServerType                      standalone

# Adreça IP on escolta (0.0.0.0 = totes les interfícies)
# ServerAddress                 192.168.1.100

# Port FTP estàndard
Port                            21

# Usuari i grup amb els quals s'executa el dimoni
User                            proftpd
Group                           nogroup

# Nombre màxim de connexions simultànies
MaxInstances                    30

# Màxim d'intents d'autenticació fallits per connexió
MaxLoginAttempts                3

# Temps d'inactivitat màxim (en segons) abans de tancar la sessió
TimeoutIdle                     600

# Temps màxim per completar l'autenticació
TimeoutLogin                    120

# Temps màxim sense transferència activa
TimeoutNoTransfer               300

# Confinament de cada usuari al seu directori home (chroot)
DefaultRoot                     ~

# No cal que l'usuari tingui una shell vàlida al sistema
RequireValidShell               off

# Ports per al mode passiu (PASV) — cal obrir-los al tallafocs
PassivePorts                    49152 65534

# IP pública del servidor per al mode passiu (si hi ha NAT)
# MasqueradeAddress             203.0.113.10

# Registre d'accessos i transferències
TransferLog                     /var/log/proftpd/xferlog
SystemLog                       /var/log/proftpd/proftpd.log

# Format del registre de transferències (compatible amb wu-ftpd)
WtmpLog                         off

# Oculta l'usuari i grup reals dels fitxers (mostra "ftp ftp")
DirFakeUser                     on  ftp
DirFakeGroup                    on  ftp

# Deshabilita la resolució DNS inversa (millora el rendiment)
UseReverseDNS                   off

# Identd (normalment es desactiva)
IdentLookups                    off

# Amaga la versió de ProFTPD a la benvinguda
ServerIdent                     on "FTP Server ready."

# Missatge de benvinguda
# DisplayLogin                  /etc/proftpd/welcome.txt

# Missatge en entrar a un directori (fitxer .message dins cada dir)
DisplayChdir                    .message true

# Permet reprendre transferències interrompudes
AllowRetrieveRestart            on
AllowStoreRestart               on

# Límit de velocitat de pujada i baixada (en bytes/segon, 0 = sense límit)
# TransferRate                  RETR 102400   # 100 KB/s baixada
# TransferRate                  STOR 51200    # 50 KB/s pujada

# Permisos per defecte dels fitxers pujats (màscara umask)
Umask                           022

# Bloc de permisos per al directori arrel
<Directory />
  AllowOverwrite                on
</Directory>

# Accés anònim (desactivat per defecte — descomenta per activar)
# <Anonymous /home/ftp>
#   User                        ftp
#   Group                       nogroup
#   UserAlias                   anonymous ftp
#   MaxClients                  10
#   DisplayLogin                welcome.msg
#   DisplayChdir                .message
#   <Limit WRITE>
#     DenyAll
#   </Limit>
# </Anonymous>

Després de qualsevol canvi, reinicia el servei:

sudo systemctl restart proftpd

5. Crea usuaris FTP

Per seguretat, es recomana crear usuaris dedicats per a l’FTP, sense accés a la shell del sistema.

Usuari bàsic

# Crea l'usuari sense shell de login
sudo adduser --shell /usr/sbin/nologin ftpusuari

# Crea l'estructura de directoris FTP
sudo mkdir -p /home/ftpusuari/ftp/fitxers
sudo chown nobody:nogroup /home/ftpusuari/ftp
sudo chmod a-w /home/ftpusuari/ftp          # El directori arrel no ha de ser escrivible
sudo chown ftpusuari:ftpusuari /home/ftpusuari/ftp/fitxers

Afegeix l’usuari a la llista d’usuaris permesos

Edita /etc/ftpusers — aquest fitxer conté els usuaris que no poden accedir per FTP. Assegura’t que el teu usuari no hi apareix:

cat /etc/ftpusers

Limita l’accés a usuaris concrets

Edita el fitxer de configuració:

sudo nano /etc/proftpd/proftpd.conf

Afegeix al proftpd.conf:

# Permet accés només als usuaris llistats
<Limit LOGIN>
  AllowUser ftpusuari
  AllowUser altreUsuari
  DenyAll
</Limit>

6. Configura el tallafocs (UFW)

# Obre el port FTP de control
sudo ufw allow 21/tcp

# Obre el rang de ports per al mode passiu
sudo ufw allow 49152:65534/tcp

# Aplica els canvis
sudo ufw reload

# Comprova l'estat
sudo ufw status

7. Xifrat TLS/SSL (FTPS)

7.1. Genera un certificat autosignat

sudo openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/ssl/private/proftpd.key \
  -out /etc/ssl/certs/proftpd.crt

# Ajusta els permisos
sudo chmod 600 /etc/ssl/private/proftpd.key
sudo chmod 644 /etc/ssl/certs/proftpd.crt

7.2. Activa el mòdul TLS

sudo nano /etc/proftpd/proftpd.conf

Assegura’t que la línia següent no estigui comentada:

Include /etc/proftpd/tls.conf

7.3. Configura el fitxer TLS

sudo nano /etc/proftpd/tls.conf

Contingut recomanat:

<IfModule mod_tls.c>
  # Activa el motor TLS
  TLSEngine                     on

  # Registre TLS
  TLSLog                        /var/log/proftpd/tls.log

  # Protocols acceptats (TLSv1.2 i TLSv1.3 — descarta versions antigues)
  TLSProtocol                   TLSv1.2 TLSv1.3

  # Certificat i clau privada
  TLSRSACertificateFile         /etc/ssl/certs/proftpd.crt
  TLSRSACertificateKeyFile      /etc/ssl/private/proftpd.key

  # No requereix certificat del client
  TLSVerifyClient               off

  # Obliga a usar TLS (canvia a "off" per permetre connexions no xifrades)
  TLSRequired                   on

  # Opcions addicionals
  TLSOptions                    NoSessionReuseRequired NoCertRequest
</IfModule>

Reinicia el servei:

sudo systemctl restart proftpd

8. Hosts virtuals (VirtualHost)

ProFTPD permet tenir múltiples servidors FTP en una mateixa màquina, cadascun amb la seva pròpia IP o configuració:

<VirtualHost 192.168.1.200>
  ServerName          "Servidor FTP Secundari"
  Port                21
  DefaultRoot         /var/ftp/segon
  MaxClients          5
  TransferLog         /var/log/proftpd/vhost2_xfer.log
</VirtualHost>

9. Quotes de disc per usuari

Instal·la el mòdul de quotes:

sudo apt install proftpd-mod-quotatab -y

Edita el fitxer de configuració proftpd.conf:

sudo nano /etc/proftpd/proftpd.conf

Afegeix al proftpd.conf:

<IfModule mod_quotatab.c>
  QuotaEngine               on
  QuotaLog                  /var/log/proftpd/quota.log
</IfModule>

<IfModule mod_quotatab_file.c>
  QuotaLimitTable           file:/etc/proftpd/ftpquota.limittab
  QuotaTallyTable           file:/etc/proftpd/ftpquota.tallytab
</IfModule>

Crea les taules i assigna quotes:

# Inicialitza les taules
sudo ftpquota --create-table --type=limit  --table-path=/etc/proftpd/ftpquota.limittab
sudo ftpquota --create-table --type=tally  --table-path=/etc/proftpd/ftpquota.tallytab

# Assigna quota a un usuari (500 MB de pujada, 1 GB total)
sudo ftpquota --add-record --type=limit --name=ftpusuari --quota-type=user \
  --bytes-upload=524288000 --bytes-download=0 --bytes-xfer=1073741824

10. Confina usuaris

En el context de ProFTPD (i servidors FTP en general), engabiar un usuari significa confinar-lo al seu directori home, de manera que no pugui navegar per la resta del sistema de fitxers.

La directiva DefaultRoot

La manera més senzilla amb ProFTPD és afegir al proftpd.conf:

DefaultRoot ~

El símbol ~ significa “el directori home de cada usuari”. Un cop connectat, l’usuari veu /, però en realitat és el seu /home/ftpusuari/ — no pot pujar més amunt.

Engabia un usuari concret

DefaultRoot /var/ftp/ftpusuari  ftpusuari

O per a un grup específic:

DefaultRoot ~  ftpgroup

Qualsevol usuari que no sigui del grup ftpgroup no quedarà confinat.

Estructura de directoris recomanada

ProFTPD exigeix que el directori arrel de la gàbia no sigui escrivible per l’usuari:

# Directori arrel de la jaula (propietat de root, no escrivible per l'usuari)
sudo mkdir -p /home/ftpusuari/ftp
sudo chown root:root /home/ftpusuari/ftp
sudo chmod 755 /home/ftpusuari/ftp

# Subdirectori on l'usuari sí que pot pujar fitxers
sudo mkdir /home/ftpusuari/ftp/fitxers
sudo chown ftpusuari:ftpusuari /home/ftpusuari/ftp/fitxers

I al proftpd.conf:

DefaultRoot /home/ftpusuari/ftp  ftpusuari

Verificació

Un cop connectat, si l’usuari intenta fer cd .. des de l’arrel, el servidor li retornarà un error o simplement no es mourà. La gàbia funciona correctament.

11. Registres i monitoratge

Fitxers de log principals

Fitxer Contingut
/var/log/proftpd/proftpd.log Connexions, errors generals
/var/log/proftpd/xferlog Registre de transferències
/var/log/proftpd/tls.log Esdeveniments TLS/SSL

Consulta els logs en temps real

sudo tail -f /var/log/proftpd/proftpd.log
sudo tail -f /var/log/proftpd/xferlog

Amb journalctl

sudo journalctl -u proftpd -f              # Seguiment en temps real
sudo journalctl -u proftpd --since today   # Logs d'avui

12. Resol problemes habituals

Problema Causa probable Solució
Error 530 Login incorrect Usuari a /etc/ftpusers o sense permisos Comprova /etc/ftpusers i la directiva <Limit LOGIN>
No es pot connectar en mode passiu Ports PASV tancats al tallafocs Obre el rang 49152:65534/tcp a UFW
Error de certificat TLS Certificat autosignat no acceptat Accepta l’excepció al client FTP (FileZilla, etc.)
L’usuari pot veure tot el sistema DefaultRoot ~ absent o comentat Assegura’t que DefaultRoot ~ estigui actiu
ProFTPD no arrenca Error de sintaxi al config Executa sudo proftpd --configtest

Verifica la configuració

sudo proftpd --configtest

13. Connecta des d’un client (FileZilla)

Camp Valor
Protocol FTP - Protocol de transferència de fitxers
Amfitrió IP o domini del servidor
Port 21
Xifratge Requereix FTP explícit sobre TLS
Tipus d’entrada Normal
Usuari ftpusuari
Contrasenya (la configurada)
Configuració a FileZilla

14. Resum de fitxers importants

Fitxer / Directori Descripció
/etc/proftpd/proftpd.conf Configuració principal
/etc/proftpd/tls.conf Configuració TLS/SSL
/etc/ftpusers Usuaris que no poden usar FTP
/etc/ssl/certs/proftpd.crt Certificat TLS
/etc/ssl/private/proftpd.key Clau privada TLS
/var/log/proftpd/ Directori de registres

Versions d’aquest document

Domini Públic (CC0)