AngeZanetti.com

Internet et ses usages, développement Web et humeurs diverses

[Tuto] Monter son serveur ftp avec utilisateurs virtuels

Pour ceux qui me suivent sur Twitter vous avez du voir apparaitre le hashtag #mutualab. C’est en fait un projet que j’ai avec @WoldenAvro. Le but étant de mettre en place une plateforme d’échanges de “bout de codes qui marchent” entre développeurs qui bossent dans les nouveaux médias, plus particulièrement la réalité augmentée/UniversVirtuels.

Le projet est toujours en gestation, je vous en parlerai plus en détail à la rentrée mais pour le moment  je vais vous en faire une présentation technique. Avec Alain nous avons décidé que cette plateforme serait constituée d’une interface web style forum/wiki couplé à un serveur ftp pour présenter et héberger les différents projets mutualisés.

J’ai eu la charge de mettre en place le serveur web et ftp. J’ai décidé de partager cette expérience sous la forme d’un petit tuto, en espérant qu’il puisse vous aider si un jour vous venait à l’idée de monter votre serveur dédié.

Le but étant de vous montrer que c’est finalement pas très compliqué. Il faut quand même avoir quelques connaissances de base de Linux – pouvoir se déplacer dans l’arborescence en ligne de commande, savoir installer des paquets etc… – mais celui qui à utiliser Linux comme OS au moins une fois devrais s’en sortir. Au pire, et c’est ça qui est génial dans le libre, la documentation d’Ubuntu est là pour vous aider. Elle est super complète et si vous ne trouvez pas ce qu’il vous faut il reste les forums qui sont très actifs. Bref vous ne serez jamais seul au monde devant votre prompt :)

Le serveur à été loué chez un hébergeur mais ce tuto fonctionne tout aussi bien avec un vieux PC branché sur une ***box. La seule différence est en fait dans la première demi-heure de mise en place du serveur : Pour un serv loué il suffit de cliquer sur “Installer Ubuntu Server” pour avoir votre distribution Linux alors que pour un serveur maison il faut booter sur un CD préalablement téléchargé et gravé.

Dans les deux cas ce n’est pas très compliqué, il faut renseigner son nom et autres banalités et d’attendre 30min le temps que tout ces petits fichiers prennent place.

Alors une fois Linux installé sur votre machine de quoi a-t-on besoin ?

Pour tout ce qui est web – wiki/forum, urls et autres – on va utiliser le fameux LAMP. Cela veut dire Linux-Apache-Mysql-PHP et cela fait tourner beaucoup de choses. Tient ce blog par exemple tourne sur un LAMP :)

Pour installer un LAMP sous Linux rien de plus simple :

sudo apt-get install lamp-server^

Cette commande va vous installer Apache2, PHP5 et MySQL. Pour vérifier si cela fonctionne il suffit de taper l’IP du serveur dans votre Firefox et vous devriez tomber sur un joli :

It Works !

Cette page est automatiquement générée dans /var/www/ quand on installe Apache. En fait maintenant notre IP est automatiquement redirigée vers le répertoire /var/www/, cela ne me plait pas trop mais heureusement c’est configurable :)

Moi ce que je veux c’est un utilisateurs générique dont le dossier sera la racine du répertoire web. Dossier qui sera partagé ensuite avec tous les utilisateurs qui ont un compte sur le site de mutualab.

Je commence donc par créer cet utilisateur :

adduser mutualab

Comme tous les utilisateurs de Linux cet utilisateurs aura un répertoire /home/mutualab/ comme répertoire personnel. Créons un répertoire /www/ qui servira de dossier partagé. Attention aux permissions, ce dossier est par défaut protégé en écriture. Hop, on change ça avec un petit

chmod -R 777 /home/mutualab/www/

Ensuite il me suffit d’ouvrir le fichier /etc/apache2/sites-available/default et de remplacer DocumentRoot /var/www/ par

