  Serveurs FTP virtuels avec wu-ftpd
  Winfried Truemper, (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 decrit comment parametrer les serveurs ftp virtuels.

  11..  IInnttrroodduuccttiioonn

  Linux  offre  la  possibilite  d'executer plusieurs "serveurs" sur une
  seule machine. De  nombreuses  personnes  se  servent  deja  de  cette
  possibilite 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  realite
  qu'une seule et unique machine Linux assurant ces services.

  La  technique utilisee derriere cette fonction est appelee "multihome"
  et est basee sur la capacite de Linux d'assigner plusieurs adresses IP
  a  une seule interface reseau (carte ethernet ou modem). En fait, vous
  n'avez pas besoin de disposer de plusieurs cartes  ethernet  pour  que
  Linux  soit  a  l'ecoute  de  plusieurs  addresses/noms sur le reseau.
  Linux manipule les adresses IP additionnelles a l'aide d'  "interfaces
  virtuelles"  qui representent physiquement le meme materiel, mais sont
  logiquement  distinguees  a  l'aide  de  leurs  adresses  IP  par  les
  logiciels (et le noyau).

  Ces  interfaces  virtuelles  sont  nommees  de  maniere  similaire que
  l'interface reelle sur laquelle  elles  pointent,  et  ont  simplement
  comme suffixe un (plus ou moins) numero 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
                    ^-- numero de l'alias ip

  Pour disposer et utiliser cette  facilite  des  alias  ip,  vous  avez
  besoin  d'un  "module"  pour votre noyau Linux, qui peut etre intregre
  dans le noyau a la compilation ou charge a la volee  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 a decrire comment  le  creer  (note:  Si
  vous ne l'avez pas, lisez le document Linux Kernel-HOWTO).

  L'alias ip pour les hotes definis ci-dessus ont ete cree avec un petit
  script lors du demarrage:

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

       NETMASK="255.255.255.224"      # remplacez par votre masque de reseau
       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 apres 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 a propos des alias  ip,  consultez  le
  document    Linux    "IP    Alias    mini-HOWTO"    et    le   fichier
  "Documentation/aliases.txt" dans le repertoire contenant  les  sources
  du noyau Linux (generalement, dans le repertoire "/usr/src/linux").

  22..  SSeerrvviicceess eett SSeerrvveeuurrss VViirrttuueellss

  Si  un  nom  d'hote appartient a une interface virtuelle, c'est ce que
  l'on nomme communement un "hote virtuel".  Un  demon  qui  execute  un
  service  sur  un  hote  virtuel  (ou  sur une interface virtuelle) est
  appele "serveur virtuel".

  22..11..  SSeerrvveeuurrss WWWWWW VViirrttuueellss

  Nous  avons  deja  donne  un  exemple  de  3  serveurs  WWW   virtuels
  precedemment:

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

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

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

  22..22..  AAddddrreesssseess ddee ccoouurrrriieerr vviirrttuueelllleess

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

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

  Meme  la  configuration de "smail" ou de "sendmail" (les demons 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 implementer un "reel" domaine virtuel a l'aide de smail, regarder
  la FAQ sur smail (smail-FAQ), disponible sur

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

  22..33..  SSeerrvveeuurrss ffttpp vviirrttuueellss

  Le  concept  de serveur ftp virtuel n'est pas supporte par defaut dans
  les demons ftp que je connaisse.

  Le tres largement diffuse "wu-ftpd" dispose  d'un  patch  realise  par
  Brian   Grossman  brian@SoftHome.Net  pour  realiser  un  service  FTP
  distinct du serveur FTP  anonyme  traditionnel.   Vous  trouverez  des
  precisions pour recuperer ce patch dans le chapitre 3.

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

  L'idee generale du patch multihote de Brian est de faire operer a  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  presente  precedemment, l'utilisateur qui se connecte
  sur "ftp.swindlers.com" par un compte  ftp  anonyme  est  bloque  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  differe
  que tres peu de la configuration d'un serveur anonyme simple.

  Gloire  a  Brian  pour  cette  strategie  de  configuration  simple et
  efficace.

  Laissez moi m'assurer que vous disposez de cette version  speciale  de
  wu-ftp  deja  compilee par vous meme, ou que vous vous etes procure le
  binaire, et laissez moi vous renvoyer pour toute question a la fin  de
  ce document.

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

  (a)  Creez  un repertoire "/home/ano-ftp" pour les differents 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 necessaires pour un service ftp anonyme depuis
  le   repertoire   "/home/ftp"  du  serveur  deja  configure  dans  les
  repertoires nouvellements crees.

                       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  repertoire  "pub/"
  (ou  simplement,  ne  les  copiez  pas).   Par  exemple, le repertoire
  "/home/ftp" de la distribution Debian ressemble a 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  repertoire  de  base  du  compte  ftp  anonyme   par
  "/home/ano-ftp" en editant le fichier "/etc/passwd".

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

  Ces  trois  etapes  decrivent la configuration minimale, et permettent
  deja la separation des zones ftp pour chacun  des  3  hotes  virtuels.
  Mon  travail  actuel  etait  un  peu  plus  complique, puisque j'ai du
  activer  les  quotas  sur  les  disques  (limitant   l'espace   disque
  consommable   par  utilisateur/groupe)  dans  chacun  des  repertoires
  incoming, donc l'histoire continue:

  (d)  Activez  les  zones  de  telechargement  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
       #                                                |      |      |    |     |
       #                    telechargements autorises --+      |      |    |     |
       #     les fichiers telecharges appartiennent            |      |    |     |
       #                            a cet utilisateur ---------+      |    |     |
       #                          idem pour le groupe ----------------+    |     |
       # droits d'acces pour les fichiers telecharges ---------------------+     |
       #        creation de repertoires non autorisee ---------------------------+
       8<----- couper ici 8<-----

  Maintenant,  chaque fichier telecharge sur ce serveur ftp appartient a
  un utilisateur separe, pour qui les quotas peuvent etre actives.

  (e) Configurer les quotas sur les disques.

  Je vous suggere 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".

  * Creez "/etc/quota/ano-ftp.users" a 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 depend de la taille en block du systeme
  de fichier que vous avez cree (le standard est 1 block = 1 kb).

  33..  DDiissppoonniibbiilliittee

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

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

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

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

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

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

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

