• Aucun résultat trouvé

page discussion voir le texte source historique Documentation

N/A
N/A
Protected

Academic year: 2022

Partager "page discussion voir le texte source historique Documentation"

Copied!
11
0
0

Texte intégral

(1)

Documentation Submit Query

   

   

   

discussion voir le texte source historique page

(2)

groupe d'installation qui lui est dédié. Nous utilisons ce dernier pour l'installation : 

Une fois l'installation effectuée, pour que le serveur se lance automatiquement au démarrage : 

Pour démarrer, redémarrer et stopper le service, les commandes respectives sont (toujours en super utilisateur) : 

Normalement votre système doit déjà avoir un utilisateur ftp et un groupe ftp. Si ce n'est pas le cas, créez les avec groupadd etuseradd. 

3 Configuration 

Le fichier de configuration de vsftpd se trouve dans le répertoire /etc/vsftpd et se nomme vsftpd.conf. Nous partirons  d'une configuration vide, nous nous déplaçons donc dans le dossier, puis nous renommons le fichier : 

Nous créons ensuite un dossier qui contiendra les configurations spécifiques à chaque utilisateur : 

$ su -

# yum groupinstall "FTP Server"

# chkconfig vsftpd on

# service vsftpd start

# service vsftpd restart

# service vsftpd stop

Configurations

Il existe un grand nombre de possibilités de configuration, faisant varier le comportement du serveur de  façon très différente. Une lecture de la page de manuel de vsftpd reste indispensable pour une configuration  sûre. 

$ su -

# cd /etc/vsftpd

# mv vsftpd.conf vsftpd.conf.default

# mkdir vsftpd_user_conf

ftpusers et user_list

Ces deux fichiers ont la même vocation : interdire des utilisateurs. En effet il contiennent tous les deux une  liste d'utilisateurs pour lesquels le serveur ftp refusera toute connexion. Pourquoi deux fichiers (au contenu identique) ? 

Le premier (ftpusers) est utilisé via PAM dans la configuration par défaut faite sur Fedora et CentOS. A la  connexion d'un utilisateur, PAM vient lire ce fichier et si l'identifiant de connexion utilisé est dans ce  fichier, la connexion est refusée. 

Le second (user_list) est utilisé directement par vsftpd. Il peut avoir deux usages : soit les seuls  utilisateurs contenus dans ce fichier ont le droit de se connecter, soit l'accès leur est systématiquement refusé. 

On se fiche d'avoir une liste d'utilisateurs autorisés (second cas), puisque ceux-ci seront gérés avec une base d'utilisateurs virtuels. Il est donc inutile d'avoir ces deux systèmes d'interdiction. Mon choix pourrait être de  suivre la configuration par défaut faite par CentOS et Fedora, c'est-à-dire utiliser PAM, et donc supprimer le 

(3)

Dernière modification de cette page le 23 janvier 2009 à 09:06.

Contenu disponible sous Paternité 2.5 .

Ce site rassemble les utilisateurs francophones de Fedora et ne dépend pas du Projet Fedora fedora-fr est hébergé gracieusement chez   sur serveur 

Skin fedora-fr par Titax & LLaumgui

N'étant pas utilisé, on supprime le fichier ftpusers (vous pouvez tout à fait le conserver et sauter cette étape, au cas où  vous voudriez vous en servir ensuite, notez cependant que son contenu est par défaut le même que user_list) en root : 

Nous verrons plus loin la configuration de PAM pour qu'il n'aille plus chercher dans ce fichier. À vous de rentrer les 

identifiants que vous ne souhaitez pas voir se connecter dans user_list en plus de ceux par défaut. Cela sera pratique pour  désactiver un utilisateur virtuel, plutôt que de supprimer puis recréer son compte.Venons-en maintenant au fichier de  configuration à proprement parler : 

Vous êtes dans un fichier vide, puisque nous avons renommé celui par défaut. Vous trouverez tous les paramètres possibles  du fichier de configuration dans la page de man (man vsftpd.conf). Voici la configuration à entrer, avec la documentation de  chaque paramètre: 

fichier user_list alors inutile. Et pourtant ce n'est pas la solution que j'ai retenue. En effet il y a une petite  différence dans la façon de rejeter les utilisateurs. Si root (présent dans les deux fichiers par défaut) se  connecte : 