DocumentRoot /home/mutualab/www/

Reste maintenant le gros morceau : Mettre en place le serveur FTP et le faire fonctionner avec des utilisateurs virtuels. Pour ce projet j’ai choisi vsftpd, qui a la réputation d’être le plus sécurisé même si le protocole FTP est par nature trop peu “safe”.

N.B : Tout comme le choix d’Ubuntu plutôt que Debian c’est purement arbitraire rien ne vous empêche d’avoir le même résultat en prenant d’autres outils, c’est aussi ça la magie du libre :)

Pour installer vsftpd rien de plus simple :

sudo apt-get install vsftpd

Par défaut vsftpd est très très sécurisé et ne permet pas grand chose , surtout pas à des utilisateurs non enregistrés sur le système d’exploitation. Il va donc falloir mettre les mains dans le code, heureusement il y a un manuel en ligne et la doc Ubuntu.

Vsftp est un serveur FTP super complet, la doc liée ci dessus est en anglais et donne un peu le tournis, trop de fonctionnalités, trop d’options bref il faut faire le ménage dans tout ça :)

Je vous propose une copie de mon fichier /etc/vsftpd.conf, c’est commenté vous devriez pas avoir trop de mal à déchiffrer.

# Mode Daemon ou standalone
listen=YES
#
# Allow anonymous FTP?
anonymous_enable=NO
#
# Autoriser les utilisateurs locaux de se connecter au FTP
local_enable=YES
#
# Autoriser l'accès en écriture
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=077
#
# Message pour ceuq qui vont dans certains dossiers
dirmessage_enable=YES
#
#Utiliser l'heure locale
use_localtime=YES
#
#Garder un log de l'activités des utilisateurs
xferlog_enable=YES
#
#Permet de cacher la vraie identité du proprio du serv
hide_ids=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# Texte d'acceuil :
ftpd_banner=Bienvenue sur le FTP du  Mutualab.
#
#
#Options des utilisateurs du FTP
#--------------------------------
#Autoriser la connexions par des utlisateurs non locaux - On leur donne /home/mutualab/www/ comme rep commun
guest_enable=YES
guest_username=mutualab
local_root=/home/mutualab/www/
# Les utilisateurs locaux sont bloqués dans leur /home, ceux dans la liste sont Libres
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#
#
# Options de connexions
#------------------------
# Nbr de clients max, de cnx par clients, AFK max
max_clients=30
max_per_ip=3
idle_session_timeout=60
data_connection_timeout=120
#
# Debian customization
#------------------------
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem

Ensuite on crée la base de données qui va permettre de mettre les login-pass des utilisateurs de mutualab. Vous pouvez le faire avec une interface graphique comme phpMyadmin moi je vous donne la méthode en ligne de commande c’est beaucoup plus simple :)

sudo mysql -u root -p
mysql> 

CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'MOTDEPASSE_VSFTPD';
FLUSH PRIVILEGES;
USE vsftpd;

# Creation d'une table utilsateurs avec 4 champs (ID, NOM, PASS, CRYPTAGE)
CREATE TABLE `utilisateurs` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `NOM` TEXT NOT NULL , `PASS` TEXT NOT NULL , `CRYPTAGE` TEXT );

# Creation d'une table logging avec 6 champs (ID, USER, HOST, RHOST, MSG, TIME)
CREATE TABLE `logging` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `USER` TEXT NOT NULL , `HOST` TEXT NOT NULL , `RHOST` TEXT NOT NULL , `TIME` TEXT NOT NULL , `MSG` TEXT NOT NULL );

Avec cette configuration notre serveur FTP permet à tous les utilisateurs de se connecter au répertoire /home/mutualab/www/ avec leur login et pass qu’ils auront préalablement renseigné sur le site – et donc stocké dans la base de données MySQL. A noter que les utilisateurs seront “bloqués” dans ce répertoire et ne pourront ni se déplacer dans l’arborescence du système ni porté atteinte à la pérennité de celui-ci car ils n’auront pas les droits administrateur.

