Page 1 sur 7 PureFTPd Pacôme Massol Néotech III Cité scolaire du Butor, Sainte-Clotilde Copyright 2003 Néotech III La reproduction exacte et la distribution intégrale de ce document sont permises sur n'importe quel support d'archivage, pourvu que cette notice soit préservée. Historique des versions Version 0.10 27 octobre 2003 PM Création du document. Version 0.11 30 octobre 2003 PM Ajout d'un lien vers la version PDF. 1. Introduction 1.1. Le modèle FTP 1.2. Les commandes FTP 1.3. Les réponses FTP 2. Installation 2.1. Compilation 2.2. Utilisateur FTP 2.3. Utilisateurs virtuels 2.4. Lancement du serveur 3. Les serveurs virtuels 4. Surveillance 5. Exercices 6. Lectures conseillées Résumé Dans ce chapitre, nous allons présenter l'installation du serveur FTP PureFTPd. Pour me joindre : <pacome.massol@laposte.net> Ce fichier existe également au format PDF. 1. Introduction Le protocole FTP (File Transfer Protocol) est un protocole de transfert de fichiers. La mise en oeuvre de ce protocole date de 1971, lorsque un mécanisme de transfert de fichiers entre les machines du MIT (Massaschussetts Institute of Technology) a été mis au point. Par la suite, de nombreuses améliorations ont été apportées. Actuellement, le protocole FTP est défini dans le RFC 959. 1.1. Le modèle FTP
Page 2 sur 7 Le protocole FTP s'inscrit dans un modèle client-serveur. Une machine envoie des ordres (le client) que l'autre (le serveur) attend pour effectuer des actions (le serveur). Lors d'une connexion FTP, deux canaux de transmission sont ouverts : un canal pour les commandes (canal de contrôle sur le port TCP 20); un canal pour les données (sur le port TCP 21). Figure 1. Architecture de FTP Ainsi, le client comme le serveur exécutent chacun un processus pour gérer ces deux types d'information : le DTP (Data Transfer Process) est le processus chargé d'établir la connexion et de gérer le canal de données ; le PI (Protocol Interpreter) est l'interpréteur de protocole permettant de commander le DTP à l'aide de commandes reçues sur le canal de contrôle. Il est différent sur le client et sur le serveur : Le SERVER-PI est chargé d'écouter les commandes provenant d'un USER-PI sur le canal de contrôle sur un port donné, d'établir la connexion pour le canal de contrôle, de recevoir sur celui-ci les commandes FTP de l'user-pi, d'y répondre et de piloter le SERVER-DTP ; Le USER-PI est chargé d'établir la connexion avec le serveur FTP, d'envoyer les commandes FTP, de recevoir les réponses du SERVER-PI et de contrôler le USER-DTP si besoin. Lors de la connexion d'un client FTP à un serveur FTP, le USER-PI initie la connexion. Le client envoie des commandes FTP au serveur, ce dernier les interprète, pilote son DTP, puis renvoie une réponse. Lorsque la connexion est établie, le serveur-pi donne le port sur lequel les données seront envoyées au Client DTP. Le client DTP écoute alors sur le port spécifié, les données en provenance du serveur. 1.2. Les commandes FTP Toutes les commandes passées sur le canal de contrôle sont au format ASCII. Les commandes FTP permettent de préciser : le port utilisé ;
Page 3 sur 7 le mode de transfert des données ; la structure des données ; la nature de l'action à effectuer (Retrieve, List, Store,...). Le tableau ci-dessous résume les principales commandes FTP : Tableau 1. Quelques commandes FTP USER PASS CWD CDUP QUIT PORT PASV RETR STOR Chaîne de caractères identifiant l'utilisateur. Cette identification est nécessaire pour établir une communication sur le canal de données. Chaîne de caractères spécifiant le mot de passe de l'utilisateur. Cette commande doit suivre immédiatement la commande USER. Il revient au client de masquer l'affichage de cette commande pour des raisons de sécurité. Change Working Directory : cette commande permet de changer le répertoire courant. Cette commande nécessite le chemin d'accès au répertoire à atteindre comme argument. Change to Parent Directory : cette commande permet de remonter au répertoire parent. Commande permettant de terminer la session en cours. Le serveur attend de finir le transfert en cours le cas échéant, puis fournit une réponse avant de fermer la connexion. Chaîne de caractères indiquant le numéro de port à utiliser. Commande permettant d'indiquer au serveur DTP de se mettre en attente d'une connexion sur un port spécifique choisi aléatoirement parmi les ports disponibles. La réponse à cette commande est l'adresse IP de la machine et le port. Cette commande (RETRIEVE) demande au serveur DTP une copie du fichier dont le chemin d'accès est passé en paramètre. Cette commande (STORE) demande au serveur DTP d'accepter les données envoyées sur le canal de données et de les stocker dans le fichier portant le nom passé en paramètre. Si le fichier n'existe pas, le serveur le crée, sinon il l'écrase. 1.3. Les réponses FTP Les réponses FTP permettent d'assurer la synchronisation entre client et serveur FTP. Ainsi, à chaque commande envoyée par le client, le serveur effectuera éventuellement une action et renverra systématiquement une réponse. Les réponses sont constituées d'un code à 3 chiffres indiquant la façon suivant laquelle la commande envoyée par le client a été traitée. Toutefois, ce code à 3 chiffres étant difficilement lisible par un humain, il est accompagné d'un texte (chaîne de caractères séparée du code numérique par un espace). Les codes de réponse sont constitués de 3 chiffres dont voici les significations : le premier chiffre indique le statut de la réponse (succès ou échec) ; le second chiffre indique la référence de la réponse ; le troisième chiffre donne une signification plus spécifique (relative à chaque deuxième chiffre). Tableau 2. Codes des réponses FTP
Page 4 sur 7 1yz 2yz 3yz 4yz 5yz x0z x1z Réponse préliminaire positive Réponse positive de réalisation Réponse intermédiaire positive Réponse négative de réalisation Réponse négative permanent Syntaxe Information L'action demandée est en cours de réalisation, une seconde réponse doit être obtenue avant d'envoyer une deuxième commande. L'action demandée a été réalisée, une nouvelle commande peut être envoyée. L'action demandée est temporairement suspendue. Des informations supplémentaires sont attendues de la part du client. L'action demandée n'a pas eu lieu car la commande n'a temporairement pas été acceptée. Le client est prié de réessayer ultérieurement. L'action demandée n'a pas eu lieu car la commande n'a pas été acceptée. Le client est prié de formuler une requête différente. L'action possède une erreur de syntaxe, ou bien il s'agit d'une commande non comprise par le serveur. Il s'agit d'une réponse renvoyant des informations (par exemple pour une réponse à une commande STAT). x2z Connexions La réponse concerne le canal de données. x3z x4z Authentification et comptes Non utilisé par le protocole FTP La réponse concerne le login (USER/PASS) ou la demande de changement de compte (CPT). x5z Système de fichiers La réponse concerne le système de fichiers distant. 2. Installation De nombreuses options de PureFTPd sont fixées lors de la compilation. Il vaut mieux donc faire une installation à partir des sources. 2.1. Compilation Il faut rapatrier l'archive contenant les sources à partir du site www.pureftpd.org. De nombreuses options de compilation sont disponibles. Parmi les plus intéressantes, on peut noter : Tableau 3. Quelques options de compilation --with-ftpwho --with-everything --with-language=french --with-paranoidmsg --with-virtualhosts --with-puredb --with-quotas --with-ratios Permet l'utilisation de cette commande qui indique qui utilise le serveur. Active toutes les directives "with". Choix de la langue des messages générés par le serveur. Génère des messages d'erreur peu explicites lors des échecs de connexion. Utilisation de serveurs virtuels (voir plus loin). Utilisation d'utilisateurs virtuels (voir plus loin). Limitation de la taille des fichiers stockés par l'utilisateur. Définition d'un ratio entre upload/download.
Page 5 sur 7 --with-boring --without-banner --without-inetd --without-iplogging Messages à l'aspect professionnel. Aucune bannière lors de la connexion au serveur. Fonctionne en mode standalone uniquement (donc sans passer par inetd). N'enregistre pas dans les logs, les IP des clients (confidentialité). La compilation se déroule en trois temps. Dans le répertoire de décompression des sources, il faut lancer le script./configure en indiquant les paramètres souhaités : srv001:/root/pure-ftpd-1.0.11#./configure --with-ftpwho --with-language=french -- --with-virtualhosts --with-puredb --with-boring --without-banner --without-inetd Ensuite, on fait un make suivi d'un make install. 2.2. Utilisateur FTP Si vous souhaitez offrir un accès FTP anonyme, un utilisateur ftp doit exister : # groupadd ftp # useradd ftp -m -g ftp 2.3. Utilisateurs virtuels Vous pouvez créer des utilisateurs qui auront accès au serveur FTP tout en n'étant pas des utilisateurs Unix. Utilisez une commande de PureFTPd : # pure-pw useradd test -u 600 -g 600 -d /var/ftp Password : Enter it again : Il faut indiquer un UID (u) et un GID (g) nouveau. Le répertoire d'accueil (/var/ftp) doit exister. Ensuite, et à chaque modification du fichier, il faut lancer la commande : # pure-pw mkdb Les commandes useradd, userdel et usermod existent et fonctionnent de façon quasi identique à celles d'unix. La commande pure-pw show <utilisateur> permet d'avoir un état de l'utilisateur virtuel : # pure-pw show test Login : test Password : $1$ae2E7Kp0$I2waTWAlM7LO5rdEt./5C1 UID : 600 (-) GID : 600 (-) Directory : /var/ftp/./ Full name : Download bandwidth : 0 Kb (disabled) Upload bandwidth : 0 Kb (disabled) Max files : 0 (disabled) Max size : 0 Mb (disabled) Ratio : 0:0 (disabled:disabled) Allowed local IPs : Denied local IPs : Allowed client IPs : Denied client IPs : Time restrictions : 0000-0000 (disabled) 2.4. Lancement du serveur PureFTPd accepte de nombreux paramètres au chargement :
Page 6 sur 7 -A: Demande au serveur de chrooter tous les utilisateurs ftp. Concrètement, cela veut dire qu'ils ne pourront sortir du répertoire maison défini [ici /var/ftp]. Ils ne verront rien d'autre du système que le répertoire /var/ftp et ses sous-répertoires. -b: Être moins exigeant avec les standards pour permettre la connexion à des clients ftp peu soucieux des standards (tel IExplorer ;-). -B: Fonctionnement du serveur en arrière-plan. -c: Autoriser au maximum [n] connexions simultanées au serveur. -C: Autoriser au maximum [n] connexions simultanées venant de la même adresse ip au serveur. -e: Accepter uniquement que les connexions anonymes. -F: A chaque connexion d'un client, afficher un message de bienvenue pris de manière aléatoire dans le fichier /usr/share/games/fortune/fr/amusantes. -H: Ne pas résoudre les noms de domaine pour accélérer les connexions (ne pas chercher à déterminer le nom de domaine associé à l'adresse ip qui demande la connexion). -k: Ne pas autoriser les uploads dès lors que la partition est à [pourcentage]% pleine. -K: Autoriser les utilisateurs à uploader et à reprendre leur upload en cas d'erreur mais pas à supprimer ou renommer leur fichiers uploadés. -l: Autoriser la connexion d'utilisateurs autres que Unix (virtuels par exemple). -M: Autoriser les utilisateurs anonymes à créer des répertoires. -q: Mettre en place les ratios [ratio upload]:[ratio download] pour les utilisateurs anonymes. Ici -q 1:2 signifie que les utilisateurs anonymes doivent uploader 1Mo de données pour pouvoir downloader 2Mo. -r: Ne jamais écraser un fichier existant. Le fichier est automatiquement renommé si un fichier du même nom existe déjà sur le serveur. -s: Protection anti-warez. Ne pas autoriser les utilisateurs anonymes à télécharger des fichiers qui viennent d'être uploadés par d'autres utilisateurs anonymes. Il faut qu'auparavant, l'administrateur du serveur est validé tous les fichiers uploadés comme étant disponibles [ou non] au téléchargement. -t: Mettre en place une limitation de la bande passante [n kb/s upload]:[m kb/s download]. Ici -t :12 signifie que pour les utilisateurs, la vitesse en upload est illimitée [d'où l'absence de valeur] et que la vitesse en download est limitée à 12 kb/s. -S (port ): Connexion à PureFTPd sur un port non standard. Il existe beaucoup d'autres options dont vous trouverez le détail dans la documentation fournie avec le logiciel. A chaud, vous pouvez saisir la commande suivante, éventuellement agrémentée des options précédentes pour démarrer le serveur : # pure-ftpd -l unix -l puredb:/etc/pureftpd.pdb -B Avec l'option -l, on autorise les utilisateurs du système (Unix) et les utilisateurs virtuels à se
Page 7 sur 7 connecter. A froid, il faut créer un simple script dans /etc/rc.boot ou dans /etc/rcx.d selon le runlevel souhaité. 3. Les serveurs virtuels La principale configuration que l'on puisse réaliser avec PureFTPd est la création de serveurs virtuels, à savoir un serveur unique acceptant des connexions sur différents domaines. Vous devez créer un lien symbolique dans le sous-répertoire de /etc/pure-ftpd avec l'adresse IP à laquelle répond votre serveur et pointant sur le répertoire qui contient les fichiers. Par exemple : # ln -s /var/ftp/domaine.com /etc/pure-ftpd/192.168.1 4. Surveillance Il faut surveiller le fichier /var/log/syslog. Son contenu apporte (entre autre) les informations suivantes : Oct 22 21:28:46 srv001 pure-ftpd: (?@station1.domaine.com) [INFO] Nouvelle connexion de station1.domaine.com Oct 22 21:28:49 srv001 pure-ftpd: (?@station1.domaine.com) [INFO] util1 est maintenant loggue Oct 22 21:28:58 srv001 pure-ftpd: (util1@station1.domaine.com) [NOTICE] //home/util1/gsview32.ini uploade (5589 bytes, 544.33KB/sec) Oct 22 21:29:03 srv001 pure-ftpd: (util1@station1.domaine.com) [INFO] Deloggue - Temps CPU utilise: 0.030 secondes. 5. Exercices 1. Installez les sources de PureFTPd, compilez avec les options indiquées plus haut. 2. Vous mettrez en place des quotas (2 Mo par utilisateur maximum) et un ratio de upload/download de 70/30%. 3. Créez un utilisateur virtuel appelé virtu. 4. Configurez une interface virtuelle avec une IP dans un autre réseau. Vous prendrez soin de créer une ligne dans le fichier /etc/hosts afin que votre machine soit capable de résoudre le nom. 5. Créez un serveur virtuel pour cette adresse. 6. Connectez un utilisateur puis utilisez la commande pure-ftpwho. 7. Cherchez comment on peut personnaliser un message d'accueil lors de la connexion de l'utilisateur virtu. 6. Lectures conseillées Le fichier README du site de protfpd.org, bien qu'en anglais, est très clair et contient tout ce que vous devez savoir.