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.
Abans d’instal·lar res, actualitza el sistema:
sudo apt update
sudo apt upgrade -yProFTPD es troba als dipòsits oficials d’Ubuntu:
sudo apt install proftpd -yVerifica que el servei s’ha iniciat correctament:
sudo systemctl status proftpdGestió 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'arrencadaEl 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.bakObre’l per editar-lo:
sudo nano /etc/proftpd/proftpd.confA 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 proftpdPer seguretat, es recomana crear usuaris dedicats per a l’FTP, sense accés a la shell del sistema.
# 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/fitxersEdita /etc/ftpusers — aquest fitxer conté els usuaris
que no poden accedir per FTP. Assegura’t que el teu
usuari no hi apareix:
cat /etc/ftpusersEdita el fitxer de configuració:
sudo nano /etc/proftpd/proftpd.confAfegeix al proftpd.conf:
# Permet accés només als usuaris llistats
<Limit LOGIN>
AllowUser ftpusuari
AllowUser altreUsuari
DenyAll
</Limit>
# 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 statussudo 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.crtsudo nano /etc/proftpd/proftpd.confAssegura’t que la línia següent no estigui comentada:
Include /etc/proftpd/tls.conf
sudo nano /etc/proftpd/tls.confContingut 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 proftpdProFTPD 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>Instal·la el mòdul de quotes:
sudo apt install proftpd-mod-quotatab -yEdita el fitxer de configuració proftpd.conf:
sudo nano /etc/proftpd/proftpd.confAfegeix 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=1073741824En 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.
DefaultRootLa 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.
DefaultRoot /var/ftp/ftpusuari ftpusuariO per a un grup específic:
DefaultRoot ~ ftpgroupQualsevol usuari que no sigui del grup ftpgroup no quedarà confinat.
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/fitxersI al proftpd.conf:
DefaultRoot /home/ftpusuari/ftp ftpusuari
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.
| 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 |
sudo tail -f /var/log/proftpd/proftpd.log
sudo tail -f /var/log/proftpd/xferlogsudo journalctl -u proftpd -f # Seguiment en temps real
sudo journalctl -u proftpd --since today # Logs d'avui| 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 |
sudo proftpd --configtest| 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) |
| 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 |