EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Configurer des utilisateurs virtuels sur le serveur ProFTPD

Historique

9 mars 2013 : Reprise de la page de l'ancien site de Païou et actualisation.

Difficulté

Pour : linuxien averti.

Introduction

Le File Transfer Protocol est un protocole qui permet à des ordinateur distants d'échanger des fichiers à travers un réseau.
Les applications sont multiples :

Vous avez peut-être besoin de définir des permissions pour des utilisateurs autres que ceux qui sont enregistrés sur le serveur FTP : des utilisateurs virtuels. Cela peut être le cas lorsque qu'un utilisateur est déclaré sur son poste de travail, mais qu'il doit accéder à un espace qui lui est réservé, sur le serveur.

Haut

Fonctionnement, installation configuration

Rendez-vous à la page Installer et configurer le serveur ProFTPD, puis revenez ici.

Haut

Utilisateurs virtuels

Vous avez peut-être besoin de définir des permissions pour des utilisateurs autres que ceux qui sont enregistrés sur le serveur FTP : des utilisateurs virtuels.

Définition d'un utilisateur virtuel

Un utilisateur virtuel est, tout simplement, un utilisateur qui n'est pas défini dans le fichier /etc/passwd.

Haut

La problématique

L'identification des utilisateurs

Le fichier /etc/passwd associe notamment un nom d'utilisateur, donné par l'administrateur système, à un identifiant d'utilisateur (UID) et un identifiant de groupe (GID).
Le noyau Linux ne traite pas les utilisateurs par leur nom d'utilisateur, mais par leurs UID et GID. Toute application peut y rechercher les identifiants associés à un nom d'utilisateur, lorsqu'elle en a besoin.

Définir des utilisateurs hors de /etc/passwd a comme conséquence que les utilitaires système comme ls et chown ne fonctionnent plus comme prévu.
Lors de la mise en place d'utilisateurs virtuels, la plupart des administrateurs système rencontrent des problèmes de permissions avec, comme conséquences :

Les problèmes de permissions sont presque toujours provoqués par une non concordance des ID. L'UID et/ou GID de l'utilisateur virtuel ne correspond pas au UID et/ou GID du propriétaire du répertoire ou du fichier.

Haut

Encore quelques considérations

Quels IDs faut-il utiliser pour les utilisateurs virtuels ?

Vous êtes libre d'utiliser les identifiants que vous souhaitez. Une bonne idée est de prendre, pour vos utilisateurs virtuels, des identifiants autres que ceux de /etc/passwd. Les privilèges des utilisateurs de votre système restent ainsi distincts des privilèges de vos utilisateurs virtuels, puisque les privilèges sont déterminés par les IDs.
Mageia attribue des ID démarrant à 500 (d'autres distributions débutent avec 1000). Avec Mageia, la numérotation des utilisateurs virtuels pourra commencer à 800, par exemple. Et dans aucun cas, il ne faut utiliser UID=0 ni GID=0.
Si tous les utilisateurs virtuels ont les mêmes privilèges, vous leur attribuerez les mêmes IDs.

Confinez les utilisateurs virtuels

En général, ces utilisateurs virtuels ne doivent pas pouvoir accéder ailleurs que dans la partie d'arborescence qui leur est attribuée.
Assurez-vous que vous avez bien la directive DefaultRoot ~dans le fichier /etc/proftpd.conf.

Pas de shell pour les utilisateurs virtuels

Ces utilisateurs ne doivent pas pouvoir passer des commandes sur le serveur. Vous allez leur attribuer /bin/false comme interpréteur de commandes.

Pour vérifier son existance, dans une console root :
cat /etc/shells

Pour l'ajouter, toujours dan la console root :
echo /bin/false >> /etc/shells

Comment définir les utilisateurs virtuels ?

Vous avez vu qu'ils ne sont pas définis par /etc/passwd. Vous ne les trouverez pas plus dans le fichier proftpd.conf.
Mais il existe plusieurs possibilités : AuthUserFile, répertoire LDAP, bases de données SQL, serveur RADIUS.

L'un des mécanismes d'authentification simples est donné par les directives AuthUserFile et AuthGroupFile, qui définissent deux fichiers texte simples, dans le même format que /etc/passwd et /etc/group. Pour créer les fichiers avec les utilisateurs, il existe un outils : ftpasswd. Il est intégré sans le paquet proftpd à partir de Mageia 3.

L'outil

Si vous ne l'avez pas, téléchargez-le. Dans une console root :
aria2c -d /usr/bin http://paiiou.free.fr/Tuto/Net/ftpasswd
chmod 755 /usr/bin/ftpasswd

Un utilisateur

Pour créer un utilisateur, ftpuser dont le répertoire sera /home/ftp, toujours dans une console root :
cd /etc pour placer le résultat dans le bon répertoire, ensuite :
ftpasswd --passwd --name=ftpuser --uid=800 --gid=800 --home=/home/ftp --shell=/bin/false
Vous devrez définir le mot de passe pour l'utilisateur virtuel ftpuser.
Cette commande va créer un fichier /etc/ftpd.passwd (s'il n'existe pas encore) et va y ajouter l'utilisateur ftpuser.

Faites pareil pour tous les utilisateurs virtuels que vous voulez créer.

Un groupe

Il faut également créer le groupe, par exemple ftpgroup
ftpasswd --group --name=ftpgroup --gid=800 --member=ftpuser
Cette commande va créer un fichier /etc/ftpd.group (s'il n'existe pas encore) et va y ajouter le groupe ftpgroup.

Faites pareil pour tous les groupes virtuels que vous voulez créer.

Valider les fichiers créés

La configuration de proftpd doit pendre en compte ces nouveaux fichiers.

Dans votre console root, modifiez le fichier /etc/proftpd.conf :
mousepad /etc/proftpd.conf
Ajoutez les deux lignes suivantes :
AuthUserFile /etc/ftpd.passwd
AuthGroupFile /etc/ftpd.group

Comment changer les IDs des répertoires/fichiers ?

Si besoin, créez le(s) répertoire(s) dédié(s). Toujours dans la console root :
mkdir /home/ftp (le répertoire que vous leur avez attribué avec la commande ftpasswd)

Il faut changer les propriétés du répertoire destiné aux utilisateurs virtuels, de façon à ce qu'il corresponde aux UID et GID des utilisateurs virtuels.
chown -R 800:800 /home/ftp

Haut

Un premier exemple de configuration

Supposons que vous ayez un petit réseau familial, avec un ordinateur faisant office de serveur. C'est également sur cet appareil que se font les sauvegardes des autres ordinateurs de la famille. Les trois utilisateurs sont : Manon, Papet et Ugolin.
Vous ne souhaitez pas attribuer, sur ce serveur, un compte à chaque membre de la famille. Toutefois, chacun doit avoir son espace personnel accessible par ftp et vous décidez de placer ces espaces personnels dans le répertoire /home. Souvenez-vous, /home est en fait une partition indépendante. Vous ne la formaterez pas lorsque, pour une raison ou une autre, vous réinstallerez le serveur. Les sauvegardes seront ainsi préservées.

Haut

Fichier de configuration /etc/proftpd.conf

Vous pouvez partir du fichier d'un serveur FTP de base (permettant à chaque utilisateur enregistré sur le serveur d'accéder à son répertoire) ou partir du fichier d'un serveur FTP anonyme (permettant également à n'importe qui d'accéder à un répertoire bien défini, généralement /var/ftp/).
Il suffit d'y ajouter les deux directives suivantes :
AuthUserFile /etc/proftpd.passwd
AuthGroupFile /etc/proftpd.group

