De wikilivois
Révision datée du 28 mai 2012 à 20:31 par Christophe (discussion | contributions) (1 version)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Configuration & Fonctionnalités

Fonctionnalités Solution
Serveur FTP proftpd
Domaines Virutels TODO
Authentification LDAP mod_ldap
Quota mod_quotatab
Sécurisation mod-shaper

Package Gentoo: proftpd +softquota

La liste de directives de configuration se trouvent à l'adresse:

Configuration standard

ServerName              ""
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

IdentLookups off
UseReverseDNS off

Default Root

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
DefaultRoot ~ !staff
DefaultRoot /u2/allweb staff

Domaines Virtuels (TODO)

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

LDAPDNInfo              "cn=postmaster,,o=hebergement,dc=livois,dc=com" "postmaster"
LDAPServer              localhost
LDAPDoAuth              on,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>.

LDAPHomedirOnDemand       on 750
LDAPForceHomedirOnDemand  on
LDAPHomedirOnDemandPrefix /home/ftp

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

LDAPGenerateHomedir             on 750
LDAPForceGeneratedHomedir       on
LDAPGenerateHomedirPrefix       /home/ftp


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

Contrôle et répartition des accès (TODO)

mod_shaper -


Remarque Gentoo : Pour utiliser les quota avec proftpd, il faut compiler proftpd avec la variable use softquota, par exemple dans /usr/portage/package.use

QuotaEngine  on
QuotaLimitTable ldap:
LDAPDoQuotaLookups on ",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:
#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

attributetype ( NAME 'ftpQuota'
        DESC 'ftpQuota pour Proftpd'
        EQUALITY caseIgnoreIA5Match
        SUBSTR caseIgnoreIA5SubstringsMatch

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

objectclass ( 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

Le module clamav doit être compilé :

#proftpd -l 
Compiled-in modules:

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.


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- 2m44s  idle
15303 U laurence ATuileries-153-1-86- 1m3s   STOR Toussaint 2006 027.jpg
15304 U laurence ATuileries-153-1-86- 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: []
       server: (
       location: /
15303 laurence [ 5m35s]   0m7s idle
       client: []
       server: (
       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

Attention: ce module n'est pas compilé par défaut.


Packages Gentoo

Package D Fichiers de configuration
proftpd *


© 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.