FTP (File Transfer Protocol) és un protocol de xarxa per transferència de fitxers entre diferents sistemes, basat en l'arquitectura client-servidor. Des d'un equip client es pot connectar a un servidor per descarregar arxius des d'ell o bé per enviar-li arxius, independentement del sistema operatiu utilitzat a cada equip.
Un servidor FTP és un programa que s'executa en un servidor. La seva funció és permetre l'intercanvi de dades entre diferents servidors i/o ordinadors.
Sovint, els servidors FTP no es troben als ordinadors personals, per tant un usuari utilitzarà el FTP per connectar-se remotament a un servidor i així intercanviar informació amb ell.
A continuació es mostra el contigunt del fitxer de configuració del servidor FTP. Aquest fitxer consta de dues parts: la configuració general del servidor i la configuració dels hosts virtuals.
Include <path>/modules.conf
ServerType standalone
UseIPv6 off
Port 0
MaxInstances 30
MultilineRFC2228 on
SocketBindTight on
SystemLog <path>
<IfModule mod_tls.c>
TLSProtocol SSLv23
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine on
ControlsMaxClients 2
ControlsLog <path>
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine on
</IfModule>
La directiva Port 0 te associat el valor 0, per indicar al servidor que més avall hi ha definit un host virtual al port per defecte (port 21).
<VirtualHost sermn.uab.cat>
ServerName "sermn.uab.cat"
DeferWelcome off
<Limit WRITE>
DenyAll
</Limit>
Port 21
Umask 022
AuthPAM off
DefaultServer on
User nobody
Group nogroup
ExtendedLog <path> AUTH
DefaultRoot ~
IdentLookups off
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
RootLogin off
MaxLoginAttempts 3
RequireValidShell off
DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions "-l"
DenyFilter \*.*/
TransferLog <path>/<file>
MaxClientsPerHost 2
MaxClientsPerUser 2
MaxClients 0 "Full Server"
DirFakeGroup on ftp
DirFakeUser on ftp
DirFakeMode 0000
<Directory />
AllowOverwrite on
AllowRetrieveRestart on
</Directory>
<IfModule mod_quota.c>
QuotaEngine on
</IfModule>
<IfModule mod_ratio.c>
Ratios on
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
</VirtualHost>
Proftpd només soporta hosts virtuals amb IPs diferents però soporta hosts virtuals amb la mateixa IP connectats a ports diferents. Si es volen definir més hosts virtuals, cal canviar el port que rep les connexins dels usuaris i la directiva DefaultServer ha de estar en off. La resta dependran del la propia configuració del servidor virtual.
Per poder crear usuraris virtuals per al servidor FTP, s'ha creat una base de dades que conté la informació del usuaris del FTP amb la següent estrucura:
| Camp | Tipus | Atributs | Nul | Predeterminat | Extra |
|---|---|---|---|---|---|
| id | int(10) | UNSIGNED | No | auto_increment | |
| username | varchar(32) | No | |||
| password | varchar(100) | No | |||
| uid | smallint(6) | Sí | 32767 | ||
| gid | smallint(6) | Sí | 32767 | ||
| homedir | varchar(100) | No | /var/www/proftpd/default | ||
| shell | varchar(50) | Sí | /sbin/nologin | ||
| actiu | tinyint(4) | Sí | 1 | ||
| group | int(10) | UNSIGNED | No | 1 | |
| count | int(11) | UNSIGNED | No | 0 | |
| accessed | datetime | No | 0000-00-00 00:00:00 |
Per configurar el nostre servidor, avanç de res cal instalar el modul proftpd_mysql. Desprès es configurarà el servidor.
Aquest és el contingut afegit (dins la directiva del virtual host) al fitxer de configuració per gestionar els usuaris de la base de dades:
# Autentificacion bbdd mysql AuthOrder mod_sql.c SQLBackend mysql SQLAuthTypes Backend SQLAuthenticate users SQLConnectInfo <dbname>@localhost <dbuser> <password> SQLDefaultGID 32767 SQLDefaultUID 32767 SQLMinID 500 SQLUserInfo users username password uid gid homedir shell SQLUserWhereClause "actiu=1" SQLHomedirOnDemand on # Acutalització de la base de dades SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE username='%u'" users
Cal destacar la comanda AuthOrder mod_sql.c que limita només connexions dels usuaris definits a una base de dades.
Un problema de FTP és que està pensat per oferir la màxima velocitat en la connexió, però no la màxima seguretat, ja que tot l'intercanvi d'informació (login i password de l'usuari al servidor, i la transferència de qualsevol arxiu), es realitza en text pla sense cap tipus de xifrat.
Per configurar el nostre servidor amb connexions xifrades, cal generar un certificat RSA amb les calus publiques i privades. Desprès es configurarà el servidor.
Aquest és el contingut afegit (dins la directiva del virtual host) al fitxer de configuració per gestionar connexions amb el protocol SSL/TLS:
#Configuracio SSL
<IfModule mod_tls.c>
TLSEngine on
TLSRequired on
TLSLog <path>
TLSRSACertificateFile <path>
TLSRSACertificateKeyFile <path>
TLSVerifyClient off
TLSOptions NoCertRequest
TLSRenegotiate required off
</IfModule>
La directiva TLSRequired on especifica que totes les connexions han d'anar xifrades. Per tant sera necessari connectar-se al servidor amb un client que suporti connexions FTPS.
Cal especificar quins mòduls a he carregar el nostres servidor per a poder dur a terme totes les tasque. Com podem observar, la primera línia del nostre fitxer de configuració ens está indicant que cal incloure el fitxer modules.conf el qual conte aquesta informació. El contigut d'aquest fitxer a de ser com el següent:
ModulePath /usr/lib/proftpd ModuleControlsACLs insmod,rmmod allow user root ModuleControlsACLs lsmod allow user * LoadModule mod_ctrls_admin.c LoadModule mod_tls.c LoadModule mod_sql.c LoadModule mod_ldap.c LoadModule mod_sql_mysql.c LoadModule mod_quotatab.c LoadModule mod_quotatab_file.c LoadModule mod_quotatab_ldap.c LoadModule mod_quotatab_sql.c LoadModule mod_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c LoadModule mod_ifsession.c
Llistat de directives disponibles per al fitxer de configuració