Chapitre 01 - NFS
1. Présentation de NFS/RPC
1.1 Le protocole NFS
Le protocole NFS (Network file system) fût mis en place par Sun Microsystems en 1984 dans le but de
permettre l'accès à des ressources situées sur des hôtes distants.
Le système NFS permet de monter des volumes réseaux et d'y accéder de manière transparente pour
l'utilisateur.
1.2 RPC
NFS utilise la méthode de connexion RPC (Remote procedure call) également inventée par SUN. RPC décrit
une methode de type client/serveur utilisant le format XDR (eXternal Data Representation) ou chaque
service est representé par un numero indiqué dans le fichier /etc/rpc.
RPC fonctionne sur TCP/IP, un serveur RPC va faire la correspondance entre le numero de service RPC et le
port.
Lorsqu'un client se connecte au serveur RPC celui-ci lui envoie le numero de service auquel il veut acceder
et le serveur lui renvoi le port associé.
Le client n'a donc pas besoin de connaitre les details réseau. Les serveurs RPC disponibles se nomme
rpcbind et portmap, ceux-ci ecoutent sur le port 111 tcp/udp par defaut. RPC se situe au niveau de la
couche 5 (session) du modele OSI.
La commande rpcinfo permet de dialoger avec un serveur RPC (visualisation des tables...).
1/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
$ rpcinfo -p hostname
Il faut activer (si cela n'est deja fait) le support du systeme de fichiers NFS dans le noyau :
Pour cela rentrez dans le menu de configuration du noyau et activer le support du NFS (File systems ->
Network File Systems -> NFS file system support).
Dans le cas d'un serveur NFS il faut également activer le support du serveur NFS dans le noyau :
Pour cela rentrez dans le menu de configuration du noyau et activer le support du serveur NFS (File
systems -> Network File Systems -> NFS server support), cochez ensuite l'option "Provide NFSv3 server
support".
L'installation logicielle (NFS utils) permet d'obtenir les commandes clientes que nous etudirons un peu plus
loin ainsi que le daemon NFS et les scripts de demarrage associes.
Il faut pour cela telecharger l'archive sur le site http://nfs.sourceforge.net/ , la procédure d'installation est
la même que pour les autres logiciels.
./configure
make && make install
Le fichier de configuration du serveur se stitue dans /etc et se nomme exports, il contient tous les
répertoires partagés lors du demarrage du service ainsi que les options qui leur sont associees.
répertoire host1(options1,option2,...optionN)
host2(option1,option2,...optionN)....hostn(option1,option2,...optionN)
2/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
"répertoire" correspond au répertoire partagé, "host1(options)...." correspond aux machines qui le droit
d'accéder à ce répertoire. Les options indiquent de quelles manières les hôtes vont se connecter (Voir plus
loin dans ce chapitre).
Comme vous pouvez le remarquer NFS se base UNIQUEMENT sur le nom de machine (ou l'adresse IP), cela
est à prendre en compte lors de l'établissement des politiques de securité.
Vous pouvez utiliser l'opérateur '*' afin de spécifier que tout le monde à le droit de se connecter au
répertoire.
répertoire *(options)
Mode syncrone : c'est la valeur par défaut, lorsque un utilisateur effectue une operation (copie,
modification, création...), celle-ci est traitée directement par le serveur.
Avantage : Sécurité
Inconvénient : Lenteur
Mode asyncrone : lorsque un utilisateur effectue une opération (copie, modification, création...), celle-ci est
mise en "tampon", c'est à dire que le serveur vous rend la main avant d'avoir effectuer l'opération (avant
même d'avoir écrit le fichier ou autre sur le disque).
Rappel :
L'UID (User Identifier) est un numero unique sur le systeme representant un utilisateur unique (un
utilisateur possede un et un seul UID et un UID correspond a un et un seul utilisateur).
Le GID (Group Identifier) est la meme chose que l'UID sauf qu'il s'applique pour les groupes.
L'UID du super utilisateur 'root' est egal à 0. Le GID du groupe 'root' est egal à 0.
Comme nous l'avons vu précédemment, NFS se base sur les noms des machines, il faut donc trouver un
moyen de gérer les permissions ainsi que l'appartenance des ressources. Pour cela NFS se base sur
l'UID/GID du client, c'est à dire que si le client fait des manipulations sur le serveur NFS avec le compte
user1 (il s'agit du compte avec lequel la personne s'est connectée sur son poste de travail) qui a comme
UID 1001, le serveur NFS le considérera comme utilisateur 1001 local (cela peut pointer sur un autre
utilisateur).
Cela peut paraitre aberrant, mais il faut penser que NFS a été créé pour des réseaux de type
serveurs/terminaux où les UID etaient partout les mêmes.
Un autre probleme se pose, imaginons qu'une personne soit root sur un client et se connecte au serveur
NFS, son UID local est egal à 0 et donc le serveur lui attribue l'UID 0 sur le partage.
Pour palier à ce problème, NFS propose la possibilité d'imposer un UID/GID à tous les utilisateurs qui se
connectent à un répertoire (partage), on appele cela un UID/GID anonyme. Cela signifie que si on
configure l'UID/GID anonyme du partage à 4242/2121, tout les utilisateurs qui se connectent sur le partage
recevrons l'UID/GID 4242/2121. Cette directive s'applique à tous les utilisateurs sauf root, pour celui-ci une
3/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
directive spéciale permet d'indiquer que les utilisateurs se connectant avec un UID egal à 0 recoivent l'UID
anonyme.
Maintenant que nous avons passé en revue la "théorie", nous allons énumerer les principales options ainsi
que leur effet.
Option Effet
rw le client a les droits d'écriture
ro le client a seulement les droits de lecture
async active le mode asyncrone
sync active le mode syncrone (par défaut)
anonuid spécifie l'UID des utilisateurs anonymes
anongid specifie le GID des utilisateurs anonymes
all_squash tous les utilisateurs (sauf root) récupèrent l'UID anonyme
no_all_squash Les utilisateurs gardent leur UID (par défaut)
root_squash l'utilisateur root récupère l'UID anonyme (par défaut)
no_root_squash l'utilisateur root garde son UID (dangeureux !!!)
$ man exports
Exemple :
/ftp/films client1(rw,anonuid=1004,anongid=1006)
client2(ro,async)
/cours *(ro)
L'arborescence /ftp/films est accessible par les clients client1 (lecture/écriture, UID anonyme=1004 et GID
anonyme=1006) et client2 (lecture seule). L'arborescence /cours est accessible par tout le monde en
lecture seule.
Il est bien sûr possible de spécifier une adresse IP à la place du nom de machine.
3. Administration/Maintenance d'un
serveur NFS
3.1 Les differents daemons
daemon description
le deamon portmap permet de faire la correspondance numéro RPC/Port
portmap
(voir partie 2)
4/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
Les différents daemons cités précédemment doivent tous être lancés. Afin de nous faciliter la tâche, le
script d'init installé via les nfs-utils permet de lancer/arrêter automatiquement tous les daemons.
# /etc/init.d/nfs operation
opération effet
start démarrage des daemons
stop arrêt des daemons
restart redémarrage des daemons (stop + start)
status affiche l'état des daemons
Note:
selon la distribution utilisée d'autres options peuvent être disponibles.
Exemple :
# /etc/init.d/nfs start
La commande exportfs permet de manipuler les partages à "chaud" (lorsque que le serveur NFS tourne).
Exportfs permet de désactiver, activer (on parle aussi d'exportation), modifier et ajouter des partages.
option effet
-a exporte tous les partages contenus dans /etc/exports
-u désactive un partage
-ua désactive tous les partages contenus dans /etc/exports
-o permet de spécifier des options
5/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
Voici la procédure à suivre pour ajouter à "chaud" un nouveau partage (sans avoir besoin de redémarrer le
service NFS) :
Exemple :
Cette commande ajoute le répertoire /data pour la machine host1 avec comme options rw et async.
La commande showmount permet d'afficher les répertoires partagés d'un serveur NFS ainsi que les
machine ayant le droit d'y accéder.
$ showmount -e hostaname
Exemple :
# showmount -e nfs_server
Export list for localhost:
/data STS.esi-supinfo.com,localhost
Dans cet exemple l'hote nfs_server exporte le répertoire /data pour les machines localhost et STS.
$ man showmount
nfsstat affiche des statistiques NFS et RPC recuperées par le daemon rpc.statd.
option Effet
-s affiche uniquement les statistiques du serveur
-c affiche uniquement les statistiques du client
6/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
$ man nfsstat
Pour cela nous allons utiliser la commande mount. Il faut au préalable connaitre l'IP/nom du serveur ainsi
que le répertoire auquel on souhaite accéder (voir la commande showmount).
Les options sont propres à mount, voici celles utiles pour NFS :
option effet
si le montage échoue les tentatives suivantes se feront en avant-plan (par
fg
défaut)
bg si le montage échoue les tentatives suivantes se feront en arrière-plan
rw monte le partage en read/write (par défaut)
ro monte le partage en read only (lecture seule)
suid autorise l'utilisation de programmes suid (par défaut)
nosuid interdit l'éxécution de programmes suid
hard En cas d'échec, recommence l'opération jusqu'à sa réussite (par défaut)
soft abandonne l'opération en cas d'échec
Les options du serveur sont prioritaires face à celle du client. C'est à dire que si le serveur permet à client1
de monter /data en read only (lecture seule) et que le client monte en Read/Write, alors le partage sera
monté en read only.
Exemple :
Le répertoire /data de la machine 'server' sera monté dans /mnt/nfs en read only/nosuid.
Pour monter un répertoire au démarrage du système il faut ajouter une entrée dans le fstab (comme pour
les péripheriques locaux).
7/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
options corresponds aux options citées ci-dessus, il est important de laisser le dump/pass à 0 (il parait
assez logique de ne pas vérifier l'integrité du répertoire NFS à chaque démarrage).
A titre d'exemple nous allons reprendre le précedent exemple mais cette fois-ci nous le monterons a chaque
démarrage.
Chapitre 02 - PureFTPd
1. Introduction
Pure-ftpd est un serveur ftp libre, sécurisé, de qualité et répondant aux standard du protocole FTP. Il
tourne sur de nombreux systèmes tel que Linux, FreeBSD, NetBSD, OpenBSD, ISOS, EkkoBSD, BSDi,
Solaris, Darwin, Tru64, Irix, AIX et HPUX.
Il possède de nombreux atouts tels que le "chroot" des répertoires, le choix des ports pour le
téléchargement passif, le support du FXP (transfert entre deux serveurs FTP), le réglage de la bande
passante, le support des ratios, le support de ldap / mysql / postgreSQL / SSL pour l'authentification, et
bien d'autres choses encore.
Le protocole FTP agit au niveau de la couche 7 du modèle OSI, il est base sur un modèle client serveur
avec authentification via nom d'utilisateur/mot de passe et écoute par défaut sur les ports 20 (données) et
21 (commandes).
3. FTP et la sécurité
Nous avons vu que les données transitent en clair sur le réseau, cela signifie qu'une personne mal
intentionnée peut récupérer très aisément des noms d'utilisateurs/mot de passe.
Voici donc quelques précautions à prendre lorsque vous mettez en place un serveur FTP (nous exclurons ici
le fait que le serveur soit directement vulnérable) :
Éviter d'implémenter un serveur FTP dans un réseau non commuté (un réseau contenant des
Hubs).
8/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
Éviter d'implémenter un serveur FTP sur un serveur comportant des services critiques (DNS,
MAIL...).
Éviter d'implémenter un serveur FTP sur un serveur comportant des données
critiques/confidentielles.
Bloquer le compte root afin qu'il ne puisse pas se connecter au serveur FTP.
La notion d'utilisateurs virtuels est très simple, il s'agit d'un utilisateur pouvant se connecter uniquement via
FTP. Toutes connexions locales, SSH... lui seront refusées. Cependant les utilisateurs doivent posséder un
UID/GID pour que le système puisse savoir si celui-ci a le droit de lire/écrire tel fichier/répertoire...
Les utilisateurs possèdent l'UID d'un utilisateur système existant, celui-ci est souvent nommé
ftpuser et en général ne possède pas de shell (ni de mot de passe). Il est évidemment possible de
créer un utilisateur virtuel possédant le même UID que votre utilisateur système courant (afin de
garder les mêmes accès). Le même principe est utilise pour le GID.
Chaque utilisateur virtuel possède un profil unique contenant ses limites de bande passante, ses
quotas, ses horaires d'accès...
Dans le cas où vous créez un utilisateur virtuel possédant le même nom d'utilisateur/UID que votre
utilisateur système, il peut être intéressant de ne pas mettre le même mot de passe (changez une lettre ou
un chiffre).
ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/
9/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
Option Effet
--with-puredb Active le support des utilisateurs virtuels
--with-virtualchroot Active les liens symboliques pour les utilisateurs chrootés
--with-ftpwho Active la commande ftpwho
--with-altlog Active les fichiers de log avancés
--with-throttling Active la gestion de la bande passante
--with-peruserlimits Active la gestion des limites par utilisateur
--without-inetd Désactive le support inetd (gain de place)
# ./configure --help
# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser
L'utilisateur système ftpuser se pourra jamais se connecter au système (home directory et shell invalide).
Option Effet
Précise la base de comptes (/etc/pureftpd.pdb par
-lpuredb:/fichier
défaut).
-c N Limite le nombre de connexions à N.
-C N Limite le nombre de connexions par IP à N.
-E Désactive les connexions anonymes.
-O Active et spécifie le fichier de log ainsi que le type.
10/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
type:/chemin/vers/fichier Où type =
clf : Log de type apache
stats : log qui peut être traité par des logiciels de
statistiques.
w3c: fichier de log compatible W3C.
Les champs <account>, <mot de passe>, <uid>, <gid> et <home directory> sont obligatoires.
PureFTPd utilise la base de compte /etc/pureftpd.pdb qui est une version "compilée" de
/etc/pureftpd.passwd.
Tout comme pour les utilisateurs système, il est possible d'ajouter/modifier/effacer un utilisateur à la main
directement dans le fichier, cependant l'utilisation des commandes suivantes facilite cette tâche :
La commande pure-pw permet d'administrer le serveur, elle s'utilise de la manière suivante :
Option Effet
useradd Ajouter un utilisateur virtuel.
usermod Modifier un utilisateur virtuel.
userdel Supprimer un utilisateur virtuel.
passwd Modifier le mot de passe d'un utilisateur virtuel.
show Afficher le profil d'un utilisateur virtuel.
list Lister tous les utilisateurs virtuels.
mkdb Recréer la base de données PureFTPd (/etc/pureftpd.pdb)
11/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
A chaque ajout d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :
# pure-pw mkdb
L'ajout de l'option '-m' lors de la création de l'utilisateur recrée automatiquement la base de données (plus
besoin de taper 'pure-pw mkdb').
Option Effet
-u Précise l'UID de l'utilisateur virtuel (généralement celui de ftpuser).
-g Précise le GID de l'utilisateur virtuel (généralement celui de ftpgroup).
-D Précise le répertoire personnel de l'utilisateur.
Précise le répertoire personnel de l'utilisateur (celui-ci sera chrooter dans ce
-d
répertoire).
-T Précise le débit maximum (upload) de l'utilisateur.
-t Précise le débit maximum (download) de l'utilisateur.
Précise le nombre maximum de sessions simultanées que l'utilisateur peut
-y
ouvrir (threads).
Précise les heures de connexion de l'utilisateur (Exemple -z 1400-1800 entre
-z
14h et 18h).
-Q Précise le ratio de l'utilisateur (download).
-q Précise le ratio de l'utilisateur (upload).
Exemple :
Cet exemple crée un utilisateur user1 ayant l'UID de ftpuser, le GID de ftpgroup, comme répertoire
personnel /ftp/ (chroote) ainsi que trois connexions simultanées au maximum.
$ pure-pw
12/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
A chaque modification d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :
# pure-pw mkdb
L'ajout de l'option '-m' lors de la modification de l'utilisateur recrée automatiquement la base de données
(plus besoin de taper 'pure-pw mkdb').
Les options sont les mêmes que pour l'ajout d'un utilisateur.
Exemple :
A chaque modification de mot de passe il faut recrée la base de données PureFTPd avec la commande :
# pure-pw mkdb
L'ajout de l'option '-m' lors de la modification de mot de passe recrée automatiquement la base de données
(plus besoin de taper 'pure-pw mkdb').
Exemple :
Si vous souhaitez convertir votre utilisateur système en utilisateur virtuel, voici la procédure à suivre :
13/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
Exemple :
A chaque suppression d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :
# pure-pw mkdb
L'ajout de l'option '-m' lors de la suppression d'un utilisateur recrée automatiquement la base de données
(plus besoin de taper 'pure-pw mkdb').
Exemple :
Exemple :
14/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
# pure-pw list
9. Administration du serveur
9.1 Lister les utilisateurs connectes au serveur
La commande pure-ftpwho permet de lister les utilisateurs actuellement connectés au serveur ainsi que
leurs actions.
Exemple :
# pure-ftpwho
+------+---------+-------+------+------------------------------------------
-+
| PID | login |For/Spd| What | File/IP
|
+------+---------+-------+------+------------------------------------------
-+
| 6105 | user1 | 00:00 | DL | File.avi
|
| '' | '' | 170K/s| '' | -> 62.39.155.70
|
+------+---------+-------+------+------------------------------------------
-+
La commande pure-mrtg info permet de exporter un fichier MRTG (Graphique) sur l'utilisation du serveur.
Le fichier de log des transferts est spécifié au démarrage du serveur (Voir Chapitre 6), par exemple si vous
lancez le serveur de cette manière :
15/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
D'autres informations (connexions, erreurs...) sont disponibles dans les fichiers /var/log/messages et
syslog.
Pour utiliser cette fonction, vous devez posséder le fichier "/etc/ssl/private/pure-ftpd.pem" qui contient la
clé privée et le certificat du serveur. Vous pouvez changer l'emplacement de ce fichier en passant l'option "-
-with-certfile /chemin/vers/le/fichier" au script configure, ou alors si vous avez changé le chemin pour
lesysconfdir, alors le fichier doit se trouver dans "<sysconfdir>/ssl/private/pure-ftpd.pem>. Notez bien que
c'est le même fichier qui doit contenir la clé privée et le certificat du serveur. Il doit ressembler à cela :
Pour démarrer le serveur avec le support des connexions SSL, vous devez utiliser le drapeau "-Y" ou "--tls",
qui peut prendre les valeurs suivantes :
Exemple :
16/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
ou bien :
# pure-ftpd ${pure-ftpd-options} --tls=2
1. Introduction
Les interfaces graphiques sous GNU/Linux reposent en grande partie sur le standard X-Window. Ce
standard est né dans les laboratoires du MIT (Massachusetts Institute of Technology) dans les années 1984
pour fournir un environnement graphique adaptable aux nombreuses et diverses plateformes de
l'université.
A l'époque, un seul serveur puissant servait d'unité de calcul pour tous les postes utilisateurs qui n'étaient
que des terminaux (écran, clavier, souris). Ce système graphique était donc capable de lancer des
applications graphiques clientes sur un serveur distant. X-Window est bel et bien composé d'une partie
serveur et d'une partie cliente. C'est à partir de ce projet que sont nés les serveurs graphiques que nous
utilisons aujourd'hui tel que XFree86.
En 1988, le X Consortium est créé au MIT qui deviendra en 1999 X.org, une association à but non lucratif
qui se charge de superviser les développements futurs d'X-Window. La liste des membres de cette
association est composée des plus grands constructeurs : HP, Sun Microsystems, SGI, IBM.
Ce projet repose sur le principe d'une application réseau client/serveur. Le serveur gère l'accès aux
périphériques tels que la carte graphique, l'écran, le clavier ... Les applications graphiques (Navigateur,
client de messagerie, éditeur de textes, ...) sont des clients du serveur X. Ces clients font des requêtes au
serveur X et reçoivent les réponses via la Xlib, la librairie principale d'X qui permet d'interpréter des
requêtes "simples" de clients pour les transformer en instructions "complexes" conformes au standard X-
Window et interprétables par le serveur X.
Le concept X-Window est assez ancien et ne répond plus forcement aux exigences des utilisateurs
d'aujourd'hui. Par exemple, l'évolution remarquable des cartes graphiques a nécessité de gros changements
dans l'architecture d'XFree. La configuration de celui-ci semble assez laborieuse au premier abord pour
cette raison.
Un autre problème vient du fait que la Xlib ne permet de dessiner que quelques formes primitives, et donc
nécessairement des surcouches (toolkits comme Qt ou GTK) ont du être développées pour que les
programmeurs puissent créer des widgets (fenêtre, boutons, boîte texte, ...) aisément.
1.2 Xfree
Thomas Roell, étudiant Allemand, commence en 1990 à porter X-Window en version X11R4 pour PC. Son
projet se nomme alors X386, attire l'attention du X Consortium, et devient la référence pour PC. Le projet
est finalement abandonné par Roell en 1990 moins d'un an après sa création. Le projet est repris en 1991
par quatre développeurs : David Wexelblat, Glenn Lai, David Dawes et Jim Tsillas qui rebaptisent le projet
XFree86. Ce noyau de développeurs nommé core-team décide des évolutions du projet et accepte ou non
les contributions extérieures.
1.3 Xorg
17/18 napster_simon@hotmail.com
Net-Pro Par : Ghaouti Mohamed
La core-team est considérée comme un frein par certains développeurs comme Keith Packard qui décide
alors de forker le projet, c'est à dire de commencer un nouveau projet en partant de l'ancien, avec une
nouvelle équipe de développement. Rappelons que Keith Packard a développé RandR et Xft2 qui ont permis
à X d'afficher des polices anti-aliasées pour la première fois.
La core-team d'Xfree a finalement voté son autodissolution le 30 décembre 2003, estimant qu'elle ne
représentait plus suffisamment la communauté de développement. La version 4.4 du projet est sortie le 29
février 2004 avec une nouvelle licence en version 1.1 qui a été l'objet de nombreuses controverses du fait
de sa non compatibilité avec la licence GPL.
Xorg est maintenant un projet à part entière qui évolue très rapidement par rapport à Xfree. Il a été intégré
par défaut à la place d'Xfree dans la majorité des distributions actuelles.
18/18 napster_simon@hotmail.com