Forum Linux.général NFS, ACL, et merde

Posté par  (site web personnel) .
Étiquettes :
0
7
juil.
2011

Salut,

Au cas où un expert de NFSv3/NFSv4 et des ACL passerait par là...

Symptôme

moi@machine:/chemin/montage/nfs/projet$ id
uid=66000764(moi) gid=66000764(moi) groupes=66000764(moi),66000000(managers),...,70000013(legroupe)
moi@machine:/chemin/montage/nfs/projet$ getfacl configs.yaml
# file: configs.yaml
# owner: 99
# group: legroupe
user::rw-
group::rw-
group:48:rwx
group:legroupero:r-x
mask::rwx
other::---

moi@machine:/chemin/montage/nfs/projet$ cat configs.yaml
cat: configs.yaml: Permission non accordée

Bref, je suis dans un groupe qui normalement peut lire et écrire le fichier, et ça échoue.

Contexte

Un serveur SERV, faisant tourner OpenFiler, fournit 3x13 To d'espace de stockage (RAID6&Co). Un serveur LDAP gère les utilisateurs et les groupes. Les utilisateurs peuvent accéder aux données sur SERV via le protocole de partage de fichiers CIFS (grâce à Samba) - à part qq problèmes avec MacOSX, ça tourne. Le système utilisé se base sur les ACL afin de gérer des groupes d'utilisateurs, plus des accès potentiels via Apache/WebDAV, rsync, etc.

Pour les autres accès, une machine CLI, faisant tourner une debian squeeze, utilise le même système d'authentification des utilisateurs sur le LDAP, et effectue des montages NFSv3 des données de SERV. Les utilisateurs peuvent faire du ssh, du sftp, et ont des outils genre mercurial, git, subversion & Co accessibles. Dans ce cas, le système d'ACL fonctionne bien, les utilisateurs ont accès uniquement à ce qui est autorisé.

