Proftpd
Configuration & Fonctionnalités
Fonctionnalités | Solution |
---|---|
Serveur FTP | proftpd |
Domaines Virutels | TODO |
Authentification LDAP | mod_ldap |
Quota | mod_quotatab mod_quotatab_file mod_quotatab_ldap |
Sécurisation | mod-shaper mod_tls |
Package Gentoo: proftpd +softquota
La liste de directives de configuration se trouvent à l'adresse: http://www.proftpd.org/docs/directives/configuration_full.html
Configuration standard
<licode file=/etc/proftpd/proftpd.conf> ServerName "ftp.livois.com" ServerType standalone DefaultServer on RequireValidShell off
- AuthPAM off
- AuthPAMConfig ftp
- Port 21 is the standard FTP port.
Port 21
- Umask 022 is a good standard umask to prevent new dirs and files
- from being group and world writable.
Umask 022
- 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 5
- Set the user and group under which the server will run.
User ftp Group ftp
- Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>
IdentLookups off UseReverseDNS off </licode>
Default Root
http://www.proftpd.org/localsite/Userguide/linked/chroot.html
There are situations where different classes of user should be limited in different ways. For example, developers working on a site should only be able to see the section they are responsible for, whereas the sysadmins and supervisors need to have a wider view on the server. This can be acomplished either by setting the $HOME of each user to the location on the disk which is most appropriate, or more commonly by using system groups.
Example 9-3. DefaultRoot, modified by system group <licode>
- A more complex setup where all users are locked into
- their home except those in group 'staff' who are
- locked into /u2/allweb
<VirtualHost myhost.mynet.foo> DefaultRoot ~ !staff DefaultRoot /u2/allweb staff </VirtualHost> </licode>
Domaines Virtuels (TODO)
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Vhost.html
- The bottom line is that ProFTPD does not support name-based virtual hosts; not because they are not implemented, but simply because the protocol itself does not support them.
- The only work around at this time is to use a different primary port for each virtual if more than one per IP is required.
La solution serait peut être de mettre un proxy en frontal (frox? ou squid?)
Authentification LDAP
http://horde.net/~jwm/software/mod_ldap/
<licode file=/etc/proftpd/proftpd.conf> LDAPDNInfo "cn=postmaster,vd=livois.com,o=hebergement,dc=livois,dc=com" "postmaster" LDAPServer localhost LDAPDoAuth on vd=livois.com,o=hebergement,dc=livois,dc=com uid=%v LDAPDefaultGID 100 </licode>
Les lignes de configurations suivantes permettent aux utilisateurs de se connecter directement dans le répertoite /home/ftp/<utilisateur>.
<licode file=/etc/proftpd/proftpd.conf> LDAPHomedirOnDemand on 750 LDAPForceHomedirOnDemand on LDAPHomedirOnDemandPrefix /home/ftp </licode>
A partir de proftpd 1.3, les lignes de configurations deviennent : <licode file=/etc/proftpd/proftpd.conf> LDAPGenerateHomedir on 750 LDAPForceGeneratedHomedir on LDAPGenerateHomedirPrefix /home/ftp </licode>
Sécurisation
de base
- Par défaut, root ne peut pas se connecter au serveur FTP. Pour configurer le serveur autrement, il faut se tourner vers la directive RootLogin.
- Pour empêcher les utilisateurs de se ballader dans l'arborescence du serveur, il est possible de limiter l'accès à la racine du serveur avec la directive DefaultRoot. Les utilisateurs n'ont pas non plus à jouer avec le « . ».
<licode file=/etc/proftpd/proftpd.conf> DefaultRoot ~ DenyFilter \*.*/ </licode>
Contrôle et répartition des accès (TODO)
mod_shaper - http://www.castaglia.org/proftpd/modules/mod_shaper.html
Quota
Remarque Gentoo : Pour utiliser les quota avec proftpd, il faut compiler proftpd avec la variable use softquota, par exemple dans /usr/portage/package.use
http://www.castaglia.org/proftpd/modules/mod_quotatab.html
http://www.castaglia.org/proftpd/#Modules
<licode file=/etc/proftpd.conf> QuotaEngine on QuotaLimitTable ldap: LDAPDoQuotaLookups on "vd=livois.com,o=hebergement,dc=livois,dc=com" "(&(uid=%v)(objectclass=posixAccount))"
- QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab QuotaDisplayUnits Mb QuotaShowQuotas on QuotaLog /var/log/proftpd/quota.log </licode>
Ce module s'appuie sur 2 « bases » de données:
- les données « tally » comptabilise la taille des fichiers envoyés ou téléchargés
- les données « limit » sont les quota à ne pas atteindre
Créer le fichier « tally »:
- télécharger ftpquota:
#wget http://www.castaglia.org/proftpd/contrib/ftpquota #cp ftpquota /usr/bin
- créer le fichier
#ftpquota --verbose --create-table --type tally --table-path /etc/proftpd/ftpquota.tallytab
Les informations de quota sont à mettre en une seule ligne pour l'attribut « ftpQuota »
Variables | Valeurs possibles | Explications |
---|---|---|
per_session | true/false | Définit si le quota se limit à la session |
limit_type | hard/soft |
|
bytes_in_avail, | entier ou null | Quota d'upload en octets |
bytes_out_avail, | entier ou null | Quota de download en octets |
bytes_xfer_avail, | entier ou null | Quota de transfert (download+upload) en octets |
files_in_avail, | entier ou null | Quota d'upload en nombre de fichiers |
files_out_avail, | entier ou null | Quota de download en nombre de fichiers |
files_xfer_avail, | entier ou null | Quota de transfert (Download+ Upload) en nombre de fichiers |
Exemple de valeur attribut ftpQuota pour limiter l'upload d'un utilisateur à 10Mb: false,hard,10485760,,,,,
Rajout de l'attribut ftpQuota dans le schema ldap nis
<licode file=/etc/openldap/schema/nis.schema>
attributetype ( 1.3.6.1.1.1.1.28 NAME 'ftpQuota'
DESC 'ftpQuota pour Proftpd' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)
</licode>
Adaptation de la classe posixAccount en rajoutant ftpQuota dans les attributs possibles: <licode file=/etc/openldap/schema/nis.schema> objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes' MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description $ ftpQuota) )
</licode>
Antivirus avec Clamav
http://www.thrallingpenguin.com/resources/mod_clamav.htm
Le module clamav doit être compilé :
#proftpd -l
Compiled-in modules: ... mod_clamav.c
<licode file=/etc/proftpd/proftpd.conf>
ClamAV On
ClamLocalSocket /var/amavis/clamd
</licode>
NOTE: It is highly recommended to send a HUP signal to the parent ProFTPD process after executing freshclam. This causes the parent process to read the newest AV updates, which automatically gives new child processes the latest updates. If this isn't done, the child processes will always read the latest updates available upon their startup. This will effect the performace of the FTP server, as each new connecting client must read the latest AV updates.
Administration
module phamm - TODO
Commandes diverses
Visualiser les connexions en cours
ftptop -v
ftptop/0.9: Sat Nov 18 16:18:05 2006, up for 41 days, 33 min 3 Total FTP Sessions: 0 downloading, 2 uploading, 1 idle . PID S USER CLIENT SERVER TIME COMMAND 13380 I laurence ATuileries-153-1-86- 192.168.10.1:21 2m44s idle . 15303 U laurence ATuileries-153-1-86- 192.168.10.1:21 1m3s STOR Toussaint 2006 027.jpg . 15304 U laurence ATuileries-153-1-86- 192.168.10.1:21 0m54s STOR Toussaint 2006 026.jpg
Visualiser les utilisateurs connectés
ftpwho -v
standalone FTP daemon [6408], up for 41 days, 38 min 17251 laurence [ 1m52s] 0m7s idle client: ATuileries-153-1-86-43.w83-202.abo.wanadoo.fr [83.202.105.43] server: 192.168.10.1:21 (ftp.livois.com) location: / . 15303 laurence [ 5m35s] 0m7s idle client: ATuileries-153-1-86-43.w83-202.abo.wanadoo.fr [83.202.105.43] server: 192.168.10.1:21 (ftp.livois.com) location: / . Service class - 2 users
Arrêter les connexions en cours
- Arrêter
#ftpshut now
- Redémarrer
#ftpshut -R
Remarque: Le serveur proftpd doit être en mode standalone et non inetd.
Il est aussi possible de stopper les connexions par utilisateur avec la commande
#ftpdctl kick utilisateur
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Controls.html
http://www.castaglia.org/proftpd/modules/mod_ctrls_admin.html
Attention: ce module n'est pas compilé par défaut.
Annexes
Packages Gentoo
Package | D | Fichiers de configuration |
---|---|---|
proftpd | * |
/etc/proftpd/proftpd.conf /usr/bin/ftpquota /etc/proftpd/ftpquota.limittab /etc/proftpd/ftpquota.tallytab |
Copyright
© 2006 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |