Смена пароля в Active Directory

Материал из Eludia.

Перейти к: навигация, поиск
Прежде всего, украдите самую большую кастрюлю в деревне...

Фольклор, «Борщ по-румынски».


Тема этой заметки имеет некоторое отношение к компьютерной так называемой "безопасности".

Здесь собраны некоторые сведения, нужные для того, чтобы реализовать смену пароля учётной записи Active Directory средствами WEB-приложения, при помощи протокола LDAP.

Собственно смена пароля

Почти всё, что для этого необходимо, указано в Net::LDAP::FAQ. Во всяком случае, следующие пункты не подлежат сомнению:

  • смена пароля возможна только при соединении по LDAPS (LDAP / SSL);
  • пароль записывается в атрибут unicodePwd;
  • значение заключается в кавычки и передаётся в перевёрнутом (little endian) utf-16.

А вот эти моменты из примера копировать по возможности не стоит:

  • заход в AD под редактируемой учётной записью (со старым паролем);
  • двойная LDAP-операция над атрибутом (delete/add).

По идее, приведённый там код должен работать, но на практике его применение (с Windows Server 2003) вызвало проблемы, которые были решены следующим образом:

  • заход в AD под специальной учётной записью, с правами смены паролей;
  • атомарная LDAP-операция над атрибутом (replace).

Настройка LDAPS

Если ваш сервер AD ещё не слушает 636 порт, то вам необходимо этого добиться, то есть настроить поддержку LDAPS.

LDAPS относится к LDAP ровно так же, как HTTPS к HTTP: тот же трафик шифруется при помощи SSL.

Необходимая настройка сводится к установке SSL-сертификата, удовлетворяющего ряду специфических требований.

Забавно, что прописывать сертификат надо не в AD, а в общесистемные настройки сервера. Конкретно: в сертификаты учётной записи компьютера.

Если вы не собираетесь покупать сертификат, а хотите сделать всё своими руками, то, пожалуй, удобнее всего будет действовать в следующем порядке:

1. Прежде всего, убедитесь, что у вас настроен DNS-сервер и машина опознаёт сама себя по доменному имени (допустим, это my.server.ru). Не исключено, что сойдёт и пропись в c:\Windows\System32\Drivers\etc\hosts, но если нет — обидно будет возвращаться к этому вопросу.

2. Далее проверьте, установлена ли "служба сертификатов" и является ли ваш сервер Удостоверяющим центром (Certification authority, CA) хотя бы сам для себя. Если нет — доставьте соответствующий компонент Windows.

3. Раздобудьте где-нибудь (в Platform SDK, например) программку makecert.exe и запустите её вот с такими ключиками:

makecert 
 -r -pe -n "CN=my.server.ru" 
 -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 
 -ss my -sr localMachine -sky exchange
 -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

4. Откройте mmc.exe, добавьте оснастку (Ctrl-M) "сертификаты / учётной записи компьютера / локального" (локального — потому что mmc вы запустили, конечно, на том же сервере, где AD, DNS и CA). И там в личной папочке уже должен лежать необходимый сертификат. Проверьте, что он не считается подозрительным. Если считается — копируйте его через clipboard в прочие папки до тех пор, пока сервер не научится, наконец, уважать сам себя.

5. Перезагрузите сервер. Совсем. Очнувшись, он должен прислушаться к порту 636. Теперь можно менять пароли.

Консультации
Разработчику
Администратору