Partager des fichiers¶
Vous stockez des données dans votre home directory ou dans l'espace scratch, et vous souhaitez que d'autres usagers du cluster puissent y accéder ? Plusieurs solutions techniques sont possibles, qui nécessitent de maîtriser les droits sur les systèmes de fichiers Linux (niveau : intermédiaire), ou les listes de contrôle d'accès (ACL) sur NFS v4 (niveau : avancé)
Dans les exemples suivants, on suppose qu'on voudra autoriser l'accès au dossier $HOME/projet/
Alternative 1 : donner accès à tout le monde (droits UNIX)¶
Pour :
Inconvénient :
- Etes-vous certains que vos données ont vocation à être publiques ?
- Il faudra donner un accès à votre home directory ou votre espace scratch : donc pour garder le reste des données protégées, vous devrez vérifier que les autres données sont bien protégées
Voir l'exempleVoir l'exemple
Par la pratique
# Etape 1 : on autorise tout le monde à "traverser" le home directory
# Sans cela, les personnes ne peuvent pas "traverser" $HOME pour atteindre $HOME/projet
chmod a+x $HOME
# Etape 2 : on donne accès aux données existantes, en lecture seule
# Il faut ajouter :
# un droit de lecture (r) sur tous les fichiers existants,
# un droit lecture (r) sur les dossiers pour lister les fichiers,
# un droit de "traverser" (x) les dossiers dossier.
# On utilise la commande "find" pour ajouter les droits de façon sélective sur les fichiers ou les dossiers
find $HOME/projet -type f -exec chmod a+r {} \;
find $HOME/projet -type d -exec chmod a+rx {} \;
# A ce stade, tous les autres usagers pourront faire un "cd /home/MON_LOGIN/projet"
# Attention, ils devront connaître le chemin exact, car mon home n'est pas lisible, ils ne peuvent pas lister le contenu
Alternative 2 : donner accès à un groupe (droits UNIX)¶
C'est une variante de ce qui précède. On utilise un groupe UNIX pour donner des droits spécifiquement à ce groupe.
Pour :
Inconvénient :
- Un groupe UNIX avec les membres autorisés doit exister au préalable (et vous n'avez pas la capacité de créer des groupes)
Voir l'exempleVoir l'exemple
Par la pratique
# Etape 1 : je liste les groupe dont je fais parti
id
# Etape 1 : on autorise tout le monde à "traverser" le home directory
# Sans cela, les personnes ne peuvent pas "traverser" $HOME pour atteindre $HOME/projet
chmod a+x $HOME
# Etape 2 : on change le groupe propriétaire du sous-dossier "projet/"
# On suppose ici qu'il existe un groupe "GROUPE_X" dont je fais partie ainsi que tous les usagers concernés
chgrp -R GROUPE_X $HOME/projet
# Etape 3 : on donne accès aux données existantes, en lecture seule, au groupe
# Il faut ajouter :
# un droit de lecture (r) sur tous les fichiers existants,
# un droit lecture (r) sur les dossiers pour lister les fichiers,
# un droit de "traverser" (x) les dossiers dossier.
# On utilise la commande "find" pour ajouter les droits de façon sélective sur les fichiers ou les dossiers
find $HOME/projet -type f -exec chmod g+r {} \;
find $HOME/projet -type d -exec chmod g+rx {} \;
# Etape 4 : on s'assure que tous les nouveaux fichiers créés seront rattachés au groupe GROUPE_X
find $HOME/projet -type d -exec chmod g+s {} \;
# A ce stade, tous les usagers de "GROUPE_X" pourront faire un "cd /home/MON_LOGIN/projet"
# Attention, ils devront connaître le chemin exact, car mon home n'est pas lisible, ils ne peuvent pas lister le contenu
Alternative 3 : donner accès à un usager (via les ACL NFSv4)¶
On utilise ici un mécanisme d'autorisation différent, basé sur les ACL NVS v4. Attention, il ne faut pas confondre avec les "ACL UNIX", qui ne sont pas disponibles sur CALI v3
Pour :
- Solution "granulaire", on peut donner accès à un usager très précisément
Inconvénient :
Voir l'exempleVoir l'exemple
Par la pratique - On suppose ici qu'on veut donner accès à l'utilisateur dont le login est "mon_collegue"
# Etape 1 : on autorise mon_collegue à "traverser" le home directory
nfs4_setfacl -a A::mon_collegue@localdomain:X $HOME
# Etape 2 : on donne accès aux données existantes, en lecture seule
# On utilise la commande "find" pour ajouter les droits de façon sélective sur les fichiers ou les dossiers
find $HOME/projet -type f -exec nfs4_setfacl -a A::mon_collegue@localdomain:R {} \;
find $HOME/projet -type d -exec nfs4_setfacl -a A::mon_collegue@localdomain:RX {} \;
La manipulation des ACL NFS v4 n'est pas forcément facile. Vous pouvez ensuite utiliser :
nfs4_getfacl
pour lister une ACL
nfs4_editfacl
pour éditer dans un fichier l'ensemble de l'ACL
nfs4_getfacl -x ....
pour retirer une entrée d'ACL - Attention, il faut reprendre l'entrée telle que rapportée par nfs4_getfacl
, qui rapporte les usagers sous forme numérique !