Forum Linux.général OpenLDAP, Utilisateurs et Groupes

Posté par . Licence CC by-sa.
0
1
fév.
2015

Bonjour à tous.

J'ai un serveur OpenLDAP, que j'ai peuplé avec smbldap-populate, et j'ai créé quelques utilisateurs et quelques groupes. J'utilise phpLDAPadmin pour tester mes requêtes. Tout fonctionne bien via Samba et CIFS sur le réseau.

Maintenant, je souhaiterais exploiter l'association des utilisateurs et des groupes pour filtrer l'accès à certains services comme RADIUS, XMPP, etc. Autrement dit, seuls les utilisateurs appartenant au groupe "RADIUS users" doivent pouvoir se connecter via RADIUS, seuls les utilisateurs appartenant au groupe "XMPP users" doivent pouvoir utiliser XMPP, etc.

Malheureusement, je ne parviens pas à écrire les filtres correspondants.

Mettons que l'utilisateur toto cherche à utiliser les services XMPP. Dans pla, j'essaye la requête suivante:

memberOf=cn=XMPP Users,ou=Groups,<base dn>

mais rien n'est retourné. Dans l'entrée cn=XMPP Users,ou=Groups,, j'ai un champ memberUid qui contient la liste des utilisateurs associés au groupe (uniquement les noms d'utilisateurs, c'est à dire le contenu du champ uid, pas les dn complets). J'ai ajouté l'utilisateur toto au groupe XMPP Users avec la commande suivante:

smbldap-usermod -G "XMPP Users" toto

Questions:

  • Est-ce que je peux faire ce que je cherche à faire ?
  • Comment y parvenir ?

