WU-FTPD a mauvaise réputation : de nombreuses failles de sécurité jonchent son histoire. Il n'est pas aussi configurable que ProFTPD.
Par exemple, pour masquer le fait que le serveur FTP est WU-FTPD, je peux utiliser le paramètre greeting terse
qui permet d'avoir un banner réduit au minimum 220 FTP server ready.
mais il se trahit facilement.
telnet ftp.wu-ftpd.org ftp 220 ftp.wu-ftpd.org FTP server ready. ... STAT 211-ftp.wu-ftpd.org FTP server status: Version wu-2.7.0(2) Mon Mar 12 12:30:14 EST 2001 ...
La commande STAT
révèle qu'il s'agit ici de wu-2.7.0(2)
. Je me suis définitivement faché avec WU-FTPD quand il a ignoré superbement la limitation en nombre de connexion que je venais de configurer.
Ce serveur FTP est génial :
Global
On peux placer dans global des options qui se répercuterons sur l'ensemble des serveurs ftp sauf mention contraire ultérieure.
<Global>
AllowOverwrite no
Umask 022
IdentLookups off
ServerIdent Off
DeferWelcome On
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
RequireValidShell yes
# Set the user and group that the server normally runs at.
User nobody
Group nobody
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
ExtendedLog /var/log/ftp.log AUTH
</Global>
L'option AllowOverwrite
permet d'écraser un fichier sans avoir à l'effacer préalablement.
On demande au serveur à ce qu'il n'annonce pas qu'il est un ProFTPDServerIdent Off
, on obtient un bref
220 [hostname] FTP server ready
. Pour éviter d'oublier (sur WU-FTPD, c'est implicite), on peut créer un alias anonymous
vers le compte ftp
dans la section globale.
Dans la section global
, on a définit avec la commande ExtendedLog
que les log liés à l'authentification AUTH
serait enregistré selon le format standard dans le fichier /var/log/ftp.log
et selon un format auth
que l'on aura défini :
#
# Some logging formats
#
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
SyslogFacility AUTH
Il est fortement conseillé de définir un nombre limite de connexions simultanées de façon à éviter les D.O.S., ceci ne fonctionne qu'en mode standalone
, c'est à dire que les connexions ne sont pas transmises par l'intermédiaire d'inetd
ou d'xinetd
mais par ProFTPD directement, ProFTPD est en mode démon.
MaxInstances 30
ServerType standalone
UseReverseDNS off
Définissions un serveur FTP classique
ServerAdmin grenier@cgsecurity.org
# Port 21 is the standard FTP port.
Port 21
ServerName "KMaster"
ServerAdmin grenier@cgsecurity.org
MaxLoginAttempts 2
MaxClients 20
# Normally, we want files to be overwriteable.
AllowOverwrite yes
Ajoutons un compte anonyme avec un répertoire d'upload.
Le compte ftp n'a pas de shell valide, on utilise RequireValidShell
à no
pour permettre la connexion.
Ensuite, on utilise des LIMIT
similaires à Apache pour interdire l'écriture sur la totalité avec une exception pour le répertoire uploads
où les fichiers peuvent être ajouté mais pas lu et où aucun sous-répertoire ne peut créée. Ainsi, même si les permissions unix des fichiers sont laxistes, les LIMIT
vont renforcer la sécurité.
<Anonymous ~ftp>
RequireValidShell no
# Maximum clients with message
MaxClients 5 "Sorry, max %m users -- try again later"
User ftp
Group ftp
# Allow logins if they are disabled above.
<Limit LOGIN>
AllowAll
</Limit>
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
<Directory uploads/*>
<Limit READ>
DenyAll
</Limit>
<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>
Pour isoler les utilisateurs, il suffit des les chrooter dans leurs home directory respectifs.
WU-FTPD oblige à à placer un binaire /bin/ls
dans chaque compte chrooté.
Or, en plus d'être lourd à mettre en place (Ok, cela peut être fait avec un script), la possibilité de récupérer des binaires permet de découvrir l'architecture sous laquelle fonctionne le serveur et donc d'utiliser des exploits adaptées à la plate-forme. L'option get ls: server said: /bin/ls is marked unretrievable
.
ProFTPD intègre la commande ls et on peut restreindre facilement la racine au répertoire personnel de chaque utilisateur avec un DefaultRoot ~
.
Installer un client NIS sur ce serveur ne me semblait pas une bonne idée, ses utilisateurs ne doivent pas recevoir de mail, pas faire de ssh et en fait, n'avoir aucune existence en dehors du ftp.
Il est possible de spécifier le fichier de mot de passe de son choix AuthUserFile /etc/proftpd.passwd
.
WU-FTPD dispose d'un paramètre passwd
et shadow
mais je n'ai pas réussi à le faire fonctionner.
Il n'y a pas besoin de faire tourner un client NIS, le programme ypx
permettant de récupérer le fichier de mots de passe, dans
lequel l'administrateur n'a plus qu'à enlever les comptes des personnes ne pouvant accéder au serveur ftp.
Contrairement aux serveurs web, le seul moyen de distinguer différents serveurs est de leur attribuer différentes adresses IP. Dans l'exemple ci-dessous, le serveur FTP virtuel VirtualHost
utilise l'adresse IP interne 10.0.1.227.
<VirtualHost 10.0.1.227>
ServerName "perso"
ServerAdmin grenier@cgsecurity.org
AuthUserFile /etc/proftpd.passwd
MaxLoginAttempts 2
RequireValidShell no
MaxClients 20
DefaultRoot ~
AllowOverwrite yes
<Directory ~>
<Limit WRITE STOR RNFR DELE>
Order Allow,Deny
Deny ALL
</Limit>
</Directory>
<Directory ~/public_html>
<Limit WRITE STOR RNFR DELE>
AllowAll
</Limit>
</Directory>
</VirtualHost>
ProFTPD s'adapte facilement aux besoins de sécurités de chacun que ce soit par la facilité de chrooter les comptes ou au niveau de la personalisation de ses fichiers de log. Le protocole FTP n'offre pas la confidentialitée des données echangés et lors de l'identification, login et password circulent en clair. Pour ceux que cela préoccupe, utiliser plutôt des solutions comme scp/sftp venant avec OpenSSH.