Proftpd

De wikilivois
Sauter à la navigation Sauter à la recherche

http://www.proftpd.org

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

  /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


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

#
# 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>


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/

  /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


Les lignes de configurations suivantes permettent aux utilisateurs de se connecter directement dans le répertoite /home/ftp/<utilisateur>.

  /etc/proftpd/proftpd.conf
LDAPHomedirOnDemand       on 750
LDAPForceHomedirOnDemand  on
LDAPHomedirOnDemandPrefix /home/ftp


A partir de proftpd 1.3, les lignes de configurations deviennent :

  /etc/proftpd/proftpd.conf
LDAPGenerateHomedir             on 750
LDAPForceGeneratedHomedir       on
LDAPGenerateHomedirPrefix       /home/ftp


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 « . ».
  /etc/proftpd/proftpd.conf
DefaultRoot ~
DenyFilter \*.*/


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

  /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


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
  • Si la limite est soft, le fichier qui atteint le quota est accepté, les fichiers suivants sont supprimés.
  • Si la limite est hard, le fichier qui atteint le quota est supprimé du serveur.
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

  /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)


Adaptation de la classe posixAccount en rajoutant ftpQuota dans les attributs possibles:

  /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) )


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


  /etc/proftpd/proftpd.conf
ClamAV On
ClamLocalSocket /var/amavis/clamd


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

http://www.phamm.org

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

Tête de GNU 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.