Premier cas (ftpusers) : le système PAM ne va pas réagir, et le mot de passe sera demandé. A partir de là,  même si ce dernier est correct, PAM va refuser la connexion car "root" est présent dans le fichier ftpusers. 

Second cas (user_list) : Vsftpd va lui réagir différemment. Lorsque le login sera demandé, et que  l'utilisateur tapera "root", il coupera directement la connexion, sans même demander le mot de passe.

C'est une subtilité, mais je préfère ce comportement. Le protocole FTP envoyant les données en clair, cela  évite par exemple d'envoyer le mot de passe root pour rien. Je vais donc utiliser le fichier user_list plutôt que  ftpusers, même si ce n'est pas le choix par défaut fait pour Fedora et Centos. 

# rm /etc/vsftpd/ftpusers

# vi /etc/vsftpd/vsftpd.conf

(4)

Petit résumé : 

On écoute sur le port 21  On est en standalone 

On refuse les utilisateurs anonymes 

On accepte les utilisateurs système et les utilisateurs virtuels  Les utilisateurs virtuels sont mappés sur l'utilisateur système "ftp" 

Les utilisateurs n'ont aucun droit d'écriture par défaut  Ils sont chrootés dans/var/ftp

/etc/vsftpd/vsftpd_user_conf/ sera le dossier pour les configurations d'utilisateurs virtuels

/etc/vsftpd/user_list contiendra la liste des utilisateurs refusés (pour lesquels on ne demandera même pas le mot de  passe) 

# http://vsftpd.beasts.org/vsftpd_conf.html ou "man vsftpd.conf"

# Port d'ecoute listen_port=21

# Banniere de bienvenue

ftpd_banner=Bienvenue sur mon ftp perso

# Fichier de config PAM pam_service_name=vsftpd

# Mode "standalone"

listen=YES

# Je ne veux pas de connexion anonyme anonymous_enable=NO

# On autorise les connexions des utilisateurs locaux. C'est indispensable

# pour que les utilisateurs virtuels (mappes sur un utilisateur local)

# puissent se connecter (les "vrais" utilisateurs locaux sont ensuite desactives

# avec le fichier user_list local_enable=YES

# Fichier de users

userlist_file=/etc/vsftpd/user_list

# Chargement de la liste userlist_file userlist_enable=YES

# On refuse les utilisateurs de la liste userlist_deny=YES

# trop restrictif, un utilisateur virtuel pourra ainsi telecharger un fichier meme s'il n'est pas world readable anon_world_readable_only=NO

# Refus des commandes influant sur le systeme de fichier (STOR, DELE, RNFR, RNTO, MKD, RMD, APPE and SITE) write_enable=NO

# Refus des droits d'ecriture pour les anonymes (et donc utilisateurs virtuels) par défaut

# les autorisations seront données au cas par cas :

# pas d'upload

anon_upload_enable=NO

# pas de creation de repertoire anon_mkdir_write_enable=NO

# pas de creation, suppression, renommage de repertoire ...

anon_other_write_enable=NO

# On fait en sorte que les utilisateurs "guest" (non-anonymes) soient mappés sur le compte local "ftp"

guest_enable=YES guest_username=ftp

# chroot des utilisateurs chroot_local_user=YES

# Nombre maximum de connexion simultanees max_clients=50

# Nombre maximum de connexion venant de la meme IP max_per_ip=4

# Dossier de configuration specifique des utilisateurs user_config_dir=/etc/vsftpd/vsftpd_user_conf

# On active le log xferlog_enable=YES

(5)

Pour plus de sécurité, on réduit les droits sur le fichier de configuration : 

4 Utilisateurs virtuels 

Il est temps maintenant de créer la base contenant nos utilisateurs virtuels. Comme je l'ai dit, nous nous laissons le choix du  format : berkeley ou mysql. Lisez le chapitre correspondant à votre choix de base. 

4.1 Format berkeley

Nous partirons d'un fichier texte simple, comprenant les logins et les mots de passe, puis nous utiliserons une commande  pour transformer ce fichier en format db. Le format du fichier est simplissime, un mot par ligne, et on écrit dans l'ordre le  login, le pass, le login, le pass, etc. Je vais créer une base contenant deux utilisateurs : 

