1. Fichier de configuration
    1. Exemple
    2. Explications
    3. Mise à jour de 1.2 en 1.3
  2. Fonctions avancées
    1. Lier des répertoires
    2. Gestion de blacklistes
  3. Pour les utilisateurs de gproftp
  4. Interface graphique simplifiée

Fichier de configuration

Exemple

Voici un exemple de config de ProFTPd pour le CRANS. On ne crée pas d'utilisateur spécial "crans", ce qui évite les problèmes de sécu avec ces utilisateurs supplémentaires.

  • Dans le fichier : /etc/proftpd.conf

    • ServerName                      "Lucas"
      ServerType                      standalone
      DeferWelcome                    off
      
      MultilineRFC2228                on
      DefaultServer                   on
      ShowSymlinks                    on
      AllowOverwrite                  on
      
      TimeoutNoTransfer               600
      TimeoutStalled                  600
      TimeoutIdle                     1200
      
      DisplayLogin                    welcome.msg
      DisplayFirstChdir               .message
      ListOptions                     "-l"
      
      DenyFilter                      \*.*/
      
      TransferLog                     /var/log/xferlog
      
      # Uncomment this if you are using NIS or LDAP to retrieve passwords:
      #PersistentPasswd               off
      
      # 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
      
      AuthUserFile /etc/proftpd.users
      AuthOrder mod_auth_file.c
      
      <Anonymous /global/ftp>
       AnonRequirePassword on
       User crans
       Group nogroup
       RequireValidShell off
       
       DirFakeUser On nobody
       DirFakeGroup On nobody
       DirFakeMode 0444
       
       MaxClients 4
       MaxClientsPerHost 2
      
       <Limit LOGIN>
         Order deny,allow
         Deny from xxxxx.crans.org # Mass downloading
         Allow from 127.0.0.
         Allow from 10.0.0.
         Allow from 138.231.136.
         Allow from 138.231.137.
         Allow from 138.231.138.
         Allow from 138.231.139.
         Allow from 138.231.140.
         Allow from 138.231.141.
         Allow from 138.231.142.
         Allow from 138.231.143.
         Allow from 138.231.149.
         Allow from 138.231.150.
         Allow from 138.231.151.
       </Limit>
       
      TransferRate RETR 3000:2000  # Pas nécessaire à moins de savoir ce que l'on fait
      TransferRate STOR 6000:4000
      
       <Directory *>
         HideUser                            root # cache les fichiers de root
         HideFiles                           lost\+found  # cache les répertoires nommés lost+found
         <Limit WRITE>
           DenyAll
         </Limit>
       </Directory>
      
       <Directory upload>
         Umask                                222  022
         <Limit READ WRITE>
            DenyAll
         </Limit>
         <Limit STOR>
            AllowAll
         </Limit>
       </Directory>
      
       DisplayLogin                   welcome.msg
       DisplayFirstChdir              .message
       
      </Anonymous>
      

Explications

  • Il faut changer le hostname.

  • Je fais tourner le mien en standalone, ceux qui utilisent inetd doivent adapter ici (en standalone, c'est mieux). Ensuite, il y a un répertoire d'upload : il faut que l'utilisateur ftp ait le droit d'écrire dedans. Il y a également une limite de débit à 3 Mo/s (TransferRate). J'ai également mis un exemple de Deny pour empêcher quelqu'un de se connecter.

  • Il ne faut pas oublier de créer l'utilisateur ftp avec pour shell /bin/false :

    • Dans le fichier : /etc/shell. (pour les nuls : $sudo gedit /etc/shell et rajouter /bin/false a la fin)

  • Il faut ensuite le désactiver : mettre une "*" à la place du mot de passe dans /etc/shadow

    • (Donc pour les nuls : $sudo gedit /etc/shadow)

  • Il faut adapter la racine du FTP : ici /global/ftp.

  • Enfin, il faut aussi le fichier /etc/proftpd.users qui contient ceci :

    • crans:Vy6tXHVKNbaPY:502:65534::/dev/null:/bin/false
      

      Il s'agit du mot de passe "normal". Il faut remplacer 502 par l'id de l'utilisateur ftp (id ftp pour le savoir). On peut rajouter d'autres utilisateurs pour par exemple faire un ftp ClubEnsanime. On peut créer le mot de passe avec la commande

      htpasswd -nb login mdp
      
      qui renvoie en réponse login:mdp_codé.

Mise à jour de 1.2 en 1.3

  • Dans le cas de proftpd 1.3 ou plus récent sous Debian, il tente de faire de l'IPv6. Du coup, pour qu'il comprenne la limitation sur les adresses IP, il faut coller ::ffff: devant chacune d'entre elles : ::ffff:138.231.137. par exemple.

    • Pas eu besoin pour ma part. -- WikiMo² 2006-06-07 08:32:52 Mais je fais pas de test global comme toi, je me base sur les ips dans DNS qui sont écrites en IPv4 dans ma conf et ça passe.

  • Pour ma part, cela a été corrigé en suivant les étapes suivantes : (-- WikiMo² 2006-06-07 08:32:52)

    1. ajouter le nom de ma machine en face de ::1 dans /etc/hosts

    2. modifier la conf en remplaçant MaxClientsPerHost par MaxConnectionsPerHost. Le test a lieu ainsi en amont de l'authentification

    3. déplacer les fichiers dans /etc/proftpd et changer la conf en conséquence

Fonctions avancées

Lier des répertoires

Proftpd ne gère pas les liens symboliques. Il faut monter, dans le home choisi pour le login, le dossier que l'on veut lier.

Par exemple, prenons un login crans, dont le home serait /home/ftp/crans. Alors il faut monter des dossiers dans ce dossier, par la commande mount --bind /chemin /home/ftp/crans/rep.

On peut bien sûr monter ces partitions au démarrage par /etc/fstab. Cependant, si un espace se trouve dans les noms de répertoire, ce n'est plus possible. Le mieux est alors de faire un script lancé en root au démarrage. Par exemple, dans /etc/init.d/proftpd_montage.sh (écrire en root), mettez :

#! /bin/sh
mount --bind /chemin /home/ftp/crans/rep

et mettez-en autant que vous le voulez.

Rendez-le exécutable en tapant en root

chmod 755 /etc/init.d/proftpd_montage.sh

Ensuite, pour que ce soit lancé au démarrage, il faut un lien dans /etc/rc2.d. Regardez et cherchez Sxxproftpd, où xx est un nombre à deux chiffres. Chez moi, c'est 50. Alors j'ai tapé

ln -s /etc/init.d/proftpd_montage.sh /etc/rc2.d/S50proftpd_montage

Pensez à créer bien sûr les répertoires où sont effectués les montages, sinon ça ne marchera pas... (/home/ftp/login/rep).

Pour que cela fonctionne sans redémarrer, vous pouvez lancer le script à la main, puis relancer proftpd par (en root)  /etc/init.d/./proftpd_montage.sh && /etc/init.d/proftpd restart .

Gestion de blacklistes

/!\ Ce qui suit est assez primaire et demande un peu de connaissance et n'est pas vraiment documenté. Il n'y a pas de licence spécifiée (mais c'est GPLv2) et aucun commentaire pour le moment.

Pour se faciliter un peu la tache et gérer les connexions, on peut utiliser/adapter le script suivant : generate_conf.py associé à la configuration proftpd-save.conf

Pour la gestion des téléchargements et des différentes blacklistes, il faut créer une base de données dont le schéma est : schema_ftp.sql

Pour les utilisateurs de gproftp

Une petite astuce pour utiliser un mot de passe de moins de 6 caractères (prenons zamok comme exemple). Dans l'onglet utilisateurs, utilisez un mot de passe quelconque. Puis ouvrez le gestionnaire d'utilisateurs (système (>) gestionnaire d'utilisateurs) et modifiez le mot de passe de l'utilisateur crée par gproftp.

Interface graphique simplifiée

Pour ceux qui ont peur de se lancer dans la ligne de commande ou qui ont peur de gproftpd, il existe une interface graphique très simplifiée qui réalise les actions des lignes de commandes décrites ci-dessus.
Il suffit de télécharger le fichier :

GCransProftpd.py

Et de l'exécuter (en root) en se mettant dans le même répertoire :

sudo python GCransProftpd.py

Les informations préremplies devraient être correctes, il ne reste plus qu'à choisir les répertoires que l'on veut partager.


CatégoriePagePublique