Loloinfo - Trucs & Astuces

Quelques conseils et retours d'expérience en informatique

Monter un serveur local FTP sous Linux

Le partage c'est bien, mais pas n'importe comment !

Partager une partie du contenu d'un ordinateur suppose d'en proposer un accès au travers d'internet. La plupart des gens utilisent les logiciels de réseaux sociaux et de messagerie pour une diffusion optimale (Trop peut-être ?) de leurs photos, vidéos ou musiques, sans forcément bien maitriser les destinataires.

Une autre solution consiste à créer un serveur sur l'ordinateur pour proposer une passerelle entre les fichiers et l'ordinateur distant au travers du réseau FTP (File Transfert Protocol). Il fonctionne schématiquement comme le réseau HTTP (les pages WEB), avec le même système d'adresses, sauf qu'il est destiné aux échanges de fichiers.

La machine qui stocke et propose les fichiers est appelée "serveur". Celle qui demande et reçoit appelée "client". Oui, comme au resto....


Adresse statique

La première chose à faire est de s'arranger pour que notre ordinateur puisse être contacté jour après jour. Notre fournisseur d'accès nous attribue des adresses (204.35.128.14 par ex.) qui changent en permanence. A chaque demande de connexion, nous sommes obligés de renvoyer notre adresse Ip du moment.
Il faut dont une adresse statique. Des sociétés proposent des services gratuits, comme No IP ou bien DynDNS. Il en existe d'autres.


Installer le serveur

Pour aller à l'essentiel, on va supposer que vous avez réussi à transformer votre adresse en quelque chose de fixe.

Nous allons maintenant installer un serveur FTP. Mon choix s'est porté sur vsFTPd. Il est assez simple à paramétrer et un tas de tutos sont là pour nous aider. Il est surtout très bien sécurisé.

Avec les Debians (y compris Ubuntu et Mint), il suffit de taper en lignes de commande :

Création du répertoire de vsFTPd :

machintruc@monmicro:~$ sudo mkdir /etc/vsftpd

Installation à partir des miroirs

machintruc@monmicro:~$ sudo apt-get install vsftpd

Le serveur est maintenant en place, mais ouvert à tous, sans restriction. Il faut donc choisir qui rentre et qui rentre pas.


Faire du tri dans ses amis

Première opération, créer une liste avec les noms des amis qui auront le droit de visiter votre serveur, et le mot de passe qu'on leur a attribué. Nous allons utiliser l'authentification PAM, au moyen de la base de données db-utils et d'un petit fichier texte

Pour la liste, c'est très simple, on crée un fichier en .txt directement dans le dossier vsFTPd, qui va ajouter en une colonne les noms et les mots de passe, comme ceci :


login.txt

machintruc@monmicro:~$ sudo gedit /etc/vsftpd/login.txt

Il faut penser à laisser une ligne vide en bas de la liste avant de sauver

Il faut ensuite installer la base de donnée pour gérer les noms. A l'heure où j'écris, nous en sommes à la version 4.8, mais elle évolue avec le temps

machintruc@monmicro:~$ sudo apt-get install libdb4.8 db4.8-util

Et d'intégrer la liste dans la base en changeant le nom :

machintruc@monmicro:~$ sudo db4.8_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