titi dont le mot de passe est passtiti  toto dont le mot de passe est passtoto

Rendez-vous dans /etc/vsftpd et en root créez un fichier nommé login.txt : 

Et voici ce que contiendra le fichier :  Mapping utilisateur

Si les utilisateurs virtuels ne sont pas (par définition) des utilisateurs système, ils disposent tout de même de  droits (sur les fichiers, dossiers, en écriture, lecture...). Afin de pouvoir gérer ces droits, on "mappe" (relie)  ces utilisateurs à un utilisateur système unique (ici "ftp").

Ainsi les droits des utilisateurs virtuels en écriture et lecture seront ceux donnés à l'utilisateur système "ftp". 

Ces droits prévalent sur la configuration (même si un utilisateur virtuel a les droits d'écriture dans un dossier,  si l'utilisateur "ftp" ne les a pas, l'utilisateur virtuel ne pourra pas écrire). 

Standalone ?

Le mode standalone indique que le serveur est autonome, et que le service tourne en permanance. 

Xinetd est un meta-démon qui écoute les requêtes, et lance le démon approprié lorsqu'il est sollicité. L'intérêt  est donc de ne pas lancer un service et laisser xinetd se charger de le démarrer lorsqu'un utilisateur le 

sollicitera.

Il permet donc une économie de ressources (processeur, mémoire... et donc électricité). Il peut être 

intéressant de l'utiliser si la machine est déjà chargée ou/et si le service est très peu utilisé. En contre-partie  la première requête subira quelques délais, puisque le démon approprié devra être démarré.

Attention !

Pensez à ouvrir les ports 20 et 21 de votre pare-feu, et à faire une redirection de port si vous êtes derrière  un routeur. Si vous avez changé les valeurs de ces ports dans le fichier de configuration, modifiez vos pare- feu et routage en conséquence. 

# chmod 600 /etc/vsftpd/vsftpd.conf

$ su -

# cd /etc/vsftpd/

# vi login.txt

(6)

Nous allons maintenant créer le fichier db à partir de celui-ci. Pour cela nous devons utiliser la commande db_load, fournie par le package db4-utils. Si ce package n'est pas installé, faites-le de cette façon : 

Une fois cela fait, toujours depuis le dossier /etc/vsftpd, en root tapez : 

Nous verrons plus loin que l'on peut intégrer cette commande à un script pour regénérer plus facilement la base. Nous  disposons maintenant d'un fichier /etc/vsftpd/login.db. Pour plus de sécurité, on réduit les droits sur les fichiers utilisateurs : 

4.1.1 Se simplifier la vie 

La commande pour générer le fichier db à partir du txt est lourde à retenir, et de plus il est intéressant de pouvoir générer un  fichier de configuration spécifique vide pour chaque utilisateur pour ne pas avoir d'erreur. Voici un petit script (surement optimisable) appellé txt2db.sh faisant cela pour vous. Il regénère le fichier db, et créé un fichier de config vide s'il n'existe  pas. En voici le contenu : 

et son utilisation : 

titi passtiti toto passtoto

Attention !

Ce fichier doit se terminer par un retour à la ligne.

# yum install db4-utils

# db_load -T -t hash -f login.txt login.db

# chmod 600 login.*

#!/bin/sh

if [ $# = "2" ]; then         rm -f $2

        db_load -T -t hash -f $1 $2         chmod 600 /etc/vsftpd/login.*

        echo "Base cree"

        lignes=$(cat $1)         nb=1

        for ligne in $lignes         do

      if [ $(($nb%2)) -ne 0  ];

      then

      if [ ! -e vsftpd_user_conf/$ligne ];

      then

      touch /etc/vsftpd/vsftpd_user_conf/$ligne       echo "fichier $ligne cree"

      fi       fi

      nb=$(($nb+1))         done

else

        echo "Il faut donner le fichier d'entree et le fichier de sortie"

fi

(7)

Ce script lie les lignes du login.txt et pour chaque login, vérifie si un fichier de configuration existe. Si ce n'est pas le cas il en  crée un vide. Auparavant il génère le fichier db. L'autre souci est que si vous supprimez un utilisateur du login.txt, il restera  toujours le fichier spécifique de configuration. Voici un script appelé "cleanconf.sh" qui supprime tous les fichiers spécifiques  n'ayant pas de login associé. Son contenu : 

Son utilisation : 

Voila qui nous simplifiera un peu la vie. 

4.2 Base MySQL 

Le module pam_mysql offre l'avantage intéressant de pouvoir loguer dans la base de données les évènements relatifs aux  connexions. De plus, sa configuration souple permet de l'adapter à n'importe quelle table MySQL et donc ainsi de pouvoir  utiliser une base utilisateur déja existante (dans le cadre d'un hébergement multiservice par exemple). Pour l'exemple nous  créerons un utilisateur dont le login sera titi et le mot de passe sera passtiti. La base de données contenant les informations  seravsftpd. Les mots de passe de nos utilisateurs seront cryptés au formatmd5. Dans un premier temps, il faut installer le  module pam_mysql : 

Ensuite il faut démarrer le service mysqld : 

Créons la base de données. Nous aurons deux tables :

$ su -

# cd /etc/vsftpd/

# chmod +x txt2db.sh (à ne faire que la première fois)

# ./txt2db.sh login.txt login.db

fichiers=$(ls /etc/vsftpd/vsftpd_user_conf) users=""

lignes=$(cat /etc/vsftpd/login.txt) nb=1

for ligne in $lignes do

        if [ $(($nb%2)) -ne 0  ];

        then

      users="$users $ligne"

        fi

       nb=$(($nb+1)) done

for conf in $fichiers do

        found=0

        for user in $users         do

      if [ $conf = $user ];

      then

      found="1"

      fi         done

        if [ $found != "1" ];

        then

      rm -f vsftpd_user_conf/$conf       echo "Fichier $conf supprime"

        fi done

$ su -

# chmod +x cleanconf.sh

# ./cleanconf.sh

# yum install pam_mysql

$ su -

# service mysqld start

(8)

users : table des utilisateurs  log : évènements de connexion 

La table de log est optionnelle. Voici les scripts SQL à exécuter pour créer ces deux tables : 

Pour la table de sutilisateurs, nous utilisons un champ 'active' qui aura la valeur 1 ou 0 permettant de désactiver 

temporairement l'accès à un utilisateur sans pour autant en supprimer le compte. Pour la table de log, nous stockerons le  login incriminé, le message relatif à l'évènement, le pid, le host de la personne et la date et l'heure de l'évènement. 

Il ne nous reste plus qu'à utiliser un utilisateur : 

Vous remarquez que l'on crypte le mot de passe en md5, et que l'on active cette utilisateur (active=1). Vérifions que notre  utilisateur est ajouté : 

Notre utilisateur est bien ajouté. Si on souhaite lui interdire l'accès, on pourra soit supprimer son compte, soit mettre 'active'  à 0. 

5 PAM 

Notre base d'utilisateurs étant créée, configurons PAM pour qu'il l'utilise. Commeapache (par exemple), PAM utilise pour sa  configuration un dossier, /etc/pam.d/, comportant les fichiers de configuration des services qui l'utilisent. Un 

fichier /etc/pam.d/vsftpd existe déjà, mais comme je l'expliquais plus haut, je ne l'utilise pas dans son intégralité. Voici  donc le contenu complet que ce fichier doit avoir (et rien de plus). Utilisez le chapitre selon le type de base de donénes que  vous avez utilisé : 

5.1 Base berkeley 

CREATE TABLE  `vsftpd`.`users` (

`id_user` int(11) NOT NULL auto_increment,

`login` varchar(50) NOT NULL,

`password` varchar(100) NOT NULL,

`active` int(11) NOT NULL, PRIMARY KEY  (`id_user`)

) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 CREATE TABLE  `vsftpd`.`log` (

`id_log` int(11) NOT NULL auto_increment,

`login` varchar(50) NOT NULL,

`message` varchar(200) NOT NULL,

`pid` varchar(10) NOT NULL,

`host` varchar(30) NOT NULL,

`time` datetime default NULL, PRIMARY KEY  (`id_log`)

) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1

$ mysql -u <votre_user_mysql> --password=<votre_password_mysql> -e "INSERT INTO vsftpd.users (login,password,active) VALUES('titi',md5('passtiti'),1)"

$ mysql -u <votre_user_mysql> --password=<votre_password_mysql> -e "SELECT * FROM vsftpd.users"

+---+---+---+---+

| id_user | login | password       | active | +---+---+---+---+

|       1 | titi  | 7571fd2482115bad7310b422847f014e |      1 |  +---+---+---+---+

PAM

PAM (Pluggable Authentication Modules) est un système d'authentification modulaire permettant la gestion de  l'authentification des utilisateurs. Les programmes utilisant PAM n'ont pas besoin d'implémenter leur propre  gestion d'authentification. De plus, PAM permet d'établir des stratégies d'authentification et supporte de nombreux formats de stockage. 

(9)

Les lignes 2 et 3 permettent la connexion des utilisateurs système, les 4 et 5 la connexion des utilisateurs virtuels placés  dans notre base.

Attention, pour ceux utilisant une architecture 64 bits, les deux dernières lignes sont à remplacer par celles-ci : 

On peut relancer notre serveur : 

5.2 Base MySQL 

Tous les paramètres mis après 'where' ne sont à utiliser que si vous utilisez le log dans la base MySQL. J'ai utilisé '127.0.0.1'  pour le host, mais il faut évidemment l'adapter en mettant l'adresse IP de votre serveur MySQL. Voici en détail des 

paramètres :

verbose : permet d'afficher plus d'informations, seulement utile lors du deboggage  user : utilisateur mysql 

passwd : mot de passe mysql  host : hôte du serveur mysql  db : nom de la base de données 

table : nom de la table pour les utilisateurs

usercolumn : nom de la colonne contenant les logins

passwdcolumn : nom de la colonne contenant les mots de passe crypt : type de cryptage, 3 indique que l'on utilise du md5

where : close supplémentaire à rajouter dans la requête, ici on s'en sert pour utiliser le paramètre 'active'  sqllog : yes indique que l'on veut logger dans une table les évènements 

logtable : nom de la table contenant les logs 

logmsgcolumn : Nom de la colonne contenant le message de log  logusercolumn : Nom de la colonne contenant le login pour le log  logpidcolumn : Nom de la colonne contenant le pid pour le log  loghostcolumn : Nom de la colonne contenant le host pour le log 

logtimecolumn : Nom de la colonne contenant la date et l'heure pour le log  Plus d'infos sur pam_mysql sur cette page. 

#%PAM-1.0

auth sufficient pam_unix.so account sufficient pam_unix.so

auth       required     /lib/security/pam_userdb.so db=/etc/vsftpd/login account    required     /lib/security/pam_userdb.so db=/etc/vsftpd/login

auth       required     /lib64/security/pam_userdb.so db=/etc/vsftpd/login account    required     /lib64/security/pam_userdb.so db=/etc/vsftpd/login

$ su -lc "service vsftpd restart"

#%PAM-1.0

auth sufficient pam_unix.so account sufficient pam_unix.so

auth required /lib/security/pam_mysql.so verbose=0 user=<votre_user_mysql> passwd=<votre_pass_mysql> host=127.0.0.1 db=vsftpd table=users usercolumn=login passwdcolumn=password crypt=3 where=users.active=1 sqllog=yes logtable=log logmsgcolumn=message logusercolumn=login logpidcolumn=pid loghostcolumn=host logtimecolumn=time account required /lib/security/pam_mysql.so verbose=0 user=<votre_user_mysql> passwd=<votre_pass_mysql> host=127.0.0.1 db=vsftpd table=users usercolumn=login passwdcolumn=password crypt=3 where=users.active=1 sqllog=yes logtable=log logmsgcolumn=message logusercolumn=login logpidcolumn=pid loghostcolumn=host logtimecolumn=time

Attention !

Pour ceux utilisant une architecture 64 bits, dans les deux dernières lignes,/lib/security est à remplacer  par /lib64/security.

(10)

6 Attribution/Personnalisation des droits 

Testons notre serveur : 

Entrez "titi" pour utilisateur et "passtiti" comme mot de passe. La connexion doit être établie. 

Placez un fichier dans /var/ftp/ (lisible par l'utilisateur ftp) et reconnectez-vous. Une fois connecté, tapez la commande ls. 

Vous devez voir votre fichier. 

Si nous avons créé des utilisateurs virtuels, c'est pour que chacun d'eux puisse avoir des droits différents, et même leur  espace propre. Vous avez vu que dans la configuration, nous utilisons la directive

"user_config_dir=/etc/vsftpd/vsftpd_user_conf".

Ce dossier nous permet de stocker dans des fichiers séparés des configurations spécifiques à chaque utilisateur. Dans ces  fichiers, on entre des paramètres, les mêmes que ceux du fichier de configuration, qui seront prioritaires par rapport à ce dernier.

Généralement, on y modifie le "local_root" et les droits d'écriture. On y met un fichier par utilisateur, et le fichier porte le  même nom que le login de l'utilisateur auquel il fait référence. 

Créons un dossiertiti dans /var/ftp, changeons son propriétaire puis modifions le "local_root" et les droits d'écriture pour  cet utilisateur : 

Notez que l'on aurait pu mettre un répertoire absolu pour le "local_root", par exemple /var/www/html/le_site_de_titi,  mais en s'assurant que l'utilisateur ftp ait les droits adéquats sur ce dossier. Reconnectez-vous avec l'utilisateur titi, il vous  est maintenant possible de déposer des fichiers. Reportez-vous à la page de man pour les détails sur les paramètres de  configuration. 

7 Erreurs possibles

Il est possible que parfois lorsque vous vous connectez, vous rencontriez un de ces erreurs :  500 OOPS: reading non-root config file :

Cela intervient si l'utilisateur n'a pas de fichier spécifique dans /etc/vsftpd/vsftpd_user_conf (même vide). Il semble que ce soit un bogue. Si vous avez ce souci, créez un fichier pour cet utilisateur. Nous verrons ensuite que l'on peut faire  cela automatiquement.

500 OOPS: cannot change directory:<repertoire> : Dans ce cas, entrez : 

500 OOPS: vsftpd: refusing to run with writable anonymous root Il faut enlever le droit d'écriture sur le répertoire root : 

$ ftp localhost

# mkdir /var/ftp/titi

# chown ftp:ftp /var/ftp/titi

# echo "local_root=titi" > /etc/vsftpd/vsftpd_user_conf/titi

# echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/titi

# echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/titi

# echo "anon_mkdir_write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/titi

# echo "anon_other_write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/titi

$ su -lc "setsebool -P ftp_home_dir 1"

(11)

Ensuite il faut s'assurer que le local_root appartient bien au user et groupe ftp. 

8 Conclusion 

Voilà un serveur FTP prêt, avec une gestion facile d'utilisateurs virtuels. Il est de plus pour chaque utilisateur possible de  modifier chaque valeur de la configuration principale, ce qui rend la gestion des utilisateurs virtuels très souple. 

9 Références 

Manuel vsftpd.conf vsftpd sous debian

Catégories : Administrer un serveur dédié | Réseaux et Serveurs | Système

# chmod u-w /le/local/root

Références

Documents relatifs

The static code analysis class of tools is intended to provide, in structured schemes, further informations about the inside of an artistic work, including

According to the above presented results (Figs. 2, 3 and 4) which highlight the low anisotropy of sorghum roots, another simpler approach could be used that ignores root

This research proposes a model representation of the system functioning, malfunctioning, and identification of physical causes of failure based on the integration of Bayesian

 Gravimetric soil water measured weekly from sowing to 40 days after sowing (DAS) in 0-15 cm soil depth..  Root distribution, shoot dry matter (SDM) and crop nitrogen (N)

Finally, we will discuss on-going investi- gations to couple our model to water and soil nutrients models [4], and to take into account roots

calibration of the diffusion and advection operators; simulation results of non- centralized root growth provided by the RootTyp software (b) and by C-ROOT (c). Springer

Available information for theses varieties: Type (traditional or improved); Geographical origin (large region); Genetic group.. Sub-population

Anesthésie Réanimation Radiologie Physiologie Radiologie Pédiatrie Médecine Nucléaire Pédiatrie Endocrinologie et maladies métaboliques Microbiologie Psychiatrie Radiologie