VII. MISE EN PLACE DU SERVICE FTP
FTP (File Transfert Protocol) est
un service utilisé, comme son nom l'indique, pour le transfert de
fichiers. Par convention, il utilise les ports 20 et 21.
A. Installation
Le package a installer est :
wu-ftpd
Remarques :
-
Si vous souhaitez mettre en place un
serveur FTP anonyme, vous aurez besoin d'installer le package anonftp.
Celui-ci permet de mettre en place une structure de fichiers dans le répertoire
/home/ftp/
et contient quelques utilitaires (tar,
compress,
gzip,
etc.) qui sont mis à la disposition des utilisateurs anonymes.
-
Pour tester le bon fonctionnement de
votre serveur FTP, le mieux est d'utiliser un client FTP. Le package ftp
en contient un qui fonctionne en ligne de commande. C'est celui que nous
utiliserons pour faire nos vérifications.
-
Sachez que certaines distributions
mettent à votre disposition plusieurs démons FTP (par exemple
BeroFTPD)
qui offrent différentes options plus ou moins intéressantes.
B. Configuration
Pour permettre à votre PC
de devenir un serveur FTP, il faut lancer le démon ftpd.
Là encore, ceci est généralement assuré par
le service INET. Editez le fichier /etc/inetd.conf
et ajoutez, si elle n'existe pas déjà, la ligne suivante
:
ftp |
stream |
tcp |
nowait |
root |
/usr/sbin/tcpd |
in.ftpd
-l -a -t 300 |
L'option -l
spécifie que toutes les tentatives de connexion doivent être
enregistrées dans un fichier (en général /var/log/messages).
L'option -a
spécifie qu'il faut tenir compte du fichier /etc/ftpaccess
comme fichier de configuration.
L'option -t
300 spécifie que le démon ftpd
fermera la connexion au bout de 300 secondes (5 mn) d'inactivité
de la part de l'utilisateur.
La suite de la procédure
d'installation est la même que pour le service TELNET. Pour vérifier
que tout fonctionne, tapez la commande :
ftp 127.0.0.1
Si le serveur vous demande un nom
de login et un mot de passe, alors ça fonctionne.
C. Gestion des utilisateurs
Les possibilités de configuration
du démon ftpd
sont très nombreuses. Nous allons voir les plus courantes, grâce
aux fichiers /etc/ftpusers
et /etc/ftpaccess.
Tout d'abord, sachez que seuls les
utilisateurs ayant un shell valide peuvent ouvrir une session FTP. Cela
implique que si vous utilisez les scripts noshell,
telnetonly
et
ttyonly, dans
l'état actuel des choses, les utilisateurs correspondants ne peuvent
pas profiter du service FTP. Pour remédier à ça, il
faut déclarer ces nouveaux shells dans le fichier /etc/shells.
a) Le fichier
/etc/ftpusers
Il contient une liste de noms d'utilisateurs
qui ne sont pas autorisés à ouvrir de session FTP.
b) Le fichier
/etc/ftpaccess
Il contient les droits des utilisateurs.
Pour commencer, il faut obligatoirement définir au moins une classe
d'utilisateurs. Editez votre fichier
/etc/ftpaccess.
Par défaut, il doit contenir une ligne qui ressemble à :
class all anonymous,guest,real
*
all
est le nom que l'on donne à la classe. Le mot clé anonymous
désigne les utilisateurs anonymes qui se connectent en donnant leur
adresse e-mail en guise de mot de passe. Ces utilisateurs ont des droits
limités et ne peuvent, entre autres, pas accéder au répertoire
parent de leur répertoire par défaut. Le mot clé guest
spécifie les utilisateurs ayant les mêmes droits restreints
que les anonymes, mais ceux-ci doivent obligatoirement entrer un vrai non
de login ainsi qu'un véritable mot de passe pour se connecter. Le
mot clé real
spécifie les utilisateurs réels qui ont les droits correspondant
aux droits qu'ils ont quelque soit le type de session qu'ils ouvrent (par
défaut, un utilisateur présent dans le fichier /etc/passwd
mais dont l'accès n'est pas restreint dans le fichier /etc/ftpaccess
est considéré comme un utilisateur réel). Le mot clé
*
désigne tous les postes clients, quelque soit leur adresse IP. La
classe all englobe
donc ici tous les types d'utilisateurs qui sont susceptibles de se connecter.
Si vous ne souhaitez pas autoriser les connexions anonymes, le mot clé
anonymous
ne doit figurer dans aucune classe (même chose pour guest
et real).
Examinons quelques autres mots clés
:
-
loginfails
spécifie le nombre de tentatives infructueuses d'authentification
d'un utilisateur avant de fermer la connexion.
Exemple : loginfails
3 n'autorise que 3 tentatives d'authentification
avant de fermer la connexion.
-
limit
spécifie le nombre d'utilisateurs maximum connectés en même
temps.
Exemple : limit
all 10 Any /etc/msgs/msg.dead spécifie
que seulement 10 utilisateurs appartenant à la classe
all
peuvent se connecter en même temps et que le message contenu dans
le fichier /etc/msg/msg.dead
sera envoyé au 11ème utilisateur qui tente de
se connecter avant de lui refuser la connexion.
-
shutdown
spécifie le fichier contenant le texte à afficher afin de
prévenir les utilisateurs que le serveur FTP va être arrêté
(pour cause de maintenance, par exemple). Ce fichier contient également
des paramètres indiquant à quel moment afficher ce message
et quand ne plus autoriser de nouvelles connexions.
Exemple : shutdown
/etc/shutmsg.ftp indique le fichier contenant
les paramètres à lire lors de l'arrêt du serveur. Ce
fichier a un format particulier. L'utilitaire
/bin/ftpshut
permet de générer facilement un tel fichier. Tapez man
ftpshut pour en savoir plus.
-
message
définit le fichier contenant le message à afficher après
chaque authentification réussie.
Exemple : message
/etc/welcome.ftp désigne welcome.ftp
comme étant le fichier contenant le message à afficher. Ce
fichier peut contenir différents drapeaux qui permettent d'afficher
des informations dynamiques comme par exemple, l'heure et la date locale
(grâce au drapeau %T).
Tapez man ftpaccess
pour en savoir plus.
-
realuser
spécifie un utilisateur qui a les droits d'un utilisateur réel.
Cet utilisateur doit exister dans le fichier /etc/passwd.
Exemple : realuser
toto désigne
toto
comme utilisateur réel.
-
guestuser
désigne un utilisateur particulier qui a les droits guest.
Cet utilisateur doit exister dans le fichier /etc/passwd.
Exemple : guestuser
toto désigne
toto
comme utilisateur guest.
-
realgroup
désigne un groupe d'utilisateurs qui ont les droits d'un utilisateur
réel. Ce groupe doit exister dans le fichier /etc/group.
Exemple : realgroup
pub désigne tous les utilisateurs appartenant
au groupe pub
comme des utilisateurs réels.
-
guestgroup
désigne un groupe d'utilisateurs qui ont les droits d'un utilisateur
guest.
Ce groupe doit exister dans le fichier /etc/group.
Exemple : guestgroup
pub désigne tous les utilisateurs appartenant
au groupe pub comme des utilisateurs
guest.
-
guest-root
spécifie le répertoire au delà duquel un utilisateur
avec les droits guest
n'a palus accès.
Exemple : guest-root
/home/ftp désigne le répertoire
/home/ftp
comme le répertoire racine d'un utilisateur invité.
-
anonymous-root
spécifie le répertoire au delà duquel un utilisateur
anonyme n'a plus accès.
Exemple : anonymous-root
/home/ftp désigne le répertoire
/home/ftp
comme le répertoire racine d'un utilisateur anonyme.
Remarque : le mot clé
guest-root
s'applique à tous les utilisateurs qui ont le droit guest,
ce qui implique qu'ils ont tous le même répertoire racine.
Dans certains cas, il est parfois nécessaire de définir un
répertoire racine différent suivant l'utilisateur. Pour cela,
il faut modifier la ligne correspondant à l'utilisateur concerné
dans le fichier /etc/passwd.
Prenons un exemple : supposons que je veuille que l'utilisateur toto,
ayant les droits guest,
ait comme répertoire par défaut /home/ftp/pub,
et comme répertoire racine /home/ftp.
Dans le fichier /etc/passwd,
il faut écrire :
toto:x:504:504::/home/ftp/./pub:/bin/bash
Ainsi, lorsque toto
se connecte, il arrive directement dans le répertoire /home/ftp/pub,
peut s'il le souhaite changer de répertoire, mais ne peut aller
au delà de /home/ftp.