apache-2.2 – 如何设置Ubuntu Apache Active Directory?

apache-2.2 – 如何设置Ubuntu Apache Active Directory?
我已经在我们的Intranet上的盒子上运行了Ubuntu和Apache PHP MySQL.该框只能通过IP地址(当前)访问.现在我想进行设置,以便已经通过企业Active Directory服务器进行身份验证的用户可以连接网站,并使AD用户名流向PHP,而无需用户再次提供其AD凭据.我听说这叫做SSPI,但这显然只是Windows的一件事.我发现在Linux下执行操作似乎有很多不同的指南涉及编辑各种配置文件,并且没有任何指南对我有意义,因为他们中的大多数都试图在此过程中设置Samba共享而我只是需要针对AD的纯身份验证.我得到的最接近的是当它最终加入一个域时“同样开放”,但是之后我发现让Apache使用“同样开放”的指令在那之后没有意义.我接下来的说明中会有一个包含相应Apache二进制文件的’/ opt / similar /’目录,但’/ opt’中没有任何内容(它是一个空目录).

假设如下:

AD server primary DC hostname:  ad.primarydc.com (parent company owns this)AD server primary DC IP:  172.130.0.25Our AD domain:  MAIN (main.ad.primarydc.com)Our AD domain IP:  10.1.134.67Our AD admin account that can join computers to the domain:  MAINadminUbuntu box IP:  10.1.134.15Ubuntu box name:  theboxUbuntu 12.04.2 LTS

安装’same-open’,’domainjoin-cli’表示该框加入了域(THEBOX),而lw-get-status返回了一堆看起来很熟悉的东西.

以前安装了’winbind’和’libapache2-mod-auth-ntlm-winbind'(从第一次尝试开始.虽然它从未成功加入域).

我愿意重新开始,如果有一个易于遵循并且实际工作的新手指南.

究竟,我需要做些什么才能让Apache与AD交谈?

Kerberos是你的朋友! (它实际上用于Auth的AD)

How to use Kerberos with PHP

Soureforge Source & How to install Kerberos module into Apache

您可能需要:libapache2-mod-auth-curb,如下所示:

http://www.microhowto.info/howto/configure_apache_to_use_kerberos_authentication.html

全文:

配置Apache以使用Kerberos身份验证
背景

Kerberos是一种支持单点登录(SSO)概念的身份验证协议.在会话开始时进行一次身份验证后,用户可以在整个Kerberos领域中访问网络服务,而无需再次进行身份验证.为此,必须使用可识别Kerberos的网络协议.

对于HTTP,通常使用SPNEGO身份验证机制(简单和受保护的GSS-API协商)提供对Kerberos的支持.这也称为“集成身份验证”或“协商身份验证”. Apache本身不支持SPNEGO,但可以通过mod_auth_kerb身份验证模块添加支持.
脚本

假设您希望限制对网站http://www.example.com/的访问.将使用Kerberos和SPNEGO执行身份验证.启用非SPNEGO的Web浏览器无法访问该网站.

要被授予访问权限的用户是Kerberos领域EXAMPLE.COM的成员,并被命名为dougal,brian,ermintrude和dylan.可以使用主体bofh / admin来管理域.
先决条件

以下描述假定您已在Web服务器上安装了Apache和Kerberos.

Apache应处于这样一种状态,您可以从相关网站请求至少一个页面进行测试.它不需要包含任何真实内容(如果确实如此,那么您可能需要采取措施将服务器与未经授权的用户隔离,直到它得到适当保护).

Kerberos应处于EXAMPLE.COM已配置为默认域的状态,并且可以在Web服务器上获取该域的票证.
方法
概观

这里描述的方法有六个步骤

安装mod_auth_kerb身份验证模块.
为Web服务器创建服务主体.
为服务主体创建密钥表.
指定要使用的身份验证方法.
指定授权用户列表.
重新加载Apache配置.

请注意,除了在Web服务器上启用SPNEGO之外,还可能需要在Web浏览器中明确启用它.这就是Mozilla Firefox的情况.看到:

Configure Firefox to authenticate using SPNEGO and Kerberos

安装mod_auth_kerb身份验证模块

如上所述,Apache本身不提供对SPNEGO的支持,但可以使用模块mod_auth_kerb添加它.这包含在大多数主要的GNU / Linux发行版中,但由于它是第三方模块,因此通常与Apache分开打包.在基于Debian的系统上,它由libapache2-mod-auth-curb包提供:

apt-get install libapache2-mod-auth-kerb

在包含mod_auth_kerb的基于Red Hat的系统上:

yum install mod_auth_kerb

必须先加载Apache模块才能使用它们,但上述两个软件包都会自动安排.如果出于任何原因需要手动执行此操作,则相应的配置指令为:

LoadModule auth_kerb_module /usr/lib/apache2/modules/mod_auth_kerb.so

(模块的路径名应替换为适合您系统的路径名).
为Web服务器创建服务主体

SPNEGO要求为Web服务器创建Kerberos服务主体.服务名称定义为HTTP,因此对于服务器www.example.com,所需的服务主体名称为HTTP /www.example.com@EXAMPLE.COM.

如果您使用的是MIT Kerberos,则可以使用kadmin命令创建服务主体:

kadmin -p bofh/admin -q "addprinc -randkey HTTP/www.example.com"

请参阅microHOWTO使用MIT Kerberos创建服务主体,以获取有关如何创建服务主体以及为何需要服务主体的更多信息.
为服务主体创建密钥表

密钥表是用于存储与一个或多个Kerberos主体相对应的加密密钥的文件. mod_auth_kerb需要一个才能使用上面创建的服务主体.如果您使用的是MIT Kerberos,则可以使用kadmin命令创建密钥表(如服务主体).它的所有权必须是Apache进程可读的.

在基于Debian的系统上,keytab的合适位置是/etc/apache2/http.keytab,相应的所有者是www-data:

kadmin -p bofh/admin -q "ktadd -k /etc/apache2/http.keytab HTTP/www.example.com"chown www-data /etc/apache2/http.keytab

在基于Red Hat的系统上,合适的位置是/etc/httpd/http.keytab,相应的所有者是apache:

kadmin -p bofh/admin -q "ktadd -k /etc/httpd/http.keytab HTTP/www.example.com"chown apache /etc/httpd/http.keytab

-k选项指定keytab的路径名,如果它尚不存在,将创建该路径名.

请参阅microHOWTO使用MIT Kerberos将主机或服务主体添加到密钥表,以获取有关密钥记录的创建,目的以及默认密钥表(通常为/etc/krb5.keytab)不适合网络服务使用的原因的详细信息.不要以root身份运行.

如果您希望检查密钥是否已正确添加到密钥表,那么您可以尝试使用它作为服务主体进行身份验证,然后使用klist查看生成的票证授予票证:

kinit -k -t /etc/apache2/http.keytab HTTP/www.example.comklist

指定要使用的身份验证方法

必须告诉Apache哪些网站的哪些部分要使用mod_auth_kerb提供的身份验证.这是使用值为Kerberos的AuthType指令完成的.然后需要一些其他指令来配置mod_auth_kerb的行为方式.

如果意图是将这些指令应用于整个给定的Web站点,那么可以将它们放在一个容器中,该容器的路径对应于站点的根目录:

<Location /> AuthType Kerberos AuthName "Acme Corporation" KrbMethodNegotiate on KrbMethodK5Passwd off Krb5Keytab /etc/apache2/http.keytab</Location>

AuthName指令指定HTTP授权领域.其目的是向用户指示他可能知道哪些密码可以访问特定网站.使用真正的Kerberos身份验证时,应该没有密码提示,并且mod_auth_kerb在没有指定AuthName的情况下似乎运行良好;然而,Apache文档声明它是必需的,所以无论如何提供一个似乎是谨慎的.合适的值可能是域名,Kerberos域的名称或网站所属组织的名称.

除了SPNEGO协议之外,mod_auth_kerb还能够使用基本身份验证向用户询问密码,然后通过尝试向KDC进行身份验证来验证密码.如果需要从不属于Kerberos领域的计算机访问其授权用户的Web站点,这可能很有用,但是它的安全性远低于真正的Kerberos身份验证.默认情况下启用SPNEGO和密码身份验证.在此示例中,不要求非启用SPNEGO的Web浏览器可访问该站点,因此已使用KrbMethodK5Passwd指令禁用密码身份验证.为了完整性,已使用KrbMethodNegotiate指令显式启用SPNEGO.

Krb5Keytab指令指定已添加HTTP服务主体的keytab的路径名.它应匹配此过程前面传递给kadmin的ktadd命令的任何内容.

尽管在此示例中使用了容器,但将上述指令放在a,容器或.htaccess文件中同样可以接受.
指定授权用户列表

设置身份验证方法本身并不限制对服务器的访问.这是因为Apache默认允许匿名用户访问,除非覆盖该行为,否则将不会调用身份验证方法(无论它可能是什么).

在此示例中,只有四个用户需要访问权限,最简单的方法是通过Require指令进行安排:

<Location /> # ... Require user dougal@EXAMPLE.COM brian@EXAMPLE.COM ermintrude@EXAMPLE.COM dylan@EXAMPLE.COM</Location>

请注意,每个名称都由其所属的Kerberos领域限定.

对于具有大量用户的服务器,这显然不是可扩展解决方案,但Apache有其他授权方法可以有效地处理大量用户,包括mod_authz_dbd和mod_authnz_ldap.
重新加载Apache配置

请参阅使系统服务重新加载其配置.在最近的基于Debian的系统上,所需的命令是:

service apache2 force-reload

安全考虑
密码验证

如上所述,mod_auth_kerb能够使用HTTP基本身份验证从Web浏览器请求用户名和密码,然后使用Kerberos检查该用户名和密码是否有效.与真正的Kerberos身份验证相比,此方法有三个严重的缺点:

The password is sent unencrypted as part of the HTTP stream.The password is exposed to the Apache server.The password must be entered mid-session.

可以通过启用TLS(SSL)访问和禁用纯HTTP来解决这些问题中的第一个问题.第二点和第三点不易处理,并且破坏了单点登录模型提供的许多安全优势,特别是Kerberos.

实际上,有时需要允许来自不属于Kerberos领域的主机或不支持SPNEGO的用户代理进行访问.因此,建议永远不要将密码身份验证用作回退是不现实的,但是如果您可以而且不应该仅仅因为默认情况下启用密码身份验证,则最好避免使用.
SPNEGO

使用SPNEGO进行身份验证解决了上面列出的问题,但它与HTTP集成的方式远非理想.当客户端对Kerberos网络服务进行身份验证时,身份验证过程的一个产品是加密密钥,客户端和服务器可以使用该加密密钥来保护它们之间的任何进一步通信.使用SPNEGO对HTTP连接进行身份验证时不会使用此选项,这意味着如果在身份验证完成后连接被劫持,则无法阻止攻击者发出未经授权的HTTP命令.

使用TLS(SSL)保护连接可以大大降低此风险.这可以防止连接在建立后被劫持,并防止服务器接受与其没有有效证书的网站的连接.由于可以颁发证书的大量组织,这不是一个完美的解决方案.有一种解决方案使用通道绑定将TLS密钥链接到Kerberos,但是在编写本文时它还没有被广泛实现(并且mod_auth_kerb不支持).

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部