Pour que le serveur FTP puisse dialoguer avec la base de données on installe le paquet suivant :

sudo apt-get install libpam-mysql

Reste à configurer la connexion à la base de données. Pour cela on va utiliser PAM, et configurer le fichier /etc/pam.d/vsftpd

Encore une fois je vous livre la copie du mien :

# Standard behaviour for ftpd(8).                                                                                                                       
#auth required  pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
#@include common-account
#@include common-session
 #@include common-auth
#auth required  pam_shells.so
#-----------------------------------------------------
# Connexion avec logging en base de donnees des acces
auth required pam_mysql.so user=vsftpd passwd=*** host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1
account required pam_mysql.so user=vsftpd passwd=**** host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1

Et c’est tout ! Il suffit de tester en remplissant un champ de la base de données, vous verrez cela fonctionne nickel. Avec cryptage du mot de passe de l’utilisateur en plus.

J’espère que ce tuto pourra vous être utile, si vous avez des questions, des remarques n’hésitez pas !

6 Comments

  1. Bonjour, en cherchant a créer mon propre serveur, je suis tomber sur votre tutoriel (très bien fait soit dis en passant) je vous remercie beaucoup d’avoir pris le temps de le faire.

    J’ai par contre une question, j’ai réussis a arriver a la fin du tutoriel mais je ne parviens pas à me connecter avec filezilla, j’ai bien le connexion au serveur, mais lorsque le test utilisateur mot de passe est fait, j’ai droit a une réponse 503 Login incorrect après le mot de passe.

    Je suppose qu’il s’agit d’un problème avec le cryptage mais je ne parviens pas a voir quel est la solutions.

    Auriez vous une idées?

  2. Xavier

    September 30, 2010 at 13:23

    Bonjour zairaka,

    ça peut venir de pas mal d’endroits. Est ce que la base de données a bien été créée ?
    Est ce que les anciens login/pass fonctionne toujours ?

    J’ai eu le même soucis et finalement j’avais betement oublié d’installer libpam-mysql :)

    Si tout fonctionnait avant mais refuse de marcher depuis le login via bdd il doit y avoir une coquille dans le /etc/pam.d/vsftpd

    • Bonjour, la base de donnée à en effet été correctement créer, j’ai rentrer un utilisateur (même nom et mot de passe que mon compte linux).

      Les anciens log/pass, la je ne voit malheureusement pas de quoi tu parle.

      les installations ont toutes été faites (j’ai même formater et tout réinstaller propre pour être sur de pas avoir de boulette) quand au vsftpd, j’ai copier exactement ce que tu as marquer.

      Pour informations, j’ai changer dans tous les codes que tu as donner, le mutualab, par server, l’utilisateur que j’ai créer.

  3. Xavier

    October 1, 2010 at 14:30

    Tu dois avoir un problème de configuration de vsftpd. Il faudrait creuser un peu plus et c’est pas évident de t’aider ici dans les commentaires. Ouvre un topic sur le forum Ubuntu par exemple. Tu pourras poster tes fichiers config :)

    Ps: formaté ne sert a rien, il suffit de modifier les fichier de configuration !

  4. Bonjour,

    zairakai, je ne sais pas si tu as toujours le même problème mais dans le fichier /etc/pam.d/vsftpd il faut modifier

    passwd=*** -> *** ton mot de passe
    table=users -> table=utilisateurs
    passwdcolumn=mdp -> passwdcolumn=pass

    je crois qu’il y a eu un oublie de traduction.
    en espérant que cela puisse servir

    Xavier, merci pour ce tuto fort utile.

  5. Merci de l’info braamsviper, je testerais ca quand j’aurais du temps car depuis, j’ai installer xampp mais c’est pas la panacée pour la sécurité.

Répondre

© 2016 AngeZanetti.com

Theme by Anders NorenUp ↑