我有一台运行 Apache2::AuthenNTLM 的 Apache 2.2 服务器。我已成功配置 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 条目的域控制器,并且我知道用户名和密码应该有效。谢谢。
答案1
您没有说您使用哪种客户端,但有一次我遇到了相同的行为,结果发现它与 Windows 7 中的新默认 NTLM 客户端设置有关。
旧版本的 Windows 使用 NTLMv1。由于 NTLMv1 可以在几分钟内被破解,因此 Microsoft 在 Vista 中已切换到 NTLMv2。不幸的是,AuthenNTLM 相当老旧且无人维护,它无法正确地将新的 NTLM 消息传递到活动域控制器或从活动域控制器传递新 NTLM 消息。稍微令人惊讶的是,我使用哪种浏览器实际上并不重要:所有浏览器(IExplorer、Firefox、Chrome)显然都使用操作系统功能来处理 NTLM 消息...
对我来说,解决方案是从头开始写 验证NTLM2(Apache 的另一个模块),因为服务器不是域的一部分,并且 AuthenNTLM 是唯一的选项(摩登根本无法编译。PyAuthenNTLM2 可处理 NTLMv1 和 NTLMv2,但基于 mod-python,而不是 Perl。
网络上有几个网站建议调整客户端操作系统中的(相当隐蔽的)安全设置,以便使用旧的 NTLMv1,但我不建议这么做。按今天的标准来看,NTLMv1 完全不安全。