AFS : authentification et ACL

AFS est en cours de remplacement par PBS. Merci de vous référer à la documentation correspondante.

AFS (Andrew File System) est un système de fichiers distribué arborescent qui permet à un ensemble de machines réparties en réseau de partager des fichiers de façon cohérente. Le sommet de l'arborescence d'AFS est unique à travers le monde et s'accède sous le nom /afs.

Chaque organisme qui souhaite utiliser AFS, se voit attribuer un sous répertoire sous /afs qui en terminologie AFS s'appelle une cellule. Le nom de la cellule pour l'IN2P3 s'appelle in2p3.fr. En conséquence, les fichiers des utilisateurs du Centre de Calcul de l'IN2P3 qui accèdent à des machines où AFS est installé, se trouvent localisés sous le répertoire /afs/in2p3.fr/. Parallèlement, les utilisateurs qui disposent d'accès à des machines du CERN sous AFS verront leurs “fichiers CERN” sous /afs/cern.ch/ (la cellule du CERN s'appelant cern.ch).

On voit dès à présent l'énorme intérêt de ce système de fichiers puisqu'un utilisateur disposant d'accès à plusieurs cellules pourra transférer ses fichiers d'un site à l'autre par une simple copie de fichiers d'un sous répertoire d'AFS vers un autre après authentification dans les 2 cellules.

Dans une cellule, les fichiers résident sur des serveurs de données et sont regroupés au sein d'entités appelées volumes. Les volumes sont des partitions de disques physiques des serveurs de données qui sont gérés par un mécanisme de quotas. AFS permet de définir des groupes d'utilisateurs et gère les listes de membres des groupes dans sa base de données. Des groupes arbitraires peuvent être créés par les utilisateurs eux-mêmes avec la commande AFS pts . Il faut bien noter que ces groupements d'utilisateurs sont indépendants du group-id, ou gid, d'Unix. Les groupes AFS sont utilisés pour la protection des fichiers sous AFS.

Un utilisateur est identifié par son nom (“userid”), qui correspond à un uid d'Unix et aussi à un UID d'AFS, qui auront toujours la même valeur numérique à l'IN2P3. Le répertoire “home” d'un utilisateur se trouve dans une partition éventuellement partagée entre plusieurs utilisateurs. L'espace disque alloué par défaut à un utilisateur est de 1GB. Si l'utilisateur dépasse son quota, un message d'erreur lui est envoyé, cependant il ne perturbe généralement pas les autres utilisateurs. Sur une machine cliente (c'est-à-dire une machine sur laquelle vous vous connectez), vous accédez aux données du serveur grâce au gestionnaire de cache. Il s'agit d'un processus qui rapatrie une copie du fichier que vous utilisez, qui garantit l'intégrité des données à travers le réseau et assure la confidentialité des données traitées.

AFS est un système qui offre un niveau de sécurité élevé. En effet, l'utilisation des mécanismes d'authentification de Kerberos et l'emploi des ACL (Acces Control List) permettent de garantir un accès fiable au système et aux fichiers.

Introduction

Lorsque vous vous connectez à une machine sous AFS, si votre identification (ou nom d'utilisateur) et authentification (mot de passe) sont corrects, AFS vous attribue un jeton. Un jeton ou token est un objet d'authentification qui sera utilisé entre le serveur de données et le client pour vous permettre d'accéder à vos données. Un jeton a une durée de vie qui est de 3 jours au Centre de Calcul de l'IN2P3. Une fois ce délai dépassé, vous ne disposerez plus que d'un accès restreint aux données.

La commande "tokens"

La commande tokens permet de vérifier la date d'expiration de votre jeton :

> tokens 

Tokens held by the Cache Manager:

User's (AFS ID 872) tokens for afs@in2p3.fr [Expires Mar 4 17:00]
--End of list--

Les commandes "kinit" et "aklog"

Si votre jeton a expiré ou si vous voulez lui prolonger sa durée de vie, alors utilisez les commandes kinit et aklog pour le renouveler :

> kinit 
Password for moi@IN2P3.FR: <entrez votre mot de passe>
> aklog

Pour obtenir plus d'information sur ces commandes, tapez :

> man kinit

ou

> aklog -h

La commande "unlog"

Évidemment, vous avez toujours la possibilité de vous déconnecter puis de vous reconnecter !!! Pour détruire votre jeton tapez simplement la commande unlog :

> unlog

Pour obtenir plus d'information sur la commande unlog , tapez :

unlog -help

Vous pouvez accéder à la cellule in2p3.fr depuis votre poste personnel ou fourni par votre laboratoire directement, sans passer par un compte “shell” via “ssh”. Il suffit d'installer un client Kerberos 5 et un client Openafs. Les instructions précises pour effectuer cette opération dépendent largement de votre système d'exploitation et ne seront pas couvertes dans ce document.

MacOS X

A partir de la version 10.10 de MacOSX, il faut utiliser une version alternative du client Kerberos 5 afin de s'authentifier à la cellule IN2P3.FR. La procédure pour s'authentifier est la suivante: /usr/heimdal/bin/kinit moi@IN2P3.FR /usr/heimdal/bin/kgetcred -e des-cbc-md5 afs/in2p3.fr@IN2P3.FR aklog

Information générale sur le paramétrage

Le fichier de configuration de référence du service d'authentification Kerberos est le suivant : krb5.conf

Pour la majorité des machines Unix, le fichier de configuration Kerberos se trouve dans /etc/krb5.conf .

Attention :
L'accès à la cellule AFS du CC-IN2P3 demande à ce que votre version de Kerberos supporte 1-DES. Ce n'est pas le cas avec la version d'Heimdal Kerberos installée à partir des versions 10.10.X de Mac OS X.


Si vous êtes sur une machine sur laquelle vous ne disposez pas des droits root, vous pouvez spécifier un fichier de configuration Kerberos à utiliser en positionnant la variable KRB5_CONFIG.

Exemple:

$ export KRB5_CONFIG=~/krb5.conf
$ kinit [...]

En outre, pour assurer le bon fonctionnement du client OpenAFS, assurez-vous d'avoir installé la version la plus récente possible du fichier CellServDB, disponible ici .

AFS n'autorise la possession que d'un seul jeton à un instant donné au sein d'une même cellule. Cependant si vous êtes enregistré dans d'autres cellules, vous pouvez alors disposer d'un jeton par cellule. Ainsi vous pourrez manipuler des fichiers entre les deux cellules sans problème. Supposons que vous soyez authentifié dans la cellule in2p3.fr, vous souhaitez accéder à vos fichiers sous AFS au CERN (cellule cern.ch), alors il vous faudra faire :

> kinit moi@CERN.CH
Password for moi@CERN.CH: <Entrez votre mot de passe Kerberos au Cern> 
> aklog -cell cern.ch

et la commande tokens vous répondra :

> tokens

Tokens held by the Cache Manager:

User's (AFS ID 872) tokens for afs@in2p3.fr [Expires Mar 4 17:00]
User's (AFS ID 1349) tokens for afs@cern.ch [Expires Mar 2 16:00]
--End of list--

Les listes de protection ou ACL pour Access Control List, représentent le mécanisme qui vous permet, sous AFS, de gérer les protections d'accès aux répertoires et aux fichiers. Ce mécanisme est très différent de celui d'Unix qui est inopérant sous AFS. Il s'articule autour des concepts suivants : Les permissions de base s'appliquent aux répertoires. Les sous répertoires héritent des permissions du répertoire père. Les fichiers n'ont pas de protection individuelle : ils héritent des protections du répertoire dans lequel ils résident.

La gestion des ACL s'effectue grâce à la commande fs . Attention, il existe également sous Unix une commande fs mais qui n'a aucun rapport avec la gestion des protections de fichiers sous AFS. Typiquement, les protections au niveau du répertoire “home” de l'utilisateur identifié sous gnats ressemblent à :

> fs la ~gnats
Access list for /afs/in2p3.fr/home/g/gnats is
Normal Rights:
 usersupport rl
 system:administrators rlidwka
 system:anyuser l
 gnats rlidwka
 backup rl

L'argument “la” de la commande fs représente un raccourci pour “listacl”. Les ACL sont constituées par un ensemble de couples (groupe de protection ou utilisateur, droits d'accès). Dans l'exemple ci-dessus, le groupe system:administrators a les droits rlidwka et l'utilisateur gnats a les droits rlidwka.

Pour obtenir l'ensemble des arguments de la commande fs , tapez :

fs help

Attention, n'utilisez ces arguments qu'en connaissance de cause, car vous pouvez occasionner des dégâts irréversibles sur vos données sans une intervention immédiate de personnes ayant les privilèges d'administrateur.

Il existe 7 droits d'accès. Les 4 droits suivants s'appliquent directement sur le répertoire : a (administer) : droit d'administrer les ACL du répertoire concerné. l (lookup) : droit de lister le contenu du répertoire. d (delete) : droit de supprimer des fichiers, des sous répertoires. i (insert) : droit de créer des nouveaux fichiers ou répertoires.

Les 3 suivants s'appliquent aux fichiers dans le contexte de leur répertoire : r (read) : droit de lire un fichier. w (write) : droit d'écrire dans un fichier. k (lock) : droit de verrouiller un fichier (utilisation d'appels système type flock).

Notons que la commande fs utilise des appellations simplifiées qui sont des combinaisons de ces droits. Il s'agit de : read : qui correspond à rl. write : qui correspond à rlidwk. all : tous les droits, soit rlidwka. Ce sont les droits dont dispose par défaut un utilisateur sur son répertoire “home” . none : aucun droit.

Un groupe de protection dans AFS est similaire à un groupe Unix. Mais dans AFS, l'utilisateur gère lui-même ses groupes alors que sous Unix, cette tâche incombe aux administrateurs système. En dehors des 3 groupes de base non modifiables prédéfinis dans AFS, que sont : system:administrators dont les membres sont les administrateurs AFS dans la cellule courante, system:authuser qui correspond aux utilisateurs définis dans la cellule courante, system:anyuser correspondant à tous les utilisateurs, qu'ils soient authentifiés ou non au sein de la cellule courante ou au sein d'autres cellules,

vous êtes libre de créer les groupes que vous souhaitez et d'y inclure les membres de votre choix. Une fois le groupe créé, vous pouvez insérer les protections relatives à ce groupe dans les ACL d'un répertoire. C'est la commande pts qui permet de gérer les groupes de protection: les créer, les supprimer, ajouter ou supprimer des membres, etc… Supposons que vous soyez l'utilisateur moimeme . Pour créer un nouveau groupe appelé par exemple etal , entrez la commande :

> pts creategroup moimeme:etal
group moimeme:etal has id -615

Comme l'indique la réponse, AFS attribue, comme dans un environnement Unix natif, un identificateur numérique de groupe (ici 615). Ce groupe est vide, ajoutons y les utilisateurs jean et untel :

> pts adduser -user jean untel -group moimeme:etal  

Examinons les caractéristiques du groupe moimeme:etal:

> pts examine moimeme:etal 
Name: moimeme:etal, id: -615, owner: moimeme, creator: moimeme, membership: 2, flags: S-M--, group quota: 0.

Cette commande permet de vérifier, entre autre, l'identificateur de groupe , le propriétaire, le nombre de membres du groupe. On peut afficher la liste des membres du groupe grâce à la commande :

> pts membership moimeme:etal 
Members of moimeme:etal (id: -615) are:
jean 
untel  

Pour supprimer un membre de groupe (p.ex. : untel), il faut faire :

> pts removeuser untel -group moimeme:etal  

Notons qu'une aide en ligne pour la commande pts est accessible par :

> pts help  

et pour chaque sous-commande de pts , deux alternatives vous sont offertes. Par exemple :

> pts help adduser 
> pts adduser -help  

vous donneront l'aide pour la sous-commande adduser de pts , soit :

pts adduser: add a user to a group 
Usage: pts adduser -user <username>+ -group <groupname>+ [-cell <cellname>] [-noauth ] [-test ] [-force ] [-help ] 

Outre l'aide syntaxique précédente, il existe des pages de manuel détaillées pour chaque sous commande d'une commande AFS donnée. On y accède de la façon suivante:

> man commande_sous-commande  

le caractère souligné “_” séparant commande de sous-commande. Par exemple:

> man pts_adduser  

Attention, la sous commande abrégée ne sera pas valide. Par exemple, man fs_la ne sera pas reconnue, il faudra utiliser :

> man fs_listacl  

C'est grâce à l'utilisation conjointe des commandes pts et fs que vous pourrez gérer les ACL sur les répertoires pour lesquels vous disposez d'un droit “a” d'administration (Voir Droits d'accès). L'accès à l'aide en ligne pour la commande fs est similaire à celui pour pts soit :

> fs help
> fs listacl -help
> fs help listacl

Pour consulter les autorisations associées à des répertoires, entrez la commande :

> fs listacl ~gnats ~gnats/public
Access list for /afs/in2p3.fr/home/g/gnats is
Normal rights:
 system:administrators rlidwka
 system:anyuser l
 gnats rlidwka
 
Access list for /afs/in2p3.fr/home/g/gnats/public is
Normal rights:
 system:administrators rlidwka
 system:anyuser rl
 gnats rlidwka

Le retour de la précédente commande nous indique que le répertoire “home” de l'utilisateur gnats ne permet qu'une consultation de l'état des fichiers y résidant (droit “l” pour system:anyuser). Par contre les fichiers appartenant au sous répertoire public peuvent être édités (droits “rl”) par tout utilisateur (system:anyuser). Naturellement, le propriétaire gnats a tous les droits sur son arborescence (“rlidwka”).

La création d'un nouveau répertoire sous son répertoire “home” bénéficiera du mécanisme d'héritage des ACL :

> mkdir newrep
> fs la newrep
Access list for newrep is
Normal rights:
 system:administrators rlidwka
 system:anyuser l
 gnats rlidwka

La modification des ACL s'effectuera grâce à la sous commande setacl (ou sa) de fs .

> fs sa newrep toto rli

donnera à l'utilisateur toto les droits d'insertion et de lecture dans le repertoire newrep. Il en résulte :

> fs la newrep
Access list for newrep is
Normal rights:
 system:administrators rlidwka
 system:anyuser l
 toto rli
 gnats rlidwka

Pour enlever l'utilisateur toto de la liste d'ACL (i.e.: lui enlever tous ces droits) sur le répertoire newrep, il faut spécifier la permission “none” :

> fs sa newrep toto none

On utilisera la même commande fs setacl pour permettre à un groupe de protection, préalablement créé par la commande pts , d'accéder à un répertoire donné. Supposons qu'il existe un groupe de protection nommé gnats:etal, alors :

> fs sa newrep gnats:etal rlidwk

se traduira par l'ACL suivante :

Access list for newrep is
Normal rights:
 gnats:etal rlidwk
 system:administrators rlidwka
 system:anyuser l
 toto rli
 gnats rlidwka

Dans cet exemple, l'ensemble des membres du groupe gnats:etal partage le répertoire newrep en écriture. L'utilisation des commandes setacl de fs peut s'avérer fastidieuse lorsque l'on veut répliquer des ACL. Il existe une sous commande copyacl de fs qui facilitera cette tâche :

> mkdir newrep2
> fs copyacl -from newrep -to newrep2
> fs la newrep2
Access list for newrep2 is
Normal rights:
 gnats:etal rlidwk
 system:administrators rlidwka
 system:anyuser l
 toto rli
 gnats rlidwka  

Pour effectuer un changement d'ACL pour toute une arborescence se trouvant sous le répertoire newrep3 par exemple :

find newrep3 -type d -exec fs sa {} dupont rlw ';'

Cette commande permet de donner les droits “rlw” à l'utilisateur dupont pour tous les sous-répertoires de newrep3.

AFS met à disposition des administrateurs un mécanisme de gestion de quotas disque. En principe ce mécanisme permet d'éviter les désagréments bien connus sur les systèmes Unix classiques où le remplissage d'un disque physique d'une machine par un utilisateur bloque tous ceux qui y sont connectés. Par défaut chaque utilisateur dispose d'un espace disponible de 1GB pour son répertoire “home” qui lui est attribué dans un volume AFS. Ce volume AFS est partagé entre plusieurs utilisateurs avec un certain taux de surenregistrement destiné à optimiser l'utilisation de l'espace disque. La sous commande listquota de fs permet d'accéder au pourcentage d'utilisation disque. Notons que le retour de la commande affiche le quota maximal en kilo-octets.

> fs listquota ~gnats 
Volume Name Quota Used % Used Partition 
user.gnats 100000 5941 12% 24%  

Dans cet exemple, l'utilisateur gnats utilise 12 % du maximum des 100 Méga-octets qui lui sont attribués. D'autre part, le volume AFS sur lequel l'espace utilisateur a été défini, est utilisé à 24 %.

Comme pour un système de fichier Unix, les liens matériels sous AFS ne pourront concerner que des fichiers (pas des répertoire). Cependant, AFS présente en plus la particularité de ne supporter des liens matériels entre fichiers qu'au sein d'un même répertoire. Compte tenu de cette différence avec le système de fichiers Unix, il est vivement conseillé de n'utiliser sous AFS que des liens symboliques.

Un utilisateur est identifié par son nom (“userid”) correspondant à un uid d'Unix et à un UID d'AFS, qui auront toujours la même valeur numérique à l'IN2P3. Il appartient aussi à un groupe (ou throng) indiquant en général l'expérience dans laquelle il (ou elle) travaille. On peut afficher ces objets avec la commande id d'Unix, la commande tokens d'AFS et la commande throng q de l'IN2P3.

> id
uid=354(mirabito) gid=101(delphi) ...

> tokens

Tokens held by the Cache Manager:
User's (AFS ID 354) tokens for afs@in2p3.fr [Expires Sep12 16:07]
-- End of list --

> throng q
delphi

Le userid (mirabito dans l'exemple), le uid d'Unix (354) et l'UID (aussi 354) d'AFS sont équivalents en ce qui concerne l'identification de l'utilisateur. En fait, c'est le UID qui est gardé dans les groupes de protection d'AFS.

Le groupe et le throng ont des valeurs identiques (delphi). Ceci est toujours le cas. (Les nostalgiques de VM reconnaîtront le terme throng emprunté au système batch du SLAC.)

  • afs_authentification_et_acl.txt
  • Dernière modification: 2019/03/22 18:03
  • par David BOUVET