À propos de cette documentation
Ce document décrit toutes les étapes nécessaires à la mise en place d'un serveur openafs sur une Gentoo. Certaines parties de cette documentation sont extraites de la FAQ AFS et du guide express du débutant d'IBM. On ne va pas réinventer la roue. :)
AFS est un système de fichiers distribué qui permet à des machines (clients et serveurs) de partager efficacement des ressources d'un système de fichiers aussi bien sur un réseau local que sur un réseau longue distance (WAN). Les clients maintiennent un cache des objets les plus utilisés (des fichiers) afin d'optimiser l'accès à ces ressources.
AFS est basé sur un système de fichiers distribué à l'origine développé au centre d'information et de technologie de l'université de Carnegie-Mellon (CMU), il était appelé "Andrew File Sytem". "Andrew" était le nom du projet de recherche de la CMU qui honorait les fondateurs de cette université. Une fois que Transarc fut formé et qu'AFS devint un produit, la partie "Andrew" fut retirée pour indiquer qu'AFS avait quitté le projet de recherche Andrew et était devenu un produit de qualité. Cependant, un lot de cellules préexistantes avaient utilisé le nom /afs pour la racine de leur système de fichiers. À cette époque, modifier cette racine n'était pas facile à faire. Donc, pour préserver les sites AFS antérieurs, AFS redevint le nom du projet et de la racine du système de fichiers.
Qu'est-ce qu'une cellule AFS ?
Une cellule AFS est un ensemble de serveurs regroupés administrativement qui présentent un système de fichiers unique. Habituellement, une cellule AFS est un ensemble de machines qui utilisent le même nom de domaine (comme par exemple gentoo.org). Les utilisateurs se connectent sur une station de travail cliente AFS et demandent des informations et des fichiers à une cellule serveur. Les utilisateurs ne savent pas sur quel serveur les fichiers auxquels ils accèdent sont situés. Ils ne remarqueraient rien si les fichiers étaient déplacés sur un autre serveur car leurs fichiers seraient toujours accessibles. C'est un peu comme un système NFS gonflé à bloc.
Quels sont les avantages d'AFS ?
Les avantages les plus importants sont les suivants :
Où trouver plus d'informations ?
Lisez la FAQ.
La page d'accueil de OpenAFS.
AFS fut développé par Transarc qui appartient maintenant à IBM. Vous trouverez donc quelques informations à propos d'AFS sur la page web de Transarcs.
Comment résoudre des des problèmes ?
OpenAFS écrit beaucoup d'informations dans son propre journal. Pour qu'il utilise le journal système, vous devez utiliser l'option -syslog sur toutes les commandes bos.
Télécharger la documentation d'AFS
Vous pouvez télécharger la documentation originale d'IBM. Elle est très bien écrite et est vraiment nécessaire si vous devez administrer un serveur AFS.
Exemple de code 2.1 : Installer la documentation |
# emerge app-doc/afsdoc
|
3. Installation de la machine cliente
Note : Toutes les commandes doivent être écrites sur une ligne ! Dans ce document, elles sont parfois affichées sur plusieurs lignes pour améliorer la lisibilité. |
Note : Malheureusement, le client AFS a besoin d'une partition ext2 pour que son système de cache fonctionne correctement. Des problèmes de réservation de fichiers (« lock ») existent dans reiserfs. Vous devez créer une partition ext2 d'environ 200 Mo (en mettre plus ne serait pas gênant) et la monter sur : /usr/vice/cache. |
Vous devez ajuster les deux fichiers CellServDB et ThisCell avant de créer le client afs (ces fichiers se trouvent dans /usr/portage/net-fs/openafs/files).
Exemple de code 3.1 : Fichier CellServDB |
>netlabs # nom de la cellule 10.0.0.1 # stockage |
Exemple de code 3.2 : Fichier ThisCell |
netlabs |
Attention : N'utilisez que des espaces dans le fichier CellServDB. Le programme client échouera probablement si vous utilisez des tabulations. |
CellServDB spécifie les serveurs dont votre client a besoin pour se connecter à une cellule spécifique. thisCell est plutôt évident. Normalement, vous utilisez un nom qui est unique pour votre organisation. Votre nom de domaine (officiel) constitue un bon choix.
Exemple de code 3.3 : Installer openafs |
# emerge openafs
|
Une fois la compilation réalisée, vous êtes prêt.
Lancer afs au démarrage de la machine
La commande suivante crée les liens nécessaires au lancement de votre client afs au démarrage de votre machine.
Attention : Un serveur AFS doit être actif dans votre domaine quand vous lancez le client afs. Votre système ne démarrera pas avant de recevoir une réponse du serveur afs ou avant que le délai d'attente n'ait expiré (ce délai est long). |
Exemple de code 3.4 : Ajouter afs aux scripts de démarrage |
# rc-update add afs default
|
La commande suivante installe tous les binaires requis pour configurer votre serveur AFS et les clients.
Exemple de code 4.1 : Installer openafs |
# emerge openafs
|
Vous devez avant tout supprimer les fichiers exemples CellServDB et ThisCell.
Exemple de code 4.2 : Supprimer les fichiers d'exemple |
# rm /usr/vice/etc/ThisCell # rm /usr/vice/etc/CellServDB |
Ensuite, vous devez lancer la commande bosserver pour initialiser le serveur Basic OverSeer (BOS) qui va superviser et contrôler les autres serveurs afs lancés sur le même serveur. On peut voir ça comme l'initialisation du système. Ajoutez l'option -noauth pour désactiver la vérification d'autorisation puisque vous n'avez pas encore ajouté l'utilisateur admin.
Attention : Désactiver la vérification d'autorisation compromet gravement la sécurité de la cellule. Vous devez terminer toutes les étapes suivantes en une seule phase ininterrompue et vous ne devez pas laisser la machine sans surveillance tant que vous n'avez pas relancé le bosserver avec le contrôle d'autorisation activé, conformément à la documentation d'AFS. |
Exemple de code 4.3 : Démarrer le BOS |
# /usr/afs/bin/bosserver -noauth &
|
Vérifiez que votre serveur BOS a créé les fichiers /usr/vice/etc/CellServDB et /usr/vice/etc/ThisCell
Exemple de code 4.4 : Vérifier la présence des fichiers requis |
# ls -al /usr/vice/etc/
-rw-r--r-- 1 root root 41 Jun 4 22:21 CellServDB
-rw-r--r-- 1 root root 7 Jun 4 22:21 ThisCell
|
Définir le nom de la cellule et l'appartenance des processus serveurs
Donnez un nom à votre cellule.
Important : Certaines restrictions s'appliquent au format du nom. Les deux plus importantes sont que le nom ne peut pas contenir de lettres majuscules ni plus que 64 caractères. Rappelez-vous que le nom de votre cellule apparaîtra dans /afs. Vous devriez donc choisir une taille raisonnable. |
Note : Dans ce qui suit et dans chaque instruction de ce guide, l'argument <nom de serveur> représentera le nom complet du domaine de la machine que vous installez (par exemple afs.gentoo.org ). Par <nom de cellule> nous entendrons le nom complet de votre cellule (gentoo par exemple). |
Exécutez la commande bos setcellname pour attribuer le nom de cellule :
Exemple de code 4.5 : Attribuer le nom de la cellule |
# /usr/afs/bin/bos setcellname <nom de serveur> <nom de cellule> -noauth
|
Démarrer le serveur de base de données
Utilisez maintenant la commande bos create pour créer les entrées des quatre processus de serveur de bases de données dans le fichier /usr/afs/local/BosConfig. Les quatre processus tournent uniquement sur le serveur de base de données.
| kaserver | Le serveur d'authentification maintient une base de données d'authentification. Cela peut être remplacé par un démon Kerberos 5. Si vous voulez essayer, vous êtes libre de mettre à jour cette documentation. :) |
| buserver | Le serveur de sauvegarde contient une base de données de sauvegarde. |
| ptserver | Le serveur de protection maintient un base de protections. |
| vlserver | Ce serveur maintient un base de localisation des volumes (VLDB). Très important :) |
Exemple de code 4.6 : Créer les processus serveurs |
# /usr/afs/bin/bos create <nom du serveur> kaserver simple /usr/afs/bin/kaserver -cell <nom de la cellule> -noauth # /usr/afs/bin/bos create <nom du serveur> buserver simple /usr/afs/bin/buserver -cell <nom de la cellule> -noauth # /usr/afs/bin/bos create <nom du serveur> ptserver simple /usr/afs/bin/ptserver -cell <nom de la cellule> -noauth # /usr/afs/bin/bos create <nom du serveurr> vlserver simple /usr/afs/bin/vlserver -cell <nom de la cellule> -noauth |
Vous pouvez vérifier que vos serveurs fonctionnent avec la commande bos status :
Exemple de code 4.7 : Vérifier que les processus sont lancés |
# /usr/afs/bin/bos status <nom du serveur> -noauth
Instance kaserver, currently running normally.
Instance buserver, currently running normally.
Instance ptserver, currently running normally.
Instance vlserver, currently running normally.
|
Initialiser la sécurité d'une cellule
Maintenant nous allons initialiser les mécanismes de sécurité de la cellule. Nous commencerons par créer les deux premières entrées suivantes dans la base de données d'authentification : le compte de l'administrateur principal, appelé admin par convention et une entrée pour les processus des serveurs AFS, nommée afs ; aucun utilisateur ne se connecte avec ce compte, mais le module Ticket Granting Service (TGS) du serveur d'authentification utilise ce compte pour chiffrer les billets que le serveur accorde aux clients AFS. Cela ressemble énormément à Kerberos :)
Entrez dans le mode interactif de kas.
Exemple de code 4.8 : Entrer dans le mode interactif |
# /usr/afs/bin/kas -cell <nom de cellule> -noauth ka> create afs initial_password: Verifying, please re-enter initial_password: ka> create admin initial_password: Verifying, please re-enter initial_password: ka> examine afs User data for afs key (0) cksum is 2651715259, last cpw: Mon Jun 4 20:49:30 2001 password will never expire. An unlimited number of unsuccessful authentications is permitted. entry never expires. Max ticket lifetime 100.00 hours. last mod on Mon Jun 4 20:49:30 2001 by $lt;none> permit password reuse ka> setfields admin -flags admin ka> examine admin User data for admin (ADMIN) key (0) cksum is 2651715259, last cpw: Mon Jun 4 20:49:59 2001 password will never expire. An unlimited number of unsuccessful authentications is permitted. entry never expires. Max ticket lifetime 25.00 hours. last mod on Mon Jun 4 20:51:10 2001 by $lt;none> permit password reuse ka> |
Exécutez la commande bos adduser pour ajouter l'utilisateur admin à : /usr/afs/etc/UserList.
Exemple de code 4.9 : Ajouter l'utilisateur admin |
# /usr/afs/bin/bos adduser <nom du serveur> admin -cell <nom de la cellule> -noauth
|
Utilisez la commande bos addkey pour définir la clef de chiffrement du serveur AFS dans /usr/afs/etc/KeyFile.
Note : Si on vous demande une clef d'entrée, donnez le mot de passe que vous avez utilisé lors de la création de l'entrée avec kas. |
Exemple de code 4.10 : Définir la clef de cryptage |
# /usr/afs/bin/bos addkey <nom du serveur> -kvno 0 -cell <nom de la cellule> -noauth
input key:
Retype input key:
|
Lancez la commande pts createuser pour créer une entrée pour l'utilisateur admin dans la base de données de protection.
Note : Par défaut, le serveur de protection assigne un UID (identificateur d'utilisateur) afs de 1 pour l'utilisateur admin parce que c'est le premier utilisateur créé. Si le fichier des mots de passe de la machine locale (/etc/passwd ou équivalent) a déjà une entrée pour admin avec un UID différent, indiquez-le avec l'option -id pour créer des UID appropriés. |
Exemple de code 4.11 : Définir l'utilisateur admin |
# /usr/afs/bin/pts createuser -name admin -cell <nom de la cellule> [-id <AFS UID>] -noauth
|
Utilisez la commande pts adduser pour faire de l'utilisateur admin un membre du groupe system:administrators, et la commande pts membership pour vérifier que la nouvelle adhésion a bien été prise en compte.
Exemple de code 4.12 : Placer admin dans le groupe ad hoc |
# /usr/afs/bin/pts adduser admin system:administrators -cell <nom de cellule> -noauth # /usr/afs/bin/pts membership admin -cell <nom de cellule> -noauth Groups admin (id: 1) is a member of: system:administrators |
Redémarrez tous les processus des serveurs AFS.
Exemple de code 4.13 : Redémarrer les processus AFS |
# /usr/afs/bin/bos restart <nom de serveur> -all -cell <nom de cellule> -noauth
|
Démarrer le serveur de fichiers, de volumes et Salvager.
Démarrez le processus fs qui consiste en un serveur de fichiers, de volumes et salvager (les processus : filserver, volserver et salvager).
Exemple de code 4.14 : Démarrer les processus |
# /usr/afs/bin/bos create <nom de serveur> fs fs /usr/afs/bin/fileserver
/usr/afs/bin/volserver
/usr/afs/bin/salvager
-cell <nom de cellule> -noauth
|
Vérifiez que tous les processus sont en cours d'exécution.
Exemple de code 4.15 : Vérifier que les processus tournent |
# /usr/afs/bin/bos status <nom de serveur> -long -noauth
Instance kaserver, (type is simple) currently running normally.
Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun 4 21:07:17 2001
Command 1 is '/usr/afs/bin/kaserver'
Instance buserver, (type is simple) currently running normally.
Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun 4 21:07:17 2001
Command 1 is '/usr/afs/bin/buserver'
Instance ptserver, (type is simple) currently running normally.
Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun 4 21:07:17 2001
Command 1 is '/usr/afs/bin/ptserver'
Instance vlserver, (type is simple) currently running normally.
Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun 4 21:07:17 2001
Command 1 is '/usr/afs/bin/vlserver'
Instance fs, (type is fs) currently running normally.
Auxiliary status is: file server running.
Process last started at Mon Jun 4 21:09:30 2001 (2 proc starts)
Command 1 is '/usr/afs/bin/fileserver'
Command 2 is '/usr/afs/bin/volserver'
Command 3 is '/usr/afs/bin/salvager'
|
Votre prochaine étape diffère selon que vous avez déjà activé ou non des machines faisant office de serveur de fichiers AFS dans la cellule.
Si vous créez le premier serveur de fichier AFS de la cellule, créez le premier volume AFS root.afs.
Note : Pour le nom de la partition, utilisez le nom de la partition du premier serveur de fichiers AFS. Par convention ces partitions sont nommées /vicepx, où x est une lettre de l'alphabet. |
Exemple de code 4.16 : Créer la partition initiale |
# /usr/afs/bin/vos create <nom de serveur> <nom de partition> root.afs
-cell <nom de cellule> -noauth
|
Si des serveurs de fichiers et de volumes AFS existent déjà dans la cellule, utilisez les commandes vos sncvldb et vos syncserv pour synchroniser la VLDB (Volume Location Database) avec l'état réel des volumes sur la machine locale. Cela copiera toutes les données nécessaires sur votre nouveau serveur.
Si cette commande échoue avec le message « partition /vicepa does not exist on the server », veuillez vérifier que la partition est montée avant de lancer le serveur OpenAFS, ou montez la partition et relancez le serveur avec la commande /usr/afs/bin/bos restart <server name> -all -cell <cell name> -noauth.
Exemple de code 4.17 : Ajouter votre serveur dans une cellule |
# /usr/afs/bin/vos syncvldb <nom de serveur> -cell <nom de cellule> -verbose -noauth # /usr/afs/bin/vos syncserv <nom de serveur> -cell <nom de cellule> -verbose -noauth |
Démarrer la partie serveur du serveur de mises à jour
Exemple de code 4.18 : Lancer le serveur de mises à jour |
# /usr/afs/bin/bos create <nom de serveur>
upserver simple "/usr/afs/bin/upserver
-crypt /usr/afs/etc -clear /usr/afs/bin"
-cell <nom de cellule> -noauth
|
Configurer le niveau supérieur du système de fichiers AFS
Pour commencer, vous devez définir quelques acl (liste de contrôle d'accès) pour que chaque utilisateur puisse utiliser /afs.
Exemple de code 4.19 : Définir les acl |
# /usr/afs/bin/fs setacl /afs system:anyuser rl
|
Ensuite, vous devez créer le volume root, le monter en mode lecture seulement sur /afs/<nom de cellule> et en mode lecture/écriture sur /afs/.<nom de cellule>
Exemple de code 4.20 : Créer et monter le volume root |
# /usr/afs/bin/vos create <nom de serveur><nom de partition> root.cell # /usr/afs/bin/fs mkmount /afs/<nom de cellule> root.cell # /usr/afs/bin/fs setacl /afs/<nom de cellule> system:anyuser rl # /usr/afs/bin/fs mkmount /afs/.<nom de cellule> root.cell -rw |
Vous avez enfin terminé ! Vous devriez avoir un système de fichiers AFS qui fonctionne sur votre réseau. Servez-vous une bonne tasse de café et imprimez la documentation AFS !
Note : Il est très important pour que le serveur AFS fonctionne correctement que toutes les horloges système soient synchronisées. La meilleure solution est d'installer un serveur ntp sur une des machines (par exemple le serveur AFS) et de synchroniser toutes les horloges des clients avec un client ntp. Cela peut aussi être fait par le client AFS. |
5. Les bases de l'administration
OpenAFS est une technologie aux nombreuses facettes. Veuillez lire la documentation AFS si vous avez besoin de plus d'information. Nous n'aborderons que quelques tâches administratives dans ce chapitre.
Configurer PAM pour qu'il obtienne un billet (« token ») AFS lors de l'ouverture de session
Pour utiliser AFS, vous devez vous authentifier auprès du serveur KA (si vous utilisez une implémentation de AFS Kerberos 4) ou auprès du KDC Kerberos 5 (si vous utilisez MIT, Heimdal ou ShiShi Kerberos 5). Toutefois, vous avez également besoin d'un compte utilisateur pour ouvrir une session sur une machine. Ce compte peut être de type local (/etc/passwd), NIS ou LDAP (OpenLDAP), ou provenir d'une base de données Hesiod. PAM permet à Gentoo de lier l'authentification à AFS et d'ouvrir une session avec le compte utilisateur.
Vous devrez mettre à jour le fichier /etc/pam.d/system-auth qui est utilisé par les autres configurations. « use_first_pass » indique que la première vérification se fera avec le compte utilisateur et « ignore_root » empêche la vérification pour le super-utilisateur local afin que la connexion soit toujours possible si AFS ou le réseau devait flancher.
Exemple de code 5.1 : /etc/pam.d/system-auth |
auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok auth sufficient /usr/afsws/lib/pam_afs.so.1 use_first_pass ignore_root auth required /lib/security/pam_deny.so account required /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so retry=3 password sufficient /lib/security/pam_unix.so nullok md5 shadow use_authtok password required /lib/security/pam_deny.so session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so |
Pour permettre à sudo de conserver le billet du véritable utilisateur et pour éviter que les utilisateurs locaux n'obtiennent l'accès à AFS, modifiez /etc/pam.d/su comme suit :
Exemple de code 5.2 : /etc/pam.d/su |
# On considère ici que les utilisateurs dont l'uid est > 100 appartiennent # à AFS. Les utilisateurs dont l'uid est <= 100 sont ignorés par pam_afs. auth sufficient /usr/afsws/lib/pam_afs.so.1 ignore_uid 100 auth sufficient /lib/security/pam_rootok.so # Si vous souhaitez restreindre encore davantage l'utilisation de su, # créez un fichier /etc/security/suauth.allow qui ne peut être modifié que # par root, puis ajoutez à ce fichier les utilisateurs qui ont la # permission d'utiliser su (un utilisateur par ligne). #auth required /lib/security/pam_listfile.so item=ruser \ # sense=allow onerr=fail file=/etc/security/suauth.allow # Décommentez ce qui suit pour permettre aux membres du groupe wheel # d'utiliser su sans avoir à entrer un mot de passe. #auth sufficient /lib/security/pam_wheel.so use_uid trust # Alternativement, vous pouvez implémenter une liste d'utilisateurs qui # n'ont pas besoin de d'entrer un mot de passe. #auth sufficient /lib/security/pam_listfile.so item=ruser \ # sense=allow onerr=fail file=/etc/security/suauth.nopass # Décommentez ce qui suit pour permettre à tous les utilisateurs (même # ceux qui ne font pas partie du groupe wheel) d'utiliser su. auth required /lib/security/pam_wheel.so use_uid auth required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_xauth.so # Voici comment éviter la perte du billet du véritable utilisateur. session optional /usr/afsws/lib/pam_afs.so.1 no_unlog |
Ce document est protégé par la licence Creative Commons : Paternité - Partage des Conditions Initiales à l'Identique 2.5.