Merci.

  • # syntax

    Posté par . Évalué à 2.

    il faut generalement definir 2 choses,
    1 le search scope pour les groupes : ou=Groups,<base dn>
    2 le groupe que tu cherches.

    ta syntaxe finale ressemble alors à un simple memberOf="XMPP Users"

    tu peux aussi tester tes requetes avec ldapsearch pour savoir ce qui existe reellement, et ce qui est reellement retournés en fonction des parametres que tu demandes.

    Quelle solution XMPP as-tu retenu ?

    • [^] # Re: syntax

      Posté par . Évalué à 1.

      Pour XMPP, j'ai opté pour OpenFire. J'utilise Zimbra pour le serveur mail, freeRADIUS pour le serveur RADIUS, et j'utilise mod-auth-ldap sur Apache pour certains sites. Et pour être exhaustif, à l'heure actuelle pour faire fonctionner tout ça, j'utilise un champ seeAlso sur chaque utilisateur qui pointe vers des "groupes" qui ne sont pas dans ou=Groups mais dans ou=Roles, qui sont de simple rôles organisationnels. C'est moche, je sais, mais c'était en attendant de réussir à répondre à ma question :) Et le but ultime de tout ça, c'est d'avoir une interface web qui permet à un user de se connecter pour modifier ses infos personnelles (principalement le mot de passe - avec synchro des mdp samba NT et LM). Voilà qui complète la description de mon système actuel et de ce que j'aimerais en faire.

      Pour ldapsearch, j'ai fais:

      ldapsearch -x -b ou=Groups,dc=cerbere,dc=athaliasoft,dc=lan memberOf="XMPP Users"
      
      # extended LDIF
      #
      # LDAPv3
      # base <ou=Groups,dc=cerbere,dc=athaliasoft,dc=lan> with scope subtree
      # filter: memberOf=XMPP Users
      # requesting: ALL
      #
      
      # search result
      search: 2
      result: 0 Success
      
      # numResponses: 1
      
      • [^] # Re: syntax

        Posté par . Évalué à 2.

        OK, j'avais monté un OpenFire sur LDAP, faut que je retrouve les options que j'avais mise.

        pour le changement de mot de passe, j'utilise Self Service Password (aka SSP)
        ca fonctionne avec un openLDAP, avec un AD…

        http://ltb-project.org/wiki/documentation/self-service-password

        pour ldapsearch ca te renvoie rien car :
        tu cherches un group : ou=Groups,dc=cerbere,dc=athaliasoft,dc=lan
        qui est lui meme membre du groupe 'XMPP user' memberOf="XMPP Users"

        mais toi ce que tu voudrais c'est les Users qui sont memberOf
        donc un -b ou=Users,dc=cerbere,dc=athaliasoft,dc=lan memberOf="XMPP Users"

        tu peux le verifier en explorant ton LDAP avec l'interface graphique (web)
        tu verras que le memberOf est dans les données utilisateurs, pas dans les infos de groupe.

        • [^] # Re: syntax

          Posté par . Évalué à 1.

          Merci pour le lien vers SSP, je vais jeter un oeil, ça me semble bien pour ce que je veux faire :)

          Pour la recherche:

          ldapsearch -x -b ou=Users,dc=cerbere,dc=athaliasoft,dc=lan memberOf="XMPP Users"
          
          # extended LDIF
          #
          # LDAPv3
          # base <ou=Users,dc=cerbere,dc=athaliasoft,dc=lan> with scope subtree
          # filter: memberOf=XMPP Users
          # requesting: ALL
          #
          
          # search result
          search: 2
          result: 0 Success
          
          # numResponses: 1
          

          Pour info, un slapcat sur mon user donne ça:

          54ce8ff6 UNKNOWN attributeDescription "SAMBADOMAINNAME" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBASID" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBANEXTRID" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOGONTIME" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOGOFFTIME" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAKICKOFFTIME" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPWDCANCHANGE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPWDMUSTCHANGE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAHOMEDRIVE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPRIMARYGROUPSID" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAACCTFLAGS" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALMPASSWORD" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBANTPASSWORD" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPWDLASTSET" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAGROUPTYPE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPASSWORDHISTORY" inserted.
          dn: uid=richard,ou=Users,dc=cerbere,dc=athaliasoft,dc=lan
          objectClass: top
          objectClass: person
          objectClass: organizationalPerson
          objectClass: posixAccount
          objectClass: shadowAccount
          objectClass: inetOrgPerson
          objectClass: sambaSamAccount
          cn: richard
          sn: richard
          uid: richard
          uidNumber: 1001
          gidNumber: 513
          homeDirectory: /mnt/volume1/homes/richard
          gecos: System User
          givenName: richard
          structuralObjectClass: inetOrgPerson
          entryUUID: 07344d10-3d1e-1034-81d2-27135b4eb476
          creatorsName: cn=admin,dc=cerbere,dc=athaliasoft,dc=lan
          createTimestamp: 20150130224944Z
          SAMBALOGONTIME: 0
          SAMBALOGOFFTIME: 2147483647
          SAMBAKICKOFFTIME: 2147483647
          SAMBAPWDCANCHANGE: 0
          SAMBAPWDMUSTCHANGE: 2147483647
          displayName: richard
          SAMBASID: S-1-5-21-554797014-832614532-3218386644-1001
          SAMBANTPASSWORD: xxxxx
          shadowLastChange: 16465
          loginShell: /bin/bash
          seeAlso: cn=email,ou=Roles,dc=cerbere,dc=athaliasoft,dc=lan
          seeAlso: cn=xmpp,ou=Roles,dc=cerbere,dc=athaliasoft,dc=lan
          seeAlso: cn=freeradius,ou=Roles,dc=cerbere,dc=athaliasoft,dc=lan
          seeAlso: cn=files,ou=Roles,dc=cerbere,dc=athaliasoft,dc=lan
          userPassword:: xxxxxx
          SAMBAPASSWORDHISTORY: 00000000000000000000000000000000000000000000000000000000
           00000000
          SAMBAPWDLASTSET: 1422660231
          SAMBAACCTFLAGS: [UX         ]
          entryCSN: 20150201171055.332238Z#000000#000#000000
          modifiersName: cn=admin,dc=cerbere,dc=athaliasoft,dc=lan
          modifyTimestamp: 20150201171055Z
          
          54ce8ff6 UNKNOWN attributeDescription "SAMBAALGORITHMICRIDBASE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBANEXTUSERRID" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAMINPWDLENGTH" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAPWDHISTORYLENGTH" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOGONTOCHGPWD" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAMAXPWDAGE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAMINPWDAGE" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOCKOUTDURATION" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOCKOUTOBSERVATIONWINDOW" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBALOCKOUTTHRESHOLD" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAFORCELOGOFF" inserted.
          54ce8ff6 UNKNOWN attributeDescription "SAMBAREFUSEMACHINEPWDCHANGE" inserted.
          

          Et un slapcat sur le groupe:

          54ce9074 UNKNOWN attributeDescription "SAMBADOMAINNAME" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBASID" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBANEXTRID" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOGONTIME" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOGOFFTIME" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAKICKOFFTIME" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPWDCANCHANGE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPWDMUSTCHANGE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAHOMEDRIVE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPRIMARYGROUPSID" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAACCTFLAGS" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALMPASSWORD" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBANTPASSWORD" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPWDLASTSET" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAGROUPTYPE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPASSWORDHISTORY" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAALGORITHMICRIDBASE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBANEXTUSERRID" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAMINPWDLENGTH" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAPWDHISTORYLENGTH" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOGONTOCHGPWD" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAMAXPWDAGE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAMINPWDAGE" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOCKOUTDURATION" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOCKOUTOBSERVATIONWINDOW" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBALOCKOUTTHRESHOLD" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAFORCELOGOFF" inserted.
          54ce9074 UNKNOWN attributeDescription "SAMBAREFUSEMACHINEPWDCHANGE" inserted.
          dn: cn=XMPP Users,ou=Groups,dc=cerbere,dc=athaliasoft,dc=lan
          objectClass: top
          objectClass: posixGroup
          objectClass: sambaGroupMapping
          cn: XMPP Users
          gidNumber: 1000
          structuralObjectClass: posixGroup
          entryUUID: c9f6be56-3e80-1034-81dc-27135b4eb476
          creatorsName: cn=admin,dc=cerbere,dc=athaliasoft,dc=lan
          createTimestamp: 20150201170912Z
          SAMBASID: S-1-5-21-554797014-832614532-3218386644-1004
          SAMBAGROUPTYPE: 2
          displayName: XMPP Users
          memberUid: richard
          entryCSN: 20150201171055.319123Z#000000#000#000000
          modifiersName: cn=admin,dc=cerbere,dc=athaliasoft,dc=lan
          modifyTimestamp: 20150201171055Z
          

          On voit dans le groupe que l'user est présent, mais pas l'inverse (pas la seule étrangeté d'ailleurs…)

          • [^] # Re: syntax

            Posté par . Évalué à 2.

            ben voila, avec ton slapcat tu as les motifs que tu cheches,

            soit un user qui est "seeAlso=cn=xmpp,ou=Roles…."
            soit un groupe qui dispose d'un 'memberUid=richard'

            • [^] # Re: syntax

              Posté par . Évalué à 1.

              Oui mais seeAlso ce n'est pas la bonne façon de faire. Je devrai pouvoir utiliser l'attribut memberOf, mais cet attribut n'existe pas…

              • [^] # Re: syntax

                Posté par . Évalué à 1.

                ben s'il n'existe pas,tu ne peux pas l'utiliser
                tu peux eventuellement l'ajouter, mais ca va pas etre simple à maintenir.

                • [^] # Re: syntax

                  Posté par . Évalué à 1.

                  Je pensais que memberOf était la façon "standard" de chercher l'appartenance d'un utilisateur à un groupe. En tout cas, toutes les recherches que j'ai fais sur le sujet aboutissent à ça.

                  Je dois avoir un problème dans mon paramétrage ou ma façon de gérer les groupes avec smbldap…

                  • [^] # Re: syntax

                    Posté par . Évalué à 2.

                    memberOf, c'est la facon standard,
                    sauf que dans ton cas tu as un sambaldap, avec des specificités SAMBA

                    et peut-etre une petite erreur de parametrage au depart

                    tu en est encore à la maquette, ou c'est un truc en prod ?

                    • [^] # Re: syntax

                      Posté par . Évalué à 1.

                      En maquette perpétuelle :) C'est mon réseau perso.

                      ben s'il n'existe pas,tu ne peux pas l'utiliser
                      tu peux eventuellement l'ajouter, mais ca va pas etre simple à maintenir.

                      En effet: c'est exactement ce que je fais avec l'attribut seeAlso et c'est effectivement la merde à gérer, d'où mon besoin de le faire correctement :)

                    • [^] # Re: syntax

                      Posté par . Évalué à 1.

                      Après, peut être qu'utiliser samba pour peupler mon LDAP des enregistrements initiaux n'est peut être pas la bonne façon de faire.

                      Je peux tout à fait tout reprendre depuis le début et virer ma base LDAP actuelle.

                      • [^] # Re: syntax

                        Posté par . Évalué à 1.

                        en fait ca depend si tu as des windows qui ont besoin du LDAP pour connecter les utilisateurs et leur donner accés à des partages samba.

                        si ce n'est pas le cas, un openldap tout ce qu'il y a de plus standard devrait suffire.

                        • [^] # Re: syntax

                          Posté par . Évalué à 1.

                          Oui justement, j'ai des Windows derrière.

                          Mais ça, l'authentification de clients Windows avec Samba et un backend LDAP, je sais faire maintenant.

                          • [^] # Re: syntax

                            Posté par . Évalué à 2.

                            mais ton samba aura quand meme besoin d'avoir des Attribute specifiques pour samba.
                            si tu veux etre à jour, y a peut-etre un interet à regarder du coté de samba4,

                            que tu gereras comme un Active Directory, avec les memes attributs qu'un AD,
                            saMAccount pour l'utilisateur etc

                            evidemment faudra reparametrer toutes tes applis pour faire cela

                            • [^] # Re: syntax

                              Posté par . Évalué à 1.

                              Je pense que mon problème de memberOf vient de là: je n'ai pas l'objectClass samAccount

              • [^] # Re: syntax

                Posté par . Évalué à 1.

                Apparemment, memberOf n'est pas si "standard" que ça.

                Je crois que je vais continuer à utiliser seeAlso…

Suivre le flux des commentaires

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