Python et utilisateurs Active Directory

J’ai fais quelques scripts python pour manipuler un utilisateur sur Active Directory.

Pour voir votre arbre LDAP sur un AD 2012 vous pouvez utiliser l’outil ldp.exe. La documentation de Microsoft est disponible ici. Celui-ci vous permet de connaitre précisément la hiérarchie de votre arbre LDAP sur l’AD afin de renseigner les informations nécessaires au bon fonctionnement des scripts.

Attention ! Pour utiliser les scripts d’insertion et modification d’un utilisateur, il faut avoir activé le SSL sur le serveur AD. La connexion s’effectue alors en LDAPS sur le port 636. Pour ce faire , vous devez installer le rôle « Services de certificats Active Directory » sur le serveur.

 Tester la connexion d’un utilisateur

Le premier script permet de tester un utilisateur. Les variables à saisir sont :

  • LDAP_ADDR : adresse du serveur AD. De la forme ldap://monserveur.domaine:port
  • LDAP_BASE : le base DN du ldap.
  • LDAP_BIND : l’utilisateur pour lequel on va tester la connexion
  • user_pwd : le mot de passe

 Insérer un utilisateur

Les variables sont les mêmes que précédemment. Cette fois le bind se fait avec un utilisateur administrateur. A noter que l’utilisateur est ici juste enregistré sur l’AD mais non activé. L’activation ne peut se faire à la création.

  • LDAP_BIND_ADMIN : utilisateur avec droit d’admin
  • user_dn : le DN du future utilisateur
  • ad_user : tableau associatif des attributs du nouvel utilisateur.

 Activer un utilisateur

Comme je l’ai dis plus haut, un utilisateur ne peut être activé à la création. Voici donc le script pour le faire juste après.

 Modifier un mot de passe

La modification de mot de passe ne peut s’opérer que sur une couche TLS. Ici le script utilise le ldaps avec le port 636. Il est possible de conserver le port standard 389 en forçant le TLS.

 

4 thoughts on “Python et utilisateurs Active Directory”

  1. Maxime dit :

    Bonjour à vous,

    merci pour tout ces exemples, seulement une chose ne fonctionne pas: userAccounControl.
    Voici la solution qui est simple, dans le second script après avoir injecter le contenu du dico dans le ldap il faut de nouveau définir le password avec le bon formatage:

    PASSWORD_ATTR = « unicodePwd »
    unicode_pass = unicode(« \ » » + PWD_USER + « \ » », « iso-8859-1 »)
    password_value = unicode_pass.encode(« utf-16-le »)
    add_pass = [(ldap.MOD_REPLACE, PASSWORD_ATTR, [password_value])]

    # Replace password
    try:
    l.modify_s(USER_DN, add_pass)
    print « password OK »
    except ldap.LDAPError, e:
    sys.stderr.write(‘Error setting AD password for the user \n’)
    sys.stderr.write(‘Message: ‘ + str(e) + ‘\n’)
    sys.exit(1)

    Sans cela mon user est désactivé par défaut (et c’est normal) mais il m’est impossible de le réactiver même par GUI, j’ai un gros message d’erreur comme quoi le password ne répond pas à la politique….

    Avec ce bout de code je peux de nouveau l’activer via le GUI ou le script

    1. N.i.c.O dit :

      Merci pour ce commentaire, cela servira surement sysadmin de passage sur l’article.

  2. laurent dit :

    Bonjour,
    Merci pour les scripts, il serait peut être intéressant de rappeler que la modification de password ne peut s’opérer que sur une couche TLS. Sur le port 389 ça ne fonctionne pas

    1. N.i.c.O dit :

      Exact !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *