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) (niveau : avancé)
Dans les exemples suivants, on suppose qu'on voudra autoriser l'accès au dossier du scratch /nfs/scratch/$USER/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 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" votre dossier scratch
# Sans cela, les personnes ne peuvent pas "atteindre" `/nfs/scratch/$USER/projet`
chmod a+x /nfs/scratch/$USER
# 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 /nfs/scratch/$USER/projet -type f -exec chmod a+r {} \;
find /nfs/scratch/$USER/projet -type d -exec chmod a+rx {} \;
# A ce stade, tous les autres usagers pourront faire un "cd /nfs/scratch/VOTRE_LOGIN/projet"
# Attention, ils devront connaître le chemin exact, car le dossier scratch 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)
- Comme pour la solution 1, vous ouvrez votre espace scratch (à un groupe, pas à tout le monde, mais quand même) : 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 : 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 /nfs/scratch/$USER/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 /nfs/scratch/$USER/projet -type f -exec chmod g+r {} \;
find /nfs/scratch/$USER/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 /nfs/scratch/$USER/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)¶
On utilise ici un mécanisme d'autorisation différent, basé sur les ACL. On va utiliser les ACL UNIX "classiques" (nos partages sont en NFS v3, donc les ACL NFS v4 ne sont pas disponibles)
Pour :
- Solution "granulaire", on peut donner accès à un usager très précisément
Inconvénient :
Voir l'exempleVoir l'exemple
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 dossier parent de l'espace scratch
setfacl -m mon_collegue:rx /nfs/scratch/$USER
# 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/scratch/projet -type f -exec setfacl -m mon_collegue:r {} \;
find $HOME/scratch/projet -type d -exec setfacl -m mon_collegue:rx {} \;
# Etape 3 : on positionne des droits par défaut pour les nouveaux fichiers créés
setfacl -R -d -m mon_collegue:rx $HOME/scratch/projet
# Etape 4 : on vérifie
ls -ald $HOME/scratch/projet
# On doit voir un "+" à la suite des droits UNIX classiques, par exemple "rwx------+" qui indique la présence d'ACL
getfacl $HOME/scratch/projet
La manipulation des ACL n'est pas forcément facile. Vous pouvez ensuite utiliser :
getfacl
pour lister une ACL
setfacl -x mon_collegue FICHIER_OU_DOSSIER
pour retirer une entrée d'ACL de mon_collegue
setfacl -R -b DOSSIER
pour retirer toutes les ACL sur un dossier et son contenu (option -R
: récursive)