Forum Linux.général Configuration Kerberos backend ldap

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
2
27
sept.
2022

Bonjour à tous,

En pleine migration d'une vieille installation samba3/ldap vers samba4AD/ldap/kerberos je galère pour faire communiquer kerberos et ldap.

Pour le moment je fais comme si j'étais sur une nouvelle installation et j'utilise la doc de Debian https://wiki.debian.org/LDAP/OpenLDAPSetup#Kerberos

J'ai vérifié plusieurs fois, refait plusieurs fois et à chaque fois au moment de faire un test avec kadmin.local ça déconne :

# kadmin.local 
Authenticating as principal root/admin@MON.DOM with password.
kadmin.local:  addprinc bob
No policy specified for bob@MON.DOM; defaulting to no policy
Enter password for principal "bob@MON.DOM": 
Re-enter password for principal "bob@MON.DOM": 
add_principal: Principal add failed: Insufficient access while creating "bobo@MON.DOM".

Dans les log de ldap j'ai

Sep 27 11:03:07 svdeb01 slapd[439]: => dn: [2] cn=krbcontainer,ou=kerberos,ou=services,dc=mon,dc=dom
Sep 27 11:03:07 svdeb01 slapd[439]: => dn: [5] ou=people,dc=mon,dc=dom
Sep 27 11:03:07 svdeb01 slapd[439]: => acl_get: [6] attr children
Sep 27 11:03:07 svdeb01 slapd[439]: => acl_mask: access to entry "cn=MON.DOM,cn=kerberos,ou=Services,dc=mon,dc=dom", attr "children" requested
Sep 27 11:03:07 svdeb01 slapd[439]: => acl_mask: to all values by "uid=kadmin,ou=kerberos,ou=services,dc=mon,dc=dom", (=0) 
Sep 27 11:03:07 svdeb01 slapd[439]: <= check a_dn_pat: *
Sep 27 11:03:07 svdeb01 slapd[439]: <= acl_mask: [1] applying read(=rscxd) (stop)
Sep 27 11:03:07 svdeb01 slapd[439]: <= acl_mask: [1] mask: read(=rscxd)
Sep 27 11:03:07 svdeb01 slapd[439]: => slap_access_allowed: add access denied by read(=rscxd)
Sep 27 11:03:07 svdeb01 slapd[439]: => access_allowed: no more rules
Sep 27 11:03:07 svdeb01 slapd[439]: conn=1057 op=6 RESULT tag=105 err=50 text=no write access to parent

Mes ACL sont :

# ldapsearch -LLLQ -Y EXTERNAL -H ldapi:/// -o ldif-wrap=no -b cn=config -s one olcAccess ldif-wrap=no
dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: olcDatabase={-1}frontend,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read

dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=krbPrincipalKey by anonymous auth by dn.exact="uid=kdc,ou=kerberos,ou=Services,dc=mon,dc=dom" read by dn.exact="uid=kadmin,ou=kerberos,ou=Services,dc=mon,dc=dom" write by self write by * none
olcAccess: {1}to dn.subtree="cn=krbContainer,ou=kerberos,ou=Services,dc=mon,dc=dom" by dn.exact="uid=kdc,ou=kerberos,ou=Services,dc=mon,dc=dom" read by dn.exact="uid=kadmin,ou=kerberos,ou=Services,dc=mon,dc=dom" write by * none
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to dn.subtree="ou=People,dc=mon,dc=dom" by dn.exact="uid=kdc,dc=mon,dc=dom" read by dn.exact="uid=kadmin,dc=mon,dc=dom" write by * break
olcAccess: {5}to * by * read

A force de regarder les ACL je me perds. Est-ce que vous auriez une piste ?

Merci d'avance.
Philippe.

  • # Tranquil.it

    Posté par  . Évalué à 1.

    as tu regardé le site : https://dev.tranquil.it/wiki/Samba4
    Ils ont une bonne documentation et en français.

    • [^] # Re: Tranquil.it

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

      Merci pour le lien, j'avais déjà regardé et la partie Kerberos est survoler. Peut être qu'il n'est pas nécessaire d'en dire plus ?

      Born to Kill EndUser !

      • [^] # Re: Tranquil.it

        Posté par  . Évalué à 1.

        non, avec leur doc, ça juste marche.

  • # supprimer LDAP de l'equation

    Posté par  . Évalué à 3.

    samba4 fait tres bien la gestion AD,
    il n'y a plus alors qu'à faire du Kerberos sur SAMBA4

    pour des tests :
    - tu as bien configuré le /etc/krb.conf pour aller chercher le domain controller samba4 ?
    - tu as bien fait kinit avec ton login/mot de passe du domaine ?

    • [^] # Re: supprimer LDAP de l'equation

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

      C'est une des pistes pour contourner ldap mais avant il faut que je valide que toutes les appli utilisant ldap directement sont capable de communiquer avec un AD ou alors passer par radius.

      Pour mes test :
      Pour le moment je n'ai même pas paramétré/démarré samba4, j'en suis a avoir un annuaire LDAP correspondant à la structure souhaité et ensuite faire en sorte que kerberos communique correctement avec LDAP.

      J'ai bien sûr continué à chercher et mon problème est vraiment une ACL qui empêche kerberos d'écrire dans ldap.

      Born to Kill EndUser !

  • # Peut-être une idée

    Posté par  . Évalué à 2.

    On dirait que kadmin.local veut écrire, or dans tes ACLs il n'y a que l'autorisation de lire pour le dn kadmin, si j'ai bien suivi :

    to dn.subtree="cn=krbContainer,ou=kerberos,ou=Services,dc=mon,dc=dom"
        by dn.exact="uid=kdc,ou=kerberos,ou=Services,dc=mon,dc=dom"
        read by dn.exact="uid=kadmin,ou=kerberos,ou=Services,dc=mon,dc=dom"  <--- là
        write by * none                                                      <--- et là
    

    Peut-être peux-tu essayer avec ldapsearch et ldapmodify déjà, pour tester une lecture et une écriture sans avoir kadmin.local dans l'équation ?

    • [^] # Re: Peut-être une idée

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

      L'ACL est à lire comme cela

      to dn.subtree="cn=krbContainer,ou=kerberos,ou=Services,dc=mon,dc=dom"
          by dn.exact="uid=kdc,ou=kerberos,ou=Services,dc=mon,dc=dom" read
          by dn.exact="uid=kadmin,ou=kerberos,ou=Services,dc=mon,dc=dom" write
          by * none
      

      kadmin.local se connecte avec le uid kadmin. Ldapsearch et ldapmodify marche correctement mais il n'utilise pas le compte kadmin, mais soit le compte root pour un accès local et config ou alors le compte admin défini dans la branche.

      Born to Kill EndUser !

      • [^] # Re: Peut-être une idée

        Posté par  . Évalué à 2.

        ah oui bien sûr, suis-je bête !

        Avec ldapsearch tu peux utiliser le user uid=kadmin,ou=kerberos,ou=Services,dc=mon,dc=dom pour tester, non ?

Suivre le flux des commentaires

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