Мы запускаем среду с несколькими каталогами (AD и OpenLDAP) и выполняем синхронизацию паролей через внутреннее веб-приложение. Это работает хорошо, потому что мы запретили пользователям изменять свои собственные пароли через OpenLDAP, а доступ к AD мог получить только несколько служб, требующих AD.
Однако сейчас мы изучаем возможность подключения ПК к домену 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,
)
Из документов, которые вы связали:
PASSWD_CANT_CHANGE
Примечание. Вы не можете назначить это разрешение, напрямую изменив атрибут UserAccountControl. Для получения информации о том, как установить разрешение программным способом, см. Раздел «Описание флагов свойств».
И описание флага свойства:
PASSWD_CANT_CHANGE - Пользователь не может изменить пароль. Это разрешение на объект пользователя.
Или, другими словами, этот конкретный бит в битовой маске не может быть установлен и возвращается после расчета разрешений для объекта пользователя.
Также ссылка из этого документа http://msdn.microsoft.com/en-us/library/aa746398.aspx, в котором описывается, как программно настроить разрешения для пользовательских объектов.
Что вы хотите сделать, так это запретить доступ псевдопользователя SELF для изменения пароля. Лучший способ сделать это - настроить разрешения для всего подразделения, чтобы ограничить изменение пароля. Отсюда переместите все соответствующие пользовательские объекты в это OU и убедитесь, что пользовательские объекты наследуют свои разрешения от OU.
Если у вас возникли проблемы с настройкой безопасности, убедитесь, что в ADUC включены дополнительные функции («Просмотр» -> «Дополнительные функции»).
Подобно решению maniargaurav, но вы можете сделать это программно с помощью PowerShell (если это Server 2008 R2 или с помощью командлетов Qwest AD текст ссылки) или VBscript. Если вы сейчас используете Python, у вас не должно возникнуть проблем с перечислением всех пользователей и выполнением следующего сценария (от Scripting Guy в MS) текст ссылки.
Я не администратор Windows, но разве не для этого нужна групповая политика? Краткий поиск в Google дает http://support.microsoft.com/kb/324744, который, кажется, делает почти то, что вы хотите. Это будет модель «установил и забыл».
Также, этот vbscripts стремится делать то, что вы хотите.
Я не уверен, как вы можете добиться этого с помощью программы, но в Active Directory User and Computers. Выберите Пользователь и перейдите в свойства. Есть опция «Пользователь не может изменить пароль».
Вы также можете проверить следующий URL, если это поможет:
http://msdn.microsoft.com/en-us/library/ms680832(VS.85).aspx