Pour les curieux,ces deux directives peuvent être plus complètes; survolez la ligne : le détail des possibilités

En fait, ces deux directives peuvent être plus complètes :

  • définir une fourchette pour les IDs
  • définir les répertoires valides, sous la forme de regex (expression rationnelle)
  • définir les identifiants valides, sous la forme de regex (expression rationnelle)

Voici un exemple :
AuthUserFile /etc/proftpd/passwd id 2000-2500 name ^ftp home !^/home
id 2000-2500 : les IDs doivent être compris entre 2000 et 2500
name ^ftp : les identifiants doivent tous commencer par ftp
home !^/home : le répertoire de base ne doit pas commencer par /home

Haut

Liste des interpréteurs de commande

Vous décidez d'attribuer le shell /bin/false à tous les utilisateurs virtuels.
Il faut éventuellement l'ajouter à la liste des shells.

Pour l'ajouter, toujours dan la console root :
echo /bin/false >> /etc/shells

Haut

Création des trois utilisateurs virtuels manon, papet et ugolin

Ils auront les UIDs et GIDs respectifs 801, 802, 803.

cd /etc pour placer le résultat dans le bon répertoire, ensuite :
ftpasswd --passwd --name=manon --uid=801 --gid=801 --home=/home/manon --shell=/bin/false
ftpasswd --passwd --name=papet --uid=802 --gid=802 --home=/home/papet --shell=/bin/false
ftpasswd --passwd --name=ugolin --uid=803 --gid=803 --home=/home/ugolin --shell=/bin/false

Haut

Création des trois groupes virtuels

ftpasswd --group --name=manon --gid=801 --member=manon
ftpasswd --group --name=papet --gid=802 --member=papet
ftpasswd --group --name=ugolin --gid=803 --member=ugolin

Haut

Préparation des répertoires

Il reste à préparer les répertoires d'accueil des utilisateurs virtuels

Dans le terminal, encore ouvert en mode root :
mkdir /home/manon
chown 801:801 /home/manon
mkdir /home/papet
chown 802:802 /home/papet
mkdir /home/ugolin
chown 803:803 /home/ugolin

Haut

Un deuxième exemple de configuration

Le serveur ftp comprend un répertoire /home/sources, commun aux trois. Ils s'en servent pour réaliser des travaux communs.

La solution la plus simple, tout en préservant le cantonnement des utilisateurs (virtuels et réels) dans leur espace, consiste à créer un utilisateur virtuel sources auquel se connecteront les utilisateurs concernés.
Chaque utilisateur virtuel se connectera sous le pseudo "sources" pour accéder au répertoire commun et non sous son login habituel.
Petit inconvénient : tous les documents appartiendront à sources, sans indiquer quel en est l'auteur réel.

Vous devrez :

Haut

Un troisième exemple de configuration

Dans ce troisième exemple, il s'agit de combiner les utilisations des exemples précédents : travail en commun et répertoire personnel.

La solution consiste à créer les trois utilisateurs virtuels comme dans le premier exemple, mais les utilisateurs appartiendront au groupe sources.
Ils auront leur répertoire personnel plus un répertoire commun /home/sources.
Ils se connecterons sous leur login habituel : manon, papet ou ugolin.

Vous devrez :

Haut

Les hôtes virtuels (Ce paragraphe est en travaux)

La même machine physique peut abriter un ou plusieurs serveurs ProFTPD supplémentaires : des hôtes virtuels.
Les utilisateurs peuvent y accéder en donnant une adresse IP différente ou un port différent (ou les deux).

Rendez-vous à la page Configurer le serveur ProFTPD pour des hôtes virtuels Cliquez.

Haut