How can I change password for domain user(windows Active Directory) using Python?

后端 未结 3 347
挽巷
挽巷 2020-12-21 00:38

How can I change the password for a domain user with Python? I have the ldap modules on board but have no solution. I managed to query the current settings via ldap, but how

相关标签:
3条回答
  • 2020-12-21 01:01

    The password change code looks perfect.

    you are not binding after initialize. bind is a must.

    con.simple_bind_s(user, pass)
    

    Also, for starters you can ignore certificate errors for bind by setting this option. Once you are able to update password, you can harden the certificate thingy if you want.

    con.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    
    0 讨论(0)
  • 2020-12-21 01:05

    Python is not my language, but changing the Active-Directory password via LDAP is something I do.

    As far as your URL is concerned :

    Your LDAP URL should be like :

    host = 'LDAP://10.172.0.79/dc=directory,dc=example,dc=com'
    

    With 'LDAP' and not 'ldap' and the good directory path behind.

    As far as the password is concerned :

    First : As far as I understand you can change the AD pasword unicode_pass only if you server has a certificate and if you contact if via LDAPS (SSL).

    Second : the password is given with double qote password test.2006 becomes "test.2006".

    Third : the resutl must be coded in unicode.


    Edited :

    Once you have installed Certificate Server you just have to reboot your server to have AD waiting on port 636 (LDAPS). On Python side, here is what I found :

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    l = ldap.initialize("LDAPS://10.172.0.79:636")
    l.set_option(ldap.OPT_REFERRALS, 0)
    l.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
    l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
    l.set_option( ldap.OPT_X_TLS_DEMAND, True )
    l.set_option( ldap.OPT_DEBUG_LEVEL, 255 )
    l.simple_bind_s("admin@tester.com","password")
    
    0 讨论(0)
  • 2020-12-21 01:13

    This code is working with Windows 2012 R2 AD:

    First install latest ldap3 package: sudo pip install ldap

    #!/usr/bin/python
    
    import ldap3
    
    SERVER='127.0.0.1'
    BASEDN="DC=domain,DC=com"
    USER="user_domain_login_name@domain.com"
    CURREENTPWD="current_password"
    NEWPWD="new_password"
    
    SEARCHFILTER='(&(userPrincipalName='+USER+')(objectClass=person))'
    
    USER_DN=""
    USER_CN=""
    
    ldap_server = ldap3.Server(SERVER, get_info=ldap3.ALL)
    conn = ldap3.Connection(ldap_server, USER, CURREENTPWD, auto_bind=True)
    conn.start_tls()
    #print conn
    conn.search(search_base = BASEDN,
             search_filter = SEARCHFILTER,
             search_scope = ldap3.SUBTREE,
             attributes = ['cn', 'givenName', 'userPrincipalName'],
             paged_size = 5)
    
    for entry in conn.response:
        if entry.get("dn") and entry.get("attributes"):
            if entry.get("attributes").get("userPrincipalName"):
                if entry.get("attributes").get("userPrincipalName") == USER:
                    USER_DN=entry.get("dn")
                    USER_CN=entry.get("attributes").get("cn")
    
    print "Found user:", USER_CN
    print USER_DN
    print ldap3.extend.microsoft.modifyPassword.ad_modify_password(conn, USER_DN, NEWPWD, CURREENTPWD,  controls=None)
    
    0 讨论(0)
提交回复
热议问题