Active-Directory

禁用使用者在 Active Directory 上更改密碼的能力

  • February 14, 2019

我們執行多目錄環境(AD 和 OpenLDAP)並通過內部 web 應用程序執行密碼同步。這很有效,因為我們已經禁止使用者通過 OpenLDAP 更改自己的密碼,並且 AD 只能由少數需要 AD 的服務訪問。

但是,我們現在正在研究允許 PC 連接到 AD 域。最初,我認為禁用使用者密碼更改就像更改我們在帳戶配置期間分配的初始**userAccountControl LDAP 屬性一樣簡單。**事實證明這並不像我想像的那麼簡單。

我們目前使用 Python 和python-ldap進行帳戶配置(程式碼如下),根據Microsoft 文件,我們將userAccountControl設置為 66048(普通帳戶且密碼不會過期)。我嘗試將其更改為 66112(66048 + 禁用使用者密碼更改),但 AD 沒有保留該值,而是將其記錄為 66048。

有沒有人做過這樣的事情?我更願意通過使用 Python 或 AD 上的“一勞永逸”設置來完成它。

僅供參考:這就是帳戶配置 Python 程式碼現在的樣子:

import ldap

l = ldap.initialize(server)
l .simple_bind_s(admin_cn, admin_pass)

attributes = [
   ('displayName', login),
   ('sAMAccountName', login),
   ('cn', login),
   ('givenName', fn),
   ('sn', ln),
   ('name', full_name),
   ('userPrincipalName', '%s@example.com' % login),
   ('objectClass', ['person', 'top', 'organizationalPerson', 'user']),
   ('userAccountControl', '66048'), # <--- Line I thought I could change but not working as expected
   ('unicodePwd', encoded_password)
]

l.add_s(
   'cn=%s,ou=users,dc=example,dc=com' % login,
   attributes,
)

我不是 Windows 管理員,但這不正是組策略的用途嗎?一個簡短的 Google 搜尋會產生http://support.microsoft.com/kb/324744,這似乎幾乎完全符合您的要求。這就是“一勞永逸”的模式。

此外,這個vbscripts 聲稱可以做你想做的事。

從您連結的文件中:

PASSWD_CANT_CHANGE

注意:您不能通過直接修改 UserAccountControl 屬性來分配此權限。有關如何以程式方式設置權限的資訊,請參閱“屬性標誌說明”部分。

和屬性標誌描述:

PASSWD_CANT_CHANGE - 使用者不能更改密碼。這是對使用者對象的權限。

或者換句話說,無法設置位遮罩中的特定位,並在計算使用者對象的權限後返回。

該文件還連結到http://msdn.microsoft.com/en-us/library/aa746398.aspx,它描述瞭如何以程式方式調整使用者對象的權限。

您要做的是拒絕 SELF 偽使用者訪問以更改密碼。最好的方法是在整個 OU 上配置權限以限制密碼更改。從這裡,將所有相關使用者對象移動到此 OU 中,並確保使用者對像從 OU 繼承其權限。

如果您在設置安全性時遇到問題,請確保您在 ADUC 中啟用了高級功能(查看 –> 高級功能)。

引用自:https://serverfault.com/questions/191072