J'ai mis en place une duplication d'une partie des données vers un serveur BACKUP basé sur un Ubuntu Server 2011.4 (j'avais pris la 2010 mais un bug dans le lvm m'a oblgé passer dans une version plus récente). Il a droit a 2x13 To d'espace de stockage. La duplication se base sur rsnapshot, c'est assez long (mais vu les volumes je m'y attendais), mais ça fonctionne, je récupère mes copies des fichiers avec leurs ACL.

J'essaie maintenant de réexporter les copies qui sont sur BACKUP vers CLI, en mode lecture seule, afin que les utilisateurs puissent accéder directement aux sauvegardes de leurs données. Et c'est là ça coince.

Côté montage NFS, ça fonctionne, ça communique.

Si je laisse entre BACKUP et CLI les mêmes¹ options de montage qu'entre SERV et CLI j'ai alors du NFSv4 et CLI ne voit pas les ACL ni les bons uids/gids (passage en anonymes) - j'ai lu qu'il fallait en NFSv4 que serveur et clients aient le même système d'authentification, soient dans le même domaine, etc.

En forçant le montage en NFSv3 (via une option vers=3 lors du montage), je récupère alors bien les ACL et les uids/gids, mais j'ai le problème indiqué ci-dessus.

Ma machine BACKUP n'a normalement rien à savoir de mes utilisateurs, je préfèrerais qu'elle se contente de dupliquer des données et de les réexporter sans avoir à la mettre dans le pipeline d'authentification LDAP. Je pensais que le forçage en NFSv3 m'éviterais les problèmes de contrôle d'accès, mais il semble que non. Quelqu'un a-t-il une piste ?

Merci.
Laurent.

¹ serv:/chemin/export/ /mnt/ptmntage/ nfs hard,intr,bg,acl,rsize=8192,wsize=8192,auto 0 0

  • # Nombre de groupes

    Posté par  (site web personnel) . Évalué à 0.

    Pour avoir rencontré le problème il semblerait que NFS ne prenne pas en compte plus d'une dizaine de groupe (nombre exact a determiner).
    Au dela les groupes sont ignorés

    • [^] # Re: Nombre de groupes

      Posté par  (site web personnel) . Évalué à 1.

      http://nfsworld.blogspot.com/2005/03/whats-deal-on-16-group-id-limitation.html
      donc c'est 16 en fait.

      => si tu passe en NFSv4 + sec=krb5 ça devrait passer outre

      • [^] # Re: Nombre de groupes

        Posté par  (site web personnel) . Évalué à 2.

        Ajouter kerberos en plus... juste pour un échange entre trois machines que je contrôle, je préfèrerais éviter (surtout que le reste fonctionne comme cela avec juste le LDAP).

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

    • [^] # Re: Nombre de groupes

      Posté par  (site web personnel) . Évalué à 1.

      Si c'est une dizaine de groupes pour une ACL d'un fichier/répertoire, je ne dois pas l'atteindre - j'ai le groupe rw (généralement le groupe principal), le groupe ro, et OpenFiler me colle des accès pour son Apache... donc au plus trois ou quatre groupes. Et... ça marche avec le NFSv3 qui accède directement au serveur principal.

      Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

      • [^] # Re: Nombre de groupes

        Posté par  (site web personnel) . Évalué à 1.

        Si je laisse entre BACKUP et CLI les mêmes¹ options de montage qu'entre SERV et CLI j'ai alors du NFSv4 et CLI ne voit pas les ACL ni les bons uids/gids (passage en anonymes)
        ¹ serv:/chemin/export/ /mnt/ptmntage/ nfs hard,intr,bg,acl,rsize=8192,wsize=8192,auto 0 0

        => ces options de montage n'activent pas NFSv4 normalement, il faut le type "nfs4" pour passer en NFSv4. la tu doit passer en v2

        En forçant le montage en NFSv3 (via une option vers=3 lors du montage), je récupère alors bien les ACL et les uids/gids, mais j'ai le problème indiqué ci-dessus.

        c'est quoi le /etc/exports de BACKUP ?

        • [^] # Re: Nombre de groupes

          Posté par  (site web personnel) . Évalué à 1.

          /etc/exports de BACKUP

          /chemin/export   client(ro,no_subtree_check,async,no_root_squash,anongid=65534,anonuid=65534)
          

          Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

          • [^] # Re: Nombre de groupes

            Posté par  (site web personnel) . Évalué à 1.

            Est-ce que tu a le même problème sur des droits "standard" (user/group de base) ?

            Que donne "getfacl configs.yaml" sur le serveur BACKUP ?

            • [^] # Re: Nombre de groupes

              Posté par  (site web personnel) . Évalué à 2.

              Hop:

              root@machine:/chemin/export/# getfacl configs.yaml 
              # file: configs.yaml
              # owner: 99
              # group: 70000013
              user::rw-
              group::rw-
              group:48:rwx
              group:71000013:r-x
              mask::rwx
              other::---
              

              Note: Le 70000013 est bien le gid de legroupe. Comme la machine n'utilise pas le LDAP, elle n'a pas l'association gid/nom.

              Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

              • [^] # Re: Nombre de groupes

                Posté par  (site web personnel) . Évalué à 0.

                des UID 32bits, des ACLs, ... tu aime te compliquer la vie toi ....

                as-tu essayé un fichier sans acl, juste avec les droits unix ?

                • [^] # Re: Nombre de groupes

                  Posté par  (site web personnel) . Évalué à 3.

                  Les ACL c'est le mode de fonctionnement d'OpenFiler, et les uids élevés c'est pour éviter de collisionner avec des uids gérés par ailleurs. Et ça fonctionne très bien entre le SERV, les différents clients (Windows, Linux - plus chiant avec MacOSX), et le réexport via NFSv3 vers la machine accès shell fonctionne bien. Mon problème semble du côté NFSv4 qui a une façon différente de gérer les contrôles d'accès et les acl.

                  Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

        • [^] # Re: Nombre de groupes

          Posté par  (site web personnel) . Évalué à 0.

          ces options de montage n'activent pas NFSv4 normalement, il faut le type "nfs4" pour passer en NFSv4. la tu doit passer en v2

          C'était bien du NFSv4 (dixit nfsstat -m sur CLIENT), ils ont dû négocier ça entre client et serveur. Les autres montages (SERV/CLIENT) sont indiqués en NFSv3, sans avoir rien spécifié.

          Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

          • [^] # Re: Nombre de groupes

            Posté par  (site web personnel) . Évalué à 1.

            La sortie de nfsstat -m a cette tête là:

            mnt/ptmntage/ from serv:/chemin      
             Flags: rw,noexec,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,proto=tcp,timeo=600,  ...
             retrans=2,sec=sys,mountaddr=X.X.X.X,mountvers=3,mountport=48741,mountproto=udp,  ...
             local_lock=none,addr=X.X.X.X                                                   
            

            Pour dire que c'est du NFSv3 ou NFSv4, je me base sur le vers=3 / vers=4 dans les Flags.

            Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.