Mise en place d'un serveur FTP sous CentOS 6.2
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
CentOS – FTP Mise en place d’un serveur FTP sous CentOS 6.2 Nicolau Fabien, Emanuele Prestifilippo L e protocole FTP (File Transfert Protocol, des programmes) et s’installe simplement en français protocole de transfert de fi- avec le groupe « FTP Server », grâce à l’uti- chiers) permet d’envoyer ou récupérer litaire YUM. des fichiers sur un réseau TCP/IP en utili- Ouvrez un terminal et exécutez la com- sant le modèle client-serveur. mande suivante en tant que root : L’un des avantages du protocole FTP est qu’il permet facilement, avec les ser- # yum groupinstall “FTP Server” veurs les plus courants, d’utiliser des « uti- lisateurs virtuels ». Si vous avez 50 clients, L’installation terminée, si vous souhaitez inutile de créer un compte système pour que le service vsftpd soit lancé automati- chacun, les comptes seront tous stockés quement au démarrage, il suffit d’utiliser la dans une base gérée par le serveur et un commande chkconfig , toujours en root : seul compte système sera utilisé pour les droits. Ces utilisateurs virtuels sont géné- # chkconfig vsftpd on ralement dits « mappés » sur le compte local. Lui passer « off » en paramètre permettra Dans ce tutoriel, nous expliquerons com- de désactiver le lancement automatique. ment mettre en place le serveur vsftpd en Il est aussi possible de lancer, arrêter ou mode standalone, avec une gestion des redémarrer le serveur avec les comman- utilisateurs virtuels. Pour l’authentification, des suivantes : nous verrons deux des nombreuses possibi- lités offertes par PAM : # service vsftpd start # service vsftpd restart JJ stockage dans une base de données # service vsftpd stop au format berkeley, JJ stockage dans une base de données Configuration du serveur MySQL. La configuration du serveur vsftpd se fait via le fichier /etc/vsftpd/vsftpd.conf. Toutes les Présentation de vsftpd clés de configuration existantes sont com- vsftpd (Very Secure FTP Daemon) est mentées via la page de man de vsftpd ou en- un serveur FTP pour les systèmes UNIX, y compris Linux. Les principales qualités qui lui sont reconnues sont sa légèreté, sa configuration simple mais puissante et sa sécurité. Il supporte le chiffrement au travers de SSL intégré et gère le sys- tème d’identification des utilisateurs via PAM (Pluggable Authentication Modules), permettant ainsi d’utiliser tous les modes d’authentification que ce dernier propose. vsftpd est capable de s’exécuter dans deux modes : xinetd ou standalone. Le pre- mier sera à privilégier si les connexions clien- tes sont rares, le second si les connexions sont plus fréquentes. Installation du serveur vsftpd est disponible dans les dépôts de CentOS (les serveurs centralisés contenant Figure 1. Le premier essai réussi avec un utilisateur système www.linuxidentity.com 13
CentOS – FTP core, à cette adresse : http://vsftpd. Profitons-en pour créer le répertoire fichier user_list contenant les identi- beasts.org/vsftpd_conf.html La pre- qui contiendra les fichiers décrivant fiants qui seront refusés (sans même mière chose à faire est de créer une les droits spécifiques de chaque uti- demander le mot de passe). Les utili- sauvegarde du fichier de configura- lisateur : sateurs virtuels seront mappés sur le tion (nous utilisons ici la commande compte système FTP et leurs fichiers mv car nous partirons d’un fichier de # mkdir vsftpd_user_conf de configuration seront stockés dans configuration vide ensuite) : le dossier /etc/vsftpd/vsftpd_user_ Dans notre configuration souhaitée, conf. Enfin, notre serveur tournera en $ su nous autoriserons seulement les utili- mode « standalone ». Voici le moment # cd /etc/vsftpd sateurs virtuels à se connecter et non d’éditer le fichier de configuration # mv vsftpd.conf vsftpd.conf. ↵ pas les utilisateurs locaux de votre or- avec votre éditeur de texte habituel, original dinateur (donc pas besoin du fichier ce sera VI dans notre exemple : ftpusers), nous utiliserons donc le # vi /etc/vsftpd/vsftpd.conf Script 1. Fichier de configuration vsftpd.conf Puisque nous avons précédemment # Port d’écoute renommé l’original, le fichier vsftpd. listen_port=21 conf sera vide. Les principales va- # Bannière de bienvenue leurs à écrire sont présentées dans ftpd_banner=Bienvenue sur mon serveur VSFTPD ! le Script 1, chacune d’elles est com- # Fichier de configuration de PAM mentée. pam_service_name=vsftpd Une fois le fichier rempli, enregis- # Mode “standalone” trez-le, limitez les droits le concernant, listen=YES puis redémarrez le service vsftpd : # Pas de connexion anonyme anonymous_enable=NO # chmod 600 /etc/vsftpd/ ↵ # Les utilisateurs système sont autorisés vsftpd.conf local_enable=YES # service vsftpd restart # Fichier des utilisateurs userlist_file=/etc/vsftpd/user_list Il est déjà temps de faire un premier # Chargement de la liste userlist_file essai, grâce au client ftp en ligne de userlist_enable=YES commande ; s’il n’est pas encore ins- # Il est indiqué ici que cette liste est celle des identifiants ↵ tallé, vous pouvez rapidement l’ob- refusés, par ceux autorisés tenir en installant le paquet ftp avec userlist_deny=YES YUM. Il suffit de passer en paramètre # Un utilisateur virtuel pourra télécharger un fichier même ↵ l’adresse ou le nom d’hôte auquel s’il n’est pas lisible par tous se connecter ; ici, ce sera localhost, anon_world_readable_only=NO c’est-à-dire l’ordinateur local. Un pre- # Refus des commandes influant sur le système de fichier (STOR, ↵ mier essai est fait avec notre utilisa- DELE, RNFR, RNTO, MKD, RMD, APPE and SITE) teur système (emanuele) et notre mot write_enable=NO de passe. Grâce à la commande ls , # Refus des droits d’écriture pour les anonymes (et donc ↵ vous devriez voir le contenu du dossier utilisateurs virtuels) par défaut /var/ftp/. Ensuite, une connexion est anon_upload_enable=NO tentée avec l’utilisateur root. Celui-ci anon_mkdir_write_enable=NO faisant partie du fichier /etc/vsftpd/ anon_other_write_enable=NO user_list, l’accès lui est refusé. No- # Activation des utilisateurs virtuels et mappage sur le ↵ tez que le mot de passe n’est même compte local ftp pas demandé, ce qui évite de le faire guest_enable=YES passer inutilement en clair sur le ré- guest_username=ftp seau ! (Figure 1). # chroot des utilisateurs chroot_local_user=YES Utilisateurs virtuels # Nombre maximum de connexions simultanées Le serveur FTP étant maintenant max_clients=50 prêt, nous pouvons enregistrer des # Nombre maximum de connexions venant de la même IP utilisateurs. Ceux-ci sont dits « vir- max_per_ip=4 tuels » car ce ne sont pas des utili- # Dossier de configuration spécifique des utilisateurs sateurs disposant d’un compte sys- user_config_dir=/etc/vsftpd/vsftpd_user_conf tème, ils sont uniquement gérés par le serveur vsftpd. Les accès étant 14 Linux Identity Set
CentOS – FTP gérés via PAM, nous pouvons utiliser cutez le Script 2 afin de créer les installé CentOS 64 bits, remplacez n’importe quel mode d’authentifica- deux tables. Ajoutons nos deux utili- /lib/ avec /lib64/. tion proposé. Nous détaillerons deux sateurs de tests (Script 3). d’entre eux : berkeley et MySQL. Deux choses sont à remarquer ici : Vous avez utilisé une base berkeley Préparation d’une base berkeley JJ les mots de passe sont chif- Ouvrez en root avec votre éditeur de Construire une base de données au frés grâce à la fonction md5, texte habituel le fichier /etc/pam.d/ format berkeley est plutôt simple. Il JJ user2 est créé, mais non acti- vsftpd, effacez toutes les lignes suffit de partir d’un fichier texte, qui vé (active vaut 0). existantes et placez-y le contenu contiendra les identifiants et mot de présenté dans le Script 4. passe. Un compte se compose donc Configuration de PAM Les deux premières lignes du fi- d’une première ligne avec l’identi- Maintenant que notre base d’uti- chier permettent d’autoriser l’accès fiant et d’une seconde en dessous lisateurs est prête, il nous reste aux utilisateurs système, les deux avec le mot de passe. Les comptes à mettre en place le fichier PAM suivantes indiquent que les comp- se mettent les uns en dessous des pour que vsftpd puisse l’utiliser. tes des utilisateurs virtuels utilisés autres. Il faut enfin ajouter un der- pour l’authentification se trouvent nier retour à la ligne. Voici notre fi- Attention ! Dans les dans notre base berkeley (le fichier chier créé donc dans /tmp et appelé Scripts 4 et 5, si vous avez est bien login, sans extension). login.txt : user1 Script 2. Script créant la structure de la base de données vsftpd pass1 user2 CREATE TABLE `vsftpd`.`users` ( pass2 `id_user` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL, Il ne reste plus qu’à transformer `password` varchar(100) NOT NULL, ce fichier en une base de données `active` int(1) NOT NULL, berkeley, grâce à la commande db_ PRIMARY KEY (`id_user`) load Si celle-ci n’est pas disponible ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 sur votre CentOS 6.2, installez le pa- quet db4-utils la fournissant. Lancez CREATE TABLE `vsftpd`.`log` ( donc la commande qui suit : `id_log` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL, # db_load -T -t hash -f /tmp/ ↵ `message` varchar(200) NOT NULL, login.txt /etc/vsftpd/ ↵ `pid` varchar(10) NOT NULL, login.db `host` varchar(30) NOT NULL, `time` datetime default NULL, Puis réduisez les droits sur cette PRIMARY KEY (`id_log`) base nouvellement créée : ) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 # chmod 600 /etc/vsftpd/login.db Script 3. Insertion de deux utilisateurs Préparation d’une base MySQL $ mysql -u --password= -e “INSERT INTO vsftpd.users (login,password,active) ↵ rons une table contenant les utilisa- VALUES(‘user1’,md5(‘pass1’),1)” teurs du serveur et une pour l’enre- $ mysql -u --password= -e “INSERT INTO vsftpd.users (login,password,active) ↵ té offerte par le module pam_mysql). VALUES(‘user2’,md5(‘pass2’),0)” Les champs des tables sont libres, ils seront ensuite à préciser dans la Script 4. Configuration de PAM pour une base berkeley configuration de PAM. Profitons-en donc pour ajouter un champ « active » #%PAM-1.0 à notre enregistrement utilisateur, ce auth sufficient pam_unix.so qui permettra de suspendre l’accès account sufficient pam_unix.so à un utilisateur sans pour autant le auth required /lib/security/pam_userdb.so db=/etc/ ↵ supprimer. Ici, nous supposons que vsftpd/login vous avez un serveur MySQL fonc- account required /lib/security/pam_userdb.so db=/etc/ ↵ tionnel. Créez d’abord une base de vsftpd/login données nommée vsftpd, puis exé- www.linuxidentity.com 15
CentOS – FTP à rajouter dans la requête, ici nous nous en servons pour utiliser le paramètre active, JJ sqllog : yes indique que nous voulons logger dans une table les événements, JJ logtable : nom de la table contenant les logs, JJ logmsgcolumn : nom de la colon- ne contenant le message de log, JJ logusercolumn : nom de la co- lonne contenant l’identifiant pour le log, JJ logpidcolumn : nom de la colon- ne contenant le pid pour le log, JJ loghostcolumn : nom de la colon- Figure 2. La connexion avec un utilisateur virtuel ne contenant l’hôte pour le log, JJ logtimecolumn : nom de la co- Vous avez utilisé une base vous servez du log dans la base My lonne contenant la date et MySQL SQL. Nous avons utilisé 127.0.0.1 l’heure pour le log. La première chose à faire est d’instal- pour l’hôte, mais il faut évidemment ler le paquet pam_mysql contenant le l’adapter en mettant l’adresse IP de Nous pouvons maintenant redémar- module MySQL pour PAM. L’opération votre serveur MySQL. Voici en dé- rer le serveur : terminée, ouvrez en root avec votre tails les paramètres : éditeur de texte habituel le fichier $ su -lc “service vsftpd ↵ /etc/pam.d/vsftpd, effacez toutes JJ verbose : permet d’afficher restart” les lignes existantes et placez-y le plus d’informations, seule- contenu visible dans le Script 5. ment utile lors du débogage, Vérifier la configuration Les deux premières lignes du fi- JJ user : utilisateur MySQL, de PAM chier permettent d’autoriser l’accès JJ passwd : mot de passe MysSQL, Quelle que soit la configuration de aux utilisateurs système, alors que JJ host : hôte du serveur MySQL, PAM que vous avez utilisée, essayez les deux suivantes indiquent les diffé- JJ db : nom de la base de données, à nouveau de vous connecter en utili- rents champs de votre base d’utilisa- JJ table : nom de la table pour sant cette fois-ci l’identifiant user1 et teurs stockés sur un serveur MySQL les utilisateurs, le mot de passe pass1, la connexion afin d’y accéder et d’enregistrer les JJ usercolumn : nom de la colon- doit être acceptée (Figure 2). connexions. Notez que crypt=3 est uti- ne contenant les identifiants, La connexion fonctionne mais il lisé car nos mots de passe sont chif- JJ passwdcolumn : nom de la co- vous est impossible pour le moment frés avec la fonction md5(). La clause lonne contenant les mots de de télécharger un fichier. La derniè- where permet de filtrer les utilisateurs passe, re étape consistera donc à attribuer pour lesquels active ne vaut pas 1. JJ crypt : type de chiffrement, 3 in- des droits d’écriture, seulement Tous les paramètres mis après dique que l’on utilise du md5, pour certains utilisateurs, grâce aux where ne sont à utiliser que si vous JJ where : close supplémentaire fichiers placés dans /etc/vsftpd/ vsftpd_user_conf. Configuration des droits par utilisateur Pour attribuer des droits spécifiques à un utilisateur, il suffit de lui créer un fichier portant son identifiant dans /etc/vsftpd/vsftpd_user_conf. Nous entrons ensuite dans ce fichier les mêmes clés que dans le fichier de configuration principal, avec des valeurs différentes bien sûr. Lorsque l’utilisateur se connectera, les clés de configuration présentent dans son fichier seront alors prioritaires par rapport à celles du fichier princi- Figure 3. La connexion à notre serveur vsftpd via gFTP pal. Il est ainsi possible de modifier 16 Linux Identity Set
CentOS – FTP tous les paramètres pour un utilisa- suivantes, notamment si SELinux que le local_root appartient bien au teur en particulier. C’est aussi une est activé sur votre système. user et groupe ftp. des forces de vsftpd. Prenons un exemple où nous allons changer le 500 OOPS: reading non-root 553 Could not create file répertoire de l’utilisateur user1, afin config file Si cette erreur intervient et qu’une qu’il lui soit propre, et donnons-lui Cette erreur vient de ce que l’utili- erreur SELinux apparaît, lancez ensuite les droits d’écriture. Notez sateur n’a pas de fichier spécifique alors ces commandes : que pour que le tout fonctionne bien, dans /etc/vsftpd/vsftpd_user_ le nouveau répertoire d’accueil de conf (même vide). Il semble que setsebool -P allow_ftpd_anon_ ↵ user1 doit appartenir à l’utilisateur ce soit un bogue. Si vous avez ce write=1 système FTP, utilisateur sur lequel souci, créez un fichier pour cet uti- chcon -R -t public_content_ ↵ user1 est mappé (Script 6). lisateur. Nous verrons ensuite que rw_t min absolu pour la clé local_root ; quement. cependant, il faut s’assurer des Connexions graphiques droits de l’utilisateur ftp sur le dos- 500 OOPS: cannot change Dans les exemples de ce tutoriel, nous sier indiqué. directory: avons utilisé la commande ftp pour Faites à nouveau un test, avec Dans ce cas, entrez : $ su -lc “set- les essais. Il vous est évidemment l’utilisateur user1. Vous voilà dans sebool -P ftp_home_dir 1” possible d’utiliser n’importe quel un autre dossier, dans lequel vous client graphique pour vous connecter pouvez envoyer des fichiers. 500 OOPS: vsftpd: refusing to à votre serveur, comme par exemple, run with writable anonymous root le très répandu gFTP (Figure 3) ou le Erreurs courantes Il faut enlever le droit d’écriture sur multi-plate-forme FileZilla. Voici quelques règles à mettre en le répertoire root : # chmod u-w /le/ place si vous rencontrez les erreurs local/root Ensuite, il faut s’assurer Conclusion Voilà votre serveur FTP en place. Il Script 5. Configuration de PAM pour une base MySQL vous est maintenant possible de distribuer des comptes et d’appli- #%PAM-1.0 quer finement des droits à chacun auth sufficient pam_unix.so d’eux comme, par exemple, avoir un account sufficient pam_unix.so compte dédié à la mise à jour de vo- auth required /lib/security/pam_mysql.so verbose=0 tre site Internet. Parfaitement intégré user= passwd= à CentOS, ce serveur est facilement host=127.0.0.1 db=vsftpd table=users usercolumn=login administrable. Si vous souhaitez inter- passwdcolumn=password crypt=3 where=users.active=1 dire des utilisateurs système, il vous sqllog=yes logtable=log logmsgcolumn=message suffit d’entrer leurs identifiants dans logusercolumn=login logpidcolumn=pid loghostcolumn=host le fichier user_list. Enfin, si les bases logtimecolumn=time berkeley ou MySQL ne vous convien- account required /lib/security/pam_mysql.so verbose=0 nent pas, vous pouvez aller plus loin user= passwd= en choisissant, parmi les différentes host=127.0.0.1 db=vsftpd table=users usercolumn=login possibilités de PAM, une solution de passwdcolumn=password crypt=3 where=users.active=1 stockage qui vous convient mieux et sqllog=yes logtable=log logmsgcolumn=message ainsi profiter un peu plus de la flexibi- logusercolumn=login logpidcolumn=pid loghostcolumn=host lité offerte par vsftpd ! logtimecolumn=time En plus de vsftpd, il existe d’autres serveurs utilisant le protocole FTP Script 6. Personnalisation des droits pour l’utilisateur user1 pour Linux, parmi lesquels ProFTPd et Pure-FTPd. Si la configuration d’un # mkdir /var/ftp/user1 serveur FTP en utilisant la ligne de # chown ftp:ftp /var/ftp/user1 commande ne vous convient pas, uti- # echo “local_root=user1” > /etc/vsftpd/vsftpd_user_conf/user1 lisez une des nombreuses interfaces # echo “write_enable=YES” >> /etc/vsftpd/vsftpd_user_conf/user1 graphiques disponibles : # echo “anon_upload_enable=YES” >> /etc/vsftpd/vsftpd_user_ ↵ conf/user1 JJ System-Config-vsftpd et # echo “anon_mkdir_write_enable=YES” >> /etc/vsftpd/vsftpd_ ↵ KVsftpdManager pour vsftpd, user_conf/user1 JJ GProftpd et jProftpd pour Pro- # echo “anon_other_write_enable=YES” >> /etc/vsftpd/vsftpd_ ↵ FTPd, user_conf/user1 JJ PureAdmin et KcmPureftpd pour Pure-FTPd. www.linuxidentity.com 17
Vous pouvez aussi lire