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. 11.. IInnttrroodduuccttiioonn 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"). 22.. SSeerrvviicceess eett SSeerrvveeuurrss VViirrttuueellss 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". 22..11.. SSeerrvveeuurrss WWWWWW VViirrttuueellss 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. 22..22.. AAddddrreesssseess ddee ccoouurrrriieerr vviirrttuueelllleess 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 22..33.. SSeerrvveeuurrss ffttpp vviirrttuueellss 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). 33.. DDiissppoonniibbiilliittee 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 .