====== Installer et Configurer un serveur FTP avec Pure-FTPD ====== ===== Pré-Requis ===== * Savoir ouvrir des ports dans son pare-feu et/ou box * Savoir utiliser un éditeur de texte en mode console (vi ou nano) * Fonctionnement identique sur OpenSuse 10.x, 11.x ===== Préambule ===== **__Il peut y avoir plusieurs avantages à installer un serveur FTP__** : * Partager des données avec ses amies, famille ou clients... * Partager l'ensemble des logiciels de la société dans le réseau de l'entreprise, * Installer Opensuse à partir d'un serveur FTP sur un certain nombre de postes simultanément, Note : //Pure-FTPD vous permet d'utiliser le protocole SSL pour sécuriser l'échange de vos données. Il sera nécessaire d'installer le package "**openssl**".// ===== Installation ===== Il existe plusieurs façons d'installer pure-ftpd. __Soit par__ : * //Téléchargement de la source sur le site de l'éditeur//. * //Yast// C'est cette dernière solution que j'ai choisi. Dans "**yast>service réseau**" Cliquer sur "**Services réseau (xinetd)**". //Il s'agit ici, des services réseau que propose cette distribution//. Cliquer sur le bouton "**activer**" et sélectionner le service "FTP".\\ Sélectionner la ligne "**/usr/sbin/pure-ftpd**" dans la colonne serveur.\\ Cliquez sur le bouton "**Etat interrupteur à bascule**". L'installation du package commence ===== Initialiser le service au démarrage ===== Pour initialiser le daemon au démarrage, il faut utiliser l'utilitaire "**Editeur du niveau d'execution"** (Yast>systeme) Sélectionner "**pure-ftpd**" dans la liste et cliquer sur "**activer**" De cette manière le daemon s'initialisera au démarrage. \\ Il vous est possible de choisir le niveau d'éxecution (rcx) en fonction de vos préférences (le niveau avec interface graphique (kde/gnome) est le rc5. En mode console, le niveau est rc3 =====Rajouter un certificat SSL===== Pour générer un certificat SSL qui sera utilisé par pure-ftpd, faites openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem Ou placez directement votre certificat au bon endroit. ===== Se connecter au FTP ===== __Pour démarrer le démon manuellemnt__ : /etc/init.d/pure-ftpd start Vous pouvez maintenant vous connecter à votre ftp en anonyme uniquement. ftp://localhost //Le répertoire personnel pour// "**anonyme**" est "**/srv/ftp**" Le répertoire personnel est le conteneur de vos données que vous rendez accessible par le FTP pour l'utilisateur "**anonyme**" Pour de nombreux utilisateurs, un accès anonyme est suffisant, notament dans les réseaux locaux.\\ D'autant plus que, par défaut, l'accès en anonyme sur le serveur est en lecture seul (modifiable, voir plus bas) En revanche, il est tout à fait possible de créer des utilisateurs et leur spécifier des autorisations d'accès au FTP au besoin. ===== Paramétrage du serveur FTP ===== Ces 2 répertoires vous seront utile lors de la configuration du serveur. * **///usr/share/doc/packages/pure-ftpd//** qui contient la documentation officielle de pure-ftp qui vous permettra d'aller plus loin. * **///etc/pure-ftpd//** qui est le répertoire du programme où est stockée la base de données utilisateur et le fichier de configuration du serveur. ===== Création d'un groupe ===== **"groupadd ftpgroup"**, cela aura pour effet de créer un groupe "**ftpgroup**". ===== Création d'un utilisateur ===== "**useradd -g ftpgroup -s /etc ftpuser**" aura pour effet de créer l'utilisateur "**ftpuser**".\\ L'option "**-g**" spécifie que l'utilisateur sera rattaché au groupe "**ftpgroup**" __Note__ : Cet utilisateur vous servira plus tard à attribuer des droits d'accès aux répertoires sur le serveur. ===== Création d'un utilisateur virtuel ===== Vous devez créer des utilisateurs virtuels.\\ Ces utilisateurs seront stocké dans une base de donnée géree par pure-ftpd. A partir d'ici, toute maintenance de vos utilisateurs virutels se fera essentiellement par la ligne de commande "**pure-pw**" ===== Pour créer un utilisateur virtuel ===== "**pure-pw useradd toto -u ftpuser -d /home/ftpusers/toto**".\\ (Cela va crée l'utilisateur "toto" avec pour répertoire personnel /home/ftpusers/toto) Le répertoire "**/ftpusers/toto**" sera crée à la 1ere connexion de l'utilisateur (si vous l'avez spécifié dans le fichier de configuration, voir plus bas) Par défaut, tous les répertoires personnels sont chrooté, c'est à dire que l'utilisateur ne peut pas sortir de son répertoire. ===== Inscrire l'utilisateur crée dans la base de donnée ===== "**pure-pw mkdb**"\\ Cette commande aura pour effet de créer la base de donnée et d'y inscrire les informations de l'utilisateur. __La base de donnée__ crée est stockée dans "**/etc/pure-ftpd**" et s'identifie par "**pureftpd.pdb**" __pure-pw propose quelques commandes utiles__ :\\ * **voir le profil d'un utilisateur** : //pure-pw show toto//\\ * **supprimer un utilisateur** : //pure-pw userdel toto//\\ * **réinitialiser le mot de passe** : //pure-pw passwd toto//\\ Autres commandes : pure-pw –help\\ ===== Le fichier de configuration "Pure-ftpd.conf" ===== A partir de maintenant, il va falloir travailler avec le fichier de configuration du serveur. Editez le fichier "**pure-ftpd.conf**" avec votre editeur de texte (vi par exemple)\\ __Voici quelques éléments extraits du fichier de configuration__ : \\ * "**Don't allow authenticated users - have a public anonymous FTP only.**"\\ (ne pas autoriser les utilisateurs authentifiés – accès anonyme uniquement) * **AnonymousOnly**>> // no//\\ Passer la valeur en "**no**" pour un accès non anonyme\\ * "**Disallow anonymous connections. Only allow authenticated users**."\\ Ne pas autoriser les connections anonymes.\\ * **NoAnonymous**>> //yes//\\ Mettre la valeur en "**Yes**" ou en "**no**" si vous souhaitez utiliser le compte anonyme et autres * "**Automatically create home directories if they are missing**"\\ (créer automatiquement le répertoire personnel de l'utilisateur si il n'existe pas)\\ * #**CreateHomeDir **>> //yes//\\ Par défaut le signe # signifie que cette valeure est un commentaire. \\ Supprimer le # \\ Cette option est intéressante puisque par défaut ( avec #) le répertoire personnel de l'utilisateur ne se crée pas. "**PureDB user database**" \\ Base de données contenant les paramétrages des utilisateurs virtuels\\ # **PureDB**>> ///etc/pure-ftpd/pureftpd.pdb//\\ Ici aussi la bdd est désactivée. \\ Supprimez le # pour que votre utilisateur virtuel préalablement crée puisse se connecter.\\ Chaque changement dans le fichier de conf nécéssite de réinitialiser le daemon de pure-ftp.\\ ===== Réinitialiser le daemon ===== Dans la console, en "**su**"\\ "**/etc/init.d/pure-ftpd restart**"\\ ===== Problèmes ===== Si vous avez des problèmes d'accès avec vos utilisateurs virtuels\\ * //Ressaisissez le mot de passe (pure-pw passwd toto)//\\ * et **valider la bdd** (pure-pw mkdb)\\ Il existe de nombreuses autres options comme les ports du firewall à configurer, le nombre d'utilisateurs qui peuvent se connecter avec le même ip sur le serveur, le taux de dl, heures d'ouverture... Toutes ces informations sont configurables dans le fichier de configuration du serveur ftp. ===== Active mode ou Passive Mode ===== Une excellente explication sur ce site : http://3psilon.info/FTP-Actif-ou-Passif.html __Pour vulgariser__ : === Active Mode : === Le client FTP se connecte au serveur FTP. Il lui précise d'envoyer toutes les données sur un port >1024. Cela signifie que pendant le temps du transfert, toutes connexions effectuées sur un port > à 1024 seront acceptées. Pour utiliser ce mode, il faut activer la fonction "port forwading" de votre routeur. {{:logiciel:forwad-free.jpeg|}} Sur la capture, il est préciser d'ouvrir les ports 20 et 21 du serveur ftp qui est installé sur le pc ayant pour ip. Enfin, pour tester la connexion à votre serveur, vous pouvez passer par ce site : http://www.net2ftp.com/index.php === Passive Mode : === Le client se connecte au serveur et lui dit sur quel port il doit lui envoyer des donnnées. En revanche, cette fois, c'est le serveur qui ouvre les ports > à 1024. Pour utiliser ce mode, il vous reste à autoriser l'accès au serveur FTP dans le firewall Netfilter. Dans le fichier de configuration de pureftpd, il est précisé d'ouvrir les ports 30000 à 50000 pour les connections passives, sans cela les utilisateurs ne pourraient pas se connecter au Serveur FTP. Enlever le #.\\ Dans le firewall, cliquer sur "**services autorisés**" à gauche.\\ Dans la boite déroulante "**Service à autoriser**", sélectionner "**pureftpd**" et "**ajouter**".\\ Cliquer sur “**avancé**“.\\ Dans ports TCP, mettre les ports **30000:50000** {{logiciel:ports1.png|}} ===== Quelques plus ===== ==== Spécifier une plage d'horaire pour accéder au FTP pour un utilisateur virtuel ==== * "**pure-pw usermod toto -z hhmm hhmm**"\\ * "**pure-pw mkdb**" pour mettre à jour la bdd ==== Supprimer l'heure d'accès ==== * "**pure-pw usermod toto -z ''**\\ * "**pure-pw mkdb**" pour mettre à jour la bdd ==== Monter un répertoire externe ==== Par défaut, chaque utilisateur à son répertoire "**chrooté**". La commande "**bind**" permet de rattacher des répertoires en dehors du répertoire de l'utilisateur virtuel. (bind signifiant "rattacher/se rattacher") __Ouvrir le fichier de configuration fstab en ligne de commande (**/etc/fstab**) et ajoutez cette ligne__ : "**///répertoire_à_accrocher /chemin_d'accrochage_dans_l'arborescence none bind 0 0//"** Pour que le point de montage soit actif au redémarrage faire "**mount -a**" dans la console en root. Cette fonction à une autre utilitée puisqu'elle essaye de monter tous les points de montage spécifiés dans "**fstab**". Ainsi, si un fichier est obsolète, il est possibke de désactiver la ligne par # (Merci à tyrtamos d'alionet pour l'astuce) __Note__ : Pour utiliser les liens symboliques il faut recompiler l'application avec l'option “**--with-virtualchroot**“ qui permettra d'utiliser les liens symboliques afin d'accéder à des répertoires situés en dehors du répertoire de l'utilisateur virtuel. ==== Attribuer des droits d'écriture pour votre utilisateur virtuel à des répertoires ==== Il suffit de changer le propriétaire du répertoire par celui de l'utilisateur physique préalablemennt crée "**ftpuser**" Ces changements sont à faire en ligne de commande. Crée un répertoire "**upload**" dans "**/home/ftpusers/toto**" (md upload) __Vérifier ses droits__ ls -l upload\\ __ex ici__ :\\ drwxr-xr-x 2 root root 4096 déc 8 15:19 upload d = directory //1er bloc// = **propriétaire** r= read\\ w=write\\ x=execution\\ //2ème Bloc// = **groupe**\\ r=read etc...\\ //3ème Bloc// = **autres**\\ 1er root = **utilisateur**\\ 2ème root = **groupe**\\ Pour //__changer le propritéaire__// nous allons utiliser la commande "**chown**" (change owner)\\ "**chown ftpuser upload**"\\ Le propriétaire du répertoire doit être ftpuser, le vérifier avec ls -l upload\\ Pour **__attribuer*__* ou **__enlever__** des droits sur un répertoire, utilisez la commande "**chmod**" \\ * **chmod u+x fic1** = //ajouter le droit d'éxecution à l'utilisateur pour fichier1//\\ * **chmod g-r rep1** = //supprimer le droit de lecteur au groupe pour repertoire1//\\ * **chmod a= rep1** = //suppression de tous les droits à tout le monde//\\ Pour plus de détails sur chmod ou chown, ajouter -–help (2 tirets) à la fin de la commande. == pureftpd.conf (pour s'inspirer :)) == ############################################################ # # # Configuration file for pure-ftpd wrappers # # # ############################################################ ChrootEveryone yes # Pour empécher les utilisateurs de remonter l'arboresence ! BrokenClientsCompatibility no MaxClientsNumber 10 # Le max de client Daemonize yes # Pour le lancer en arrière plan MaxClientsPerIP 3 # Max de connection par IP VerboseLog yes # Pour des logs plus bavards AllowDotFiles yes DisplayDotFiles yes AnonymousOnly no # Pour activer/désactiver les comptes autres qu'Anonymous... (no = active ces comptes NoAnonymous yes # Pour empécher les connexions anonymes SyslogFacility ftp DontResolve yes # Pour résoudre les noms des clients MaxIdleTime 15 PureDB /etc/pure-ftpd/pure.db PAMAuthentication yes LimitRecursion 2000 8 AnonymousCanCreateDirs no MaxLoad 4 AntiWarez yes AnonymousBandwidth 10 UserBandwidth 12 Umask 177:077 MinUID 100 AllowUserFXP no AllowAnonymousFXP no ProhibitDotFilesWrite yes ProhibitDotFilesRead no AutoRename yes AnonymousCantUpload yes AltLog clf:/etc/pure-ftpd/pureftpd.log MaxDiskUsage 99 NoRename yes CustomerProof yes