Configurazione di Proftpd

Questa e` una configurazione di proftpd che ho fatto per un cliente.

Lo scopo e` quello di permettere a tanti utenti di uploadare e downloadare files, oguno dalla propria directory. Ogni utente accede solo alla propria directory, all'interno della quale puo` fare cio` che vuole liberamente. Un utente (o piu` di uno) e` amministratore e puo` accedere alle directory di tutti gli utenti, e fare in esse cio` che vuole. Gli utenti sono configurati in un file dedicato allo scopo, e NON sono utenti di sistema.

Volendo e` possibile, giocando con gli alberi delle directory, creare delle sezioni nidificate con amministratori "locali".

La sicurezza fa decisamente schifo (tutti gli utenti accedono al file system con lo stesso UID e GID, e l'unica cosa che impedisce loro di andare a fare casini nelle directory degli altri e` il fatto che sono chrooted dentro la loro home), tuttavia dal momento che FTP trasmette le password in chiaro, direi che abbiamo ben altro di cui preoccuparci per la sicurezza. Certo non consiglierei questo set-up a chi abbia problemi di sicurezza, ma del resto non gli consiglierei nemmeno di usare FTP, quindi...

Installazione

Installare il pacchetto Debian "proftpd"

Verra` creato automaticamente un utente "ftp" con la relativa home, che useremo per contenere i files dei nostri utenti.

Configurazione

La configurazione di questo sistema si basa su due files: il primo e` /etc/proftpd.conf. Le uniche modifiche rispetto al file di configurazione standard di Debian sono nelle ultime righe, quelle con i commenti in italiano, e il fatto che l'utente che fa girare il server ftp non e` "nobody" ma "ftp".

ServerName                      "Debian"
ServerType                      standalone
DeferWelcome                    off

MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on

TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200

DisplayLogin                    welcome.msg
DisplayFirstChdir               .message
ListOptions                     "-l"

DenyFilter                      \*.*/

# Uncomment this if you are using NIS or LDAP to retrieve passwords:
#PersistentPasswd               off

# Uncomment this if you would use TLS module:
#TLSEngine                      on

# Uncomment this if you would use quota module:
#Quotas                         on

# Uncomment this if you would use ratio module:
#Ratios                         on

# Port 21 is the standard FTP port.
Port                            21

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances                    30

# Set the user and group that the server normally runs at.
User                            ftp
Group                           nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask                           022  022
# Normally, we want files to be overwriteable.
AllowOverwrite                  on

# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default.
#DelayEngine                    off

# Autenticazione su file utenti dedicato, niente utenti di sistema
AuthUserFile /etc/proftpd.passwd
AuthOrder mod_auth_file.c

# Chrooted dentro la propria home
DefaultRoot ~

# L'utente non deve avere una shell valida (gli utenti dedicati all'ftp non
# sono utenti di sistema e non hanno una shell valida in ogni caso)
RequireValidShell off

Il secondo file di configurazione e` /etc/proftpd.passwd, che contiene le definizioni degli utenti che devono accedere al server FTP. Questo file non viene editato a mano, ma generato con l'apposito comando ftpasswd.

Creazione degli utenti

Prima di tutto creo un utente "admin" che puo` accedere tutta la struttura dei files sotto /home/ftp.

ftpasswd --passwd --file /etc/proftpd.passwd --gid 65534 --uid 103 --name admin  --shell /bin/true --home /home/ftp/

Poi, per ogni utente "normale" del sistema, devo fare due cose: