AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 576395
Accepted
Znik
Znik
Asked: 2014-02-19 01:28:06 +0800 CST2014-02-19 01:28:06 +0800 CST 2014-02-19 01:28:06 +0800 CST

Apache2 身份验证 NTLM 没有提示的半基本身份验证类型

  • 772

我成功配置了 ntlm 身份验证。不幸的是,配置允许半基本授权。例如,当我使用 tortoise svn1.8.4(带有 serf 访问库)、chrome 或 IE 网络浏览器时,它们会成功验证 NTLM 而不会提示任何内容。在日志文件中,我看到经过身份验证的用户。不幸的是,当我使用例如未配置的 FireFox 或 Maxthon 时,浏览器会提示我输入凭据。我不需要这个,因为同样的情况是当我尝试从域外计算机访问时。

我使用 windows 服务器作为域控制器,windows7/8 作为系统客户端,linux/debian 作为 web 服务器。我从 linux do windows AD 配置了 kerberos,为本地 NTLM 身份验证和 apache 2.2 系列配置了 winbind。对于 apache 身份验证胶,我使用 mod_auth_ntlm_winbind.so apache2 模块,并在目录/位置配置 ntlm helper 下与 winbind 通信。这可以正常工作,例如 apache:

<Directory /var/www/>
  #defaults for main www directory
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  #modified, prevent for any ip access, for future add authless access from specified hosts
  Order deny,allow
  deny from all
  #allow from IP/mask
  #settings for NTLM auth with winbind helper
  AuthName "NTLM Authentication"
  NTLMAuth on
  NTLMAuthHelper "/usr/bin/ntlm_auth  --domain=MY.WINDOWS.DOMAIN --helper-protocol=squid-2.5-ntlmssp"
  NTLMBasicAuthoritative on
  AuthType NTLM
  require valid-user
  #because ip is default deny
  satisfy any
</Directory>

我希望,也许我可以使用 apache authtype 变量进行一些重定向,然后我添加到重写上面的配置中:

  RewriteEngine on
  RewriteRule ^ /cgi-bin/TestAuth.pl?DollarOne=1&AUTH_TYPE=%{AUTH_TYPE}&REMOTE_USER=%{REMOTE_USER}

示例脚本 TestAuth.pl 作为 cgi 内容:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper; #easy way for print system variables
print "Content-type:text/plain\r\n"; #respectint HTML protocol
print "\r\n";
print "Enviroment contains:\r\n";
print "x\r\n";
print Data::Dumper->Dump([\@ARGV,\%ENV],[qw(ARGV ENV)]); #prints all script arguments and process variables

不幸的是,在所有情况下,使用基于 Windows 的身份验证 ntlm 和提示凭据,我总是看到 AUTH_TYPE 总是 NTLM。那么就没有办法识别浏览器做了什么。在那种情况下,我可以从域外的客户端访问。

我尝试通过 strace 包装 ntlm hepler。不幸的是,我没有看到任何重要的转储与四种方式结合成功/失败的身份验证和 IE 非提示 ant FF 提示的访问。我认为当 ntlm helper 对本地 samba 服务器进行身份验证时会发生同样的情况,但我从未对此进行过测试。

现在我正在尝试使用多种身份验证类型、基本和 NTLM 进行一些配置。我先尝试做 Basic 并过滤掉这个总是失败并将其重定向到信息页面。不幸的是,现在 NTLM 组合没有成功:( NTLM 总是先完成。

那么有人知道如何防止凭据提示吗?如何撤销提示客户的访问权限?如何识别凭据是来自提示符还是来自 Windows 客户端 api?

apache-2.2
  • 2 2 个回答
  • 13529 Views

2 个回答

  • Voted
  1. Best Answer
    Ryan Newington
    2014-02-19T01:36:57+08:002014-02-19T01:36:57+08:00

    使用 NTLM 身份验证并不能保证无凭据登录。如果您拥有服务器可以识别的有效 Windows 凭据,您将不会收到密码提示。

    如果用户没有有效的 NTLM 传递凭据,系统将提示他们提供这些凭据。无法恢复到“基本”身份验证。

    不幸的是,无法判断用户是否提供了凭据,或者它们是否被系统传递。

    也许问一个新问题,概述您希望您的用户体验什么(即内部和外部用户的不同站点),有人可能会以不同的方式提供帮助。

    • 0
  2. Znik
    2014-02-21T04:04:40+08:002014-02-21T04:04:40+08:00

    现在我解决了将 NTLM 切换到 Kerberos 身份验证的问题。所有为winbind准备的都是直接在kerberos下工作的,因为我之前配置了kerberos for winbind与AD服务器通信。由于 kerberos 是开放的,因此开发人员预测了用户端点上的不同子身份验证。apache2.2 kerberos 模块中的标志非常有用:

    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    

    这导致了我想要的。浏览器获取具有属性“不要弹出用户 fo 凭据”的 krb 框架,然后客户端根本不这样做。但如果是(任何不兼容?),apache 服务器模块应该检测到这一点并应该撤销身份验证。

    使用微软的 NTLM 这是不可能的,因为协议被破坏了。Web 返回代码 201 之后的第一个 NTLM 帧不可能添加属性“不提示用户输入凭据”。然后我可以在弹出窗口或操作系统会话键签名后过滤该帧。当操作系统会话密钥不可用时,这会导致浏览器始终显示弹出窗口。

    最终是另一个机会。用户需要一些时间来编写凭据,或者在凭据存储在浏览器中时接受。我可以计算向浏览器发送身份验证帧和从客户端传入帧之间的时间。当时间太长我可以撤销。不幸的是,这可能会在繁忙的计算机或网络上造成虚假的未经身份验证。

    将来我会尝试这两种方法:) 如果一切都可以在 apache winbind auth 模块下完成,那将会很有趣。然后所有配置都可以封装在apache下,就像kerberos auth一样。

    谢谢大家的有趣,调查和帮助:)

    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve