
                      Serveurs FTP virtuels avec wu-ftpd

Winfried Trmper, ( winni@xpilot.org)
avec l'aide de Brian Grossman, ( brian@SoftHome.Net)
Traduit par David Tilloy, ( dav@neuronnexion.fr)

   Version 1.2 - 27 janvier 1997
     _________________________________________________________________

   _Ce document dcrit comment paramtrer les serveurs ftp virtuels._
     _________________________________________________________________

1. Introduction

   Linux offre la possibilit d'excuter plusieurs "serveurs" sur une
   seule machine. De nombreuses personnes se servent dj de cette
   possibilit afin de disposer de plus d'un service WWW sur leur machine
   Linux, e.g.

                www.sharpers.com                (192.168.55.37)
                www.usurers.com                 (192.168.55.38)
                www.swindlers.com               (192.168.55.39)

   apparaissent comme trois machines distinctes, mais ne sont en ralit
   qu'une seule et unique machine Linux assurant ces services.

   La technique utilise derrire cette fonction est appele "multihome"
   et est base sur la capacit de Linux d'assigner plusieurs adresses IP
    une seule interface rseau (carte ethernet ou modem). En fait, vous
   n'avez pas besoin de disposer de plusieurs cartes ethernet pour que
   Linux soit  l'coute de plusieurs addresses/noms sur le rseau. Linux
   manipule les adresses IP additionnelles  l'aide d' "interfaces
   virtuelles" qui reprsentent physiquement le meme matriel, mais sont
   logiquement distingues  l'aide de leurs adresses IP par les
   logiciels (et le noyau).

   Ces interfaces virtuelles sont nommes de manire similaire que
   l'interface relle sur laquelle elles pointent, et ont simplement
   comme suffixe un (plus ou moins) numro arbitraire.

   Le terme propre pour chaque interface virtuelle est "alias ip". Pour
   les hotes virtuels, la commande ifconfig donne la (lourde) sortie:

        interface adresse IP   address de diffusion      masque
        ------------------------------------------------------------
        eth0      192.168.55.37    192.168.55.63     255.255.255.224

        eth0:0    192.168.55.38    192.168.55.63     255.255.255.224
        eth0:1    192.168.55.39    192.168.55.63     255.255.255.224
        eth0:2    192.168.55.40    192.168.55.63     255.255.255.224
        eth0:3    192.168.55.41    192.168.55.63     255.255.255.224
             ^-- numro de l'alias ip

   Pour disposer et utiliser cette facilit des alias ip, vous avez
   besoin d'un "module" pour votre noyau Linux, qui peut etre intrgr
   dans le noyau  la compilation ou charg  la vole par la commande
   (en tant que root):

                insmod ipalias

   La plupart des distributions actuelles distribuent ce module, donc je
   ne passerai pas plus de temps  dcrire comment le crer (note: Si
   vous ne l'avez pas, lisez le document Linux Kernel-HOWTO).

   L'alias ip pour les hotes dfinis ci-dessus ont t cr avec un petit
   script lors du dmarrage:

8<----- couper ici 8<-----
#!/bin/sh

NETMASK="255.255.255.224"      # remplacez par votre masque de rseau
BROADCAST="192.168.55.63"      # remplacez par votre adresse de diffusion
MAIN_IF="eth0"                 # interface "de base"

IPALIASES="192.168.55.38   192.168.55.39   192.168.55.40 \
           192.168.55.41   192.168.55.42   192.168.55.43 \
           192.168.55.44   192.168.55.45   192.168.55.46"

# Vous n'avez plus besoin de modifier quoi que ce soit aprs ce point
i=0
for ALIAS in $IPALIASES
do
    /sbin/ifconfig  ${NETTYPE}:${i}  ${ALIAS} \
                    broadcast ${BROADCAST}  netmask ${NETMASK}
    /sbin/route add -host ${ALIAS} dev ${NETTYPE}:${i}
    i=$[$i+1]
done
8<----- couper ici 8<-----

   Si vous avez d'autres questions  propos des alias ip, consultez le
   document Linux "IP Alias mini-HOWTO" et le fichier
   "Documentation/aliases.txt" dans le rpertoire contenant les sources
   du noyau Linux (gnralement, dans le rpertoire "/usr/src/linux").

2. Services et Serveurs Virtuels

   Si un nom d'hote appartient  une interface virtuelle, c'est ce que
   l'on nomme communment un "hote virtuel". Un dmon qui excute un
   service sur un hote virtuel (ou sur une interface virtuelle) est
   appel "serveur virtuel".

2.1 Serveurs WWW Virtuels

   Nous avons dj donn un exemple de 3 serveurs WWW virtuels
   prcdemment:

                www.sharpers.com, www.usurers.com, www.swindlers.com

   La configuration d'une grande partie de ces dmons http que je
   connaisse (c.f. l'excellente conception du "Roxen Challenger" ou le
   largement rpandu "Apache") pour utiliser ces serveurs virtuels est
   facile, et largement documente. En quelques mots: attachez simplement
   le port www (num 80)  l'interface rseau virtuelle avec l'adresse
   ip/nom dsir pour chaque serveur WWW que vous excutez. Il n'y a
   aucune astuce.

   Lisez le document Linux "Virtual Web mini-HOWTO" si vous dsirez plus
   d'informations sur cette technique.

2.2 Addresses de courrier virtuelles

   Dans le cas le plus simple, vous souhaitez recevoir chaque courrier
   pour tous les hotes virtuels, et pour les domaines concerns:

                www.sharpers.com, www.usurers.com, www.swindlers.com,
                    sharpers.com,     usurers.com,     swindlers.com

   Meme la configuration de "smail" ou de "sendmail" (les dmons qui se
   charge du traffic de courrier sur votre machine Linux) est
   relativement simple: ajoutez les noms/domaines additionnels dans
   "/etc/smail/config" (ajoutez 'hostnames=' et 'domains=')
   respectivement "/etc/mail/sendmail.cw" (un nom de domaine par ligne).

   Pour implmenter un "rel" domaine virtuel  l'aide de smail, regarder
   la FAQ sur smail (smail-FAQ), disponible sur

   http://www.sbay.org/smail-faq.html

2.3 Serveurs ftp virtuels

   Le concept de serveur ftp virtuel n'est pas support par dfaut dans
   les dmons ftp que je connaisse.

   Le trs largement diffus "wu-ftpd" dispose d'un patch ralis par
   Brian Grossman brian@SoftHome.Net pour raliser un service FTP
   distinct du serveur FTP anonyme traditionnel. Vous trouverez des
   prcisions pour rcuprer ce patch dans le chapitre 3.

   Il semble qu'il n'y ait pas d'autres patch disponible pour raliser
   cette opration.

   L'ide gnrale du patch multihote de Brian est de faire oprer 
   wu-ftpd un "chroot()" sur

                REPERTOIRE_DE_BASE_DU_COMPTE_FTP/NOM_D_HOTE_DEMANDE/

   au lieu de juste faire un chroot() sur

                                REPERTOIRE_DE_BASE_DU_COMPTE_FTP/

   Dans l'exemple prsent prcedemment, l'utilisateur qui se connecte
   sur "ftp.swindlers.com" par un compte ftp anonyme est bloqu dans
   "/home/ano-ftp/ftp.swindlers.com/" au lieu de "/home/ano-ftp/". Vous
   pouvez imaginer que la configuration de base est simple et ne diffre
   que trs peu de la configuration d'un serveur anonyme simple.

   Gloire  Brian pour cette stratgie de configuration simple et
   efficace.

   Laissez moi m'assurer que vous disposez de cette version spciale de
   wu-ftp dj compile par vous meme, ou que vous vous etes procur le
   binaire, et laissez moi vous renvoyer pour toute question  la fin de
   ce document.

   Je vais vous donner un exemple de la vie courante, et vous expliquer
   les manipulations que j'ai effectues pour un de mes clients (je n'ai
   chang que le nom de ses machines par des noms fictifs...).

   (a) Crez un rpertoire "/home/ano-ftp" pour les diffrents serveurs
   ftp anonymes.

                mkdir  /home/ano-ftp  &&  cd /home/ano-ftp
                mkdir  ftp.sharpers.com  ftp.usurers.com  ftp.swindlers.com

   Vous obtenez alors comme arborescence:

        /home/ano-ftp/
                  |-- ftp.sharpers.com
                  |-- ftp.swindlers.com
                  `-- ftp.usurers.com

   (b) Copiez les fichiers ncessaires pour un service ftp anonyme depuis
   le rpertoire "/home/ftp" du serveur dj configur dans les
   rpertoires nouvellements crs.

                cd     /home/ano-ftp/ftp.sharpers.com
                cp -a  /home/ftp/* .

                cd     ../ftp.swindlers.com
                cp -a  /home/ftp/* .

                cd     ../ftp.usurers.com
                cp -a  /home/ftp/* .

   N'oubliez pas d'effacer les fichiers superflus du rpertoire "pub/"
   (ou simplement, ne les copiez pas). Par exemple, le rpertoire
   "/home/ftp" de la distribution Debian ressemble  ceci:

        /home/ftp                       Permissions   Propr  Groupe Taille
                |-- bin                 d--x--x--x   2 root   root
                |   |-- gzip            ---x--x--x   1 root   root   45121
                |   |-- ls              ---x--x--x   1 root   root   22945
                |   `-- tar             ---x--x--x   1 root   root   77769
                |
                |-- etc                 d--x--x--x   2 root   root
                |   |-- group           -r--r--r--   1 root   root      18
                |   |-- passwd          -r--r--r--   1 root   root      44
                |   `-- pathmsg         -r--r--r--   1 root   root     172
                |
                |-- lib                 d--x--x--x   2 root   root
                |   |-- ld-linux.so.1   -r-xr-xr-x   1 root   root   21375
                |   |-- libc.so.5.2.18  -rwxr-xr-x   1 root   root  536252
                |   `-- libc.so.5 -> libc.so.5.2.18
                |
                |-- pub                 dr-xr-xr-x   3 root   root
                |   `-- whatever
                |
                `-- welcome.msg         -rw-r--r--   1 root   root     323

   (c) Changez le rpertoire de base du compte ftp anonyme par
   "/home/ano-ftp" en ditant le fichier "/etc/passwd".

        ftp:*:11:11:Anonymous FTP:/home/ano-ftp:/bin/sh
                                  ^^^^^^^^^^^^^
                                rpertoire de base

   Ces trois tapes dcrivent la configuration minimale, et permettent
   dj la sparation des zones ftp pour chacun des 3 hotes virtuels. Mon
   travail actuel tait un peu plus compliqu, puisque j'ai du activer
   les quotas sur les disques (limitant l'espace disque consommable par
   utilisateur/groupe) dans chacun des rpertoires incoming, donc
   l'histoire continue:

   (d) Activez les zones de tlchargement dans le fichier de
   configuration de wu-ftp "/etc/ftpd/ftpaccess"

8<----- couper ici 8<-----
upload  /home/ano-ftp/www.sharpers.de  *         no
upload  /home/ano-ftp/www.sharpers.de  /incoming yes sharpers ftp 0660 nodirs
upload  /home/ano-ftp/www.swindlers.de *         no
upload  /home/ano-ftp/www.swindlers.de /incoming yes swindler ftp 0660 nodirs
upload  /home/ano-ftp/www.usurers.de   *         no
upload  /home/ano-ftp/www.usurers.de   /incoming yes usurers  ftp 0660 nodirs
#                                                |      |      |    |     |
#                    tlchargements autoriss --+      |      |    |     |
#     les fichiers tlchargs appartiennent            |      |    |     |
#                             cet utilisateur ---------+      |    |     |
#                          idem pour le groupe ----------------+    |     |
# droits d'accs pour les fichiers tlchargs ---------------------+     |
#        cration de rpertoires non autorise ---------------------------+
8<----- couper ici 8<-----

   Maintenant, chaque fichier tlcharg sur ce serveur ftp appartient 
   un utilisateur spar, pour qui les quotas peuvent etre activs.

   (e) Configurer les quotas sur les disques.

   Je vous suggre de lire: "/usr/doc/quotas.txt" et le Linux "Quota
   mini-HOWTO".

   * Ajoutez "usrquota=/etc/quota/ano-ftp.users" dans les options de
   montage de la partition "/home/an-ftp" qui se trouve dans
   "/etc/fstab".

   * Crz "/etc/quota/ano-ftp.users"  l'aide de la commande "touch".

   * Activez les quotas par la commande "quotaon"

   * Fixez les quotas avec "edquota swindlers", etc.

   Quotas pour l'utilisateur swindlers:

            /dev/sdb8: blocks in use: 0, limits (soft = 0, hard = 10000)
                       inodes in use: 1, limits (soft = 0, hard = 1000)

   L'espace disque correspondant dpend de la taille en block du systme
   de fichier que vous avez cr (le standard est 1 block = 1 kb).

3. Disponibilit

   Le patch multihote (20kb) pour wu-ftpd peut etre tlcharg depuis

    ftp://ftp.softhome.net/pub/users/brian/multihomed-wu-ftpd-2.4-23.patch

   S'il vous plait, lisez-le pour plus de dtails sur le copyright.

   Les sources de "wu-ftpd" sont disponibles  plusieurs endroits sur le
   net, utilisez archie pour trouver le serveur le plus proche de vous
   mettant  disposition ces sources. Changez le rpertoire ou a t
   dcompress les sources et tapez

            patch < ../multihomed-wu-ftpd-2.4-23.patch

   pour concatner le patch avec les sources. La FAQ sur wu-ftpd est
   disponible  l'adresse

   http://www.hvu.nl/ koos/wu-ftpd-faq.html
