Mise en place d'un serveur FTP sous CentOS 6.2

La page est créée Pascal Robin
 
CONTINUER À LIRE
Mise en place d'un serveur FTP sous CentOS 6.2
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
Mise en place d'un serveur FTP sous CentOS 6.2
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
Mise en place d'un serveur FTP sous CentOS 6.2
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