У меня есть сервер Apache 2.2 с Apache2 :: AuthenNTLM. Я успешно настроил Apache2 :: AuthenNTLM до такой степени, что он подключается к контроллеру домена. Однако допустимые комбинации имени пользователя и пароля показывают в журналах «Неверный пользователь / пароль» и не аутентифицируются.
Это конфигурация apache:
PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm
AuthName "NTLM TEST"
Require valid-user
# DOMAIN has is the domain users authenticate to, DOMAIN\username
# subdomain points to the domain controller. subdomain.domain.local.
# /etc/hosts maps subdomain to the correct IP.
PerlAddVar ntdomain "DOMAIN subdomain"
PerlSetVar ntlmdebug 1
PerlSetVar defaultdomain DOMAIN
PerlSetVar splitdomainprefix 1
Это результат журнала apache:
[4460] AuthenNTLM: Start NTLM Authen handler pid = 4460, connection = -1147051008 conn_http_hdr = Keep-Alive main = cuser = remote_ip = 10.119.1.141 remote_port = 13873 remote_host = <> version = 0.02 smbhandle =
[4460] AuthenNTLM: Object exists user = \
[4460] AuthenNTLM: Authorization Header NTLM
[4460] AuthenNTLM: protocol=NTLMSSP, type=1, flags1=7(NEGOTIATE_UNICODE,NEGOTIATE_OEM,REQUEST_TARGET), flags2=130(NEGOTIATE_ALWAYS_SIGN,NEGOTIATE_NTLM), domain length=0, domain offset=0, host length=0, host offset=0, host=, domain=
[4460] handler type == 1
[4460] AuthenNTLM: Connect to pdc = subdomain bdc = domain = DOMAIN
[4460] AuthenNTLM: timed outwhile waiting for lock (key = 23754)
[4460] AuthenNTLM: leave lock
[4460] AuthenNTLM: verify handle smbhandle == -1146832856
[4460] AuthenNTLM: charencoding = 1
[4460] AuthenNTLM: flags2 = 130
[4460] AuthenNTLM: Send header: NTLM ...
[4460] AuthenNTLM: verify handle = 1 smbhandle == -1146832856
[4460] AuthenNTLM: Start NTLM Authen handler pid = 4460, connection = -1147051008 conn_http_hdr = Keep-Alive main = cuser = remote_ip = 10.119.1.141 remote_port = 13873 remote_host = <> version = 0.02 smbhandle =
[4460] AuthenNTLM: Object exists user = \
[4460] AuthenNTLM: Authorization Header NTLM
[4460] AuthenNTLM: protocol=NTLMSSP, type=3, user=username, host=host, domain=DOMAIN, msg_len=0
[4460] handler type == 3
[4460] AuthenNTLM: verify handle = 3 smbhandle == -1146832856
[4460] AuthenNTLM: Verify user user via smb server
[4460] AuthenNTLM: rc = 3 ntlmhash = *****************
Журнал виртуального хоста:
[Mon Apr 18 15:36:38 2011] [error] Wrong password/user (rc=3/1/327681): DOMAIN\\username for /ntlm
Я не знаю, как это исправить, я специалист по Linux, и сети Windows - для меня иностранный язык. Я уверен, что это контроллер домена, в котором есть моя запись AD, и я знаю, что имя пользователя и пароль должны работать. Спасибо.
Вы не говорите, какой тип клиента вы используете, но однажды я испытал такое же поведение, и оказалось, что оно связано с новыми настройками клиента NTLM по умолчанию в Windows 7.
Более старые версии Windows используют NTLMv1. Поскольку NTLMv1 можно взломать за считанные минуты, Microsoft перешла на NTLMv2 в Vista. К сожалению, AuthenNTLM довольно старый и не обслуживается, и он не может правильно ретранслировать новые сообщения NTLM на контроллер активного домена и от него. Немного удивительно то, что на самом деле не имело значения, какой браузер я использовал: все (IExplorer, Firefox, Chrome), по-видимому, использовали средства ОС для обработки сообщений NTLM ...
Решение для меня было писать с нуля PyAuthenNTLM2 (другой модуль для Apache), потому что сервер не был частью домена и AuthenNTLM был единственным вариантом (modntlm просто не компилируется). PyAuthenNTLM2 обрабатывает как NTLMv1, так и NTLMv2, но основан на mod-python, а не на Perl.
Несколько сайтов в Интернете предлагают настроить (довольно хорошо скрытый) параметр безопасности в клиентской ОС, чтобы использовать старый NTLMv1, но я бы от этого отказался. NTLMv1 просто совершенно небезопасен по сегодняшним стандартам.