machintruc@monmicro:~$ sudo chmod 600 /etc/vsftpd/login.db   (Pour l'attribution des droits)

Il faut maintenant informer le module PAM qu'il doit utiliser notre base de données en créant un nouveau fichier:

machintruc@monmicro:~$ sudo gedit /etc/vsftpd/vsftpd.pam

Et on va mettre dedans :

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

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

Pour terminer, il faut envoyer une copie dans le dossier PAM. (Si une copie existe déjà, il faut l'écraser)

machintruc@monmicro:~$ sudo cp /etc/vsftpd/vsftpd.pam /etc/pam.d/vsftpd


Les dossiers de partage

Nos amis ayant droit n'existeront pas réellement dans le système. Nous allons donc leur offrir un compte utilisateur bien à eux. Peu importe le nom. Pour ma part, j'ai choisi "virtual" dans le groupe "vsftp". (parce que la plupart des tutos ont fait de même...)

machintruc@monmicro:~$ groupadd vsftp

machintruc@monmicro:~$ useradd -g vsftp -d /home/vsftp/virtual/ virtual

Ce qui a pour effet de créer un utilisateur virtuel, dans lequel tous les invités qui se connecteront seront coincés.

Il faut maintenant donner une existence réelle à ces dossiers :

machintruc@monmicro:~$ sudo mkdir -p /home/vsftp/virtual   (Création du dossier)

machintruc@monmicro:~$ sudo chown root:vsftp ~virtual/   (L'administrateur seul pourra le modifier)

machintruc@monmicro:~$ sudo chmod 2750 ~virtual/   (Tout appartiendra au groupe vsftp)


Configuration du serveur

Nous devons maintenant éditer et configurer le serveur :

machintruc@monmicro:~$ sudo gedit /etc/vsftpd.conf

et le paramétrer ainsi :

# Ceci configure vsFTPd en mode "standalone"
listen=YES

# On désactive les connexions anonymes
# et on active les non-anonymes(c'est le cas des utilisateurs virtuels):
anonymous_enable=NO
local_enable=YES

# Pour des raisons de sécurité on interdit toute action d'écriture:
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# 'guest_enable' est très important: cela active les utilisateurs virtuels!
# 'guest_username' fait correspondre tous les utilisateurs virtuels à
# l'utilisateur 'virtual' que nous avons défini plus haut, et au home
# correspondant: '~virtual/'.
guest_enable=YES
guest_username=virtual

# On veut que les utilisateurs virtuels restent chez eux: '~virtual/'
chroot_local_user=YES

# On défini le nombre maximum de sessions à 200(les nouveaux clients recevront
# un message du genre: "erreur: serveur occupé").
# On défini le nombre maximum de sessions par IP à 4
max_clients=200
max_per_ip=4

# On gère chaque utilisateur différemment

user_config_dir=/etc/vsftpd/vsftpd_user_conf

# Debian customization
# (ou adoptons la debian attitude)

# 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
#
# 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/certs/vsftpd.pem

redémarrez le serveur :

machintruc@monmicro:~$ sudo restart vsftpd


Attribuer les permissions

Il faut donner des droits particuliers à chaque utilisateur, alors on crée un dossier utilisateur. C'est celui sur lequel pointe le fichier de configuration de vsftpd :

machintruc@monmicro:~$ sudo mkdir /etc/vsftpd/vsftpd_user_conf/

Et dans ce dossier, pour chaque utilisateur enregistré on crée un fichier à son nom avec la commande d'édition

machintruc@monmicro:~$ sudo gedit /etc/vsftpd/vsftpd_user_conf/utilisateur1

Et on y insère les commandes suivantes :

anon_world_readable_only=NO
anon_upload_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=Yes
local_root=utilisateur1

Il faut maintenant créer des répertoires dédiés à chaque utilisateur et en modifier les droits d'accès:

machintruc@monmicro:~$ cd ~virtual/

machintruc@monmicro:~$ mkdir utilisateur1 utilisateur1/upload utilisateur2 utilisateur2/upload

machintruc@monmicro:~$ sudo chmod 2750 utilisateur1/ utilisateur2/

machintruc@monmicro:~$ sudo chmod 770 utilisateur1/upload utilisateur2/upload"

Pensez à redémarrer le serveur :

machintruc@monmicro:~$ sudo restart vsftpd

Maintenant, vous pouvez, et vos destinataires également peuvent déposer et récupérer des fichiers dans leur dossier personnel. Ils ne pourront pas emprunter celui du copain d'à coté et n'en connaîtront même pas l'existence


Sources :


- vsftpd.beasts.org
- Developpez.com - vsftpd
- vsftpd Wiki Linux SHM
- Andesi.org - Vsftpd, un serveur ftp sécurisé et simple