Назад | Перейти на главную страницу

Отключение возможности пользователя изменять пароль в Active Directory

Мы запускаем среду с несколькими каталогами (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