将OpenLDAPconfiguration为Active Directory代理

我们尝试为公司范围的身份validation设置Active Directory服务器。

一些应该对AD进行身份validation的服务器放置在DMZ中,因此我们考虑使用LDAP服务器作为代理,以便DMZ中只有一台服务器必须连接到放置AD服务器的LAN )。

用一些Googlesearchfunction来configurationslapd是没有问题的(参见下面的slapd.conf),而且在使用ldapsearch工具时似乎可行,所以我们试图在apache2 htaccess中使用它来通过LDAP代理对用户进行身份validation。

问题来了:我们发现AD中的用户名存储在属性'AMAccountName'中,所以我们在.htaccess中configuration了它(见下文),但login无效。

在系统日志中,我们发现ldapsearch的filter不是(它应该是)' (&(objectClass = *)(sAMAccountName = authtest01)) 'but' (&(objectClass = *)(?= undefined))我们发现这是slapd的方式来显示该属性不存在或值在语法上是错误的这个属性。

我们想到了一个丢失的模式,并find了microsoft.schema (和它的.std / .ext文件),并试图将它们包含在slapd.conf中。 哪个不行 我们没有find工作模式,所以我们只是select了关于sAMAccountName的部分,并构build了一个包含我们的microsoft.minimal.schema(见下文)。 现在我们在syslog中获得更精确的日志:

Jun 16 13:32:04 breauthsrv01 slapd[21229]: get_ava: illegal value for attributeType sAMAccountName Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH base="ou=xxx,dc=int,dc=xxx,dc=de" scope=2 deref=3 filter="(&(objectClass=\*)(?sAMAccountName=authtest01))" Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH attr=sAMAccountName Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text= 

尽pipe通过LDAP直接使用我们的Apache htaccess与AD工作。 任何人有一个工作设置? 提前感谢您的帮助:

slapd.conf中:

 allow bind_v2 include /etc/ldap/schema/core.schema ... include /etc/ldap/schema/microsoft.minimal.schema ... backend ldap database ldap suffix "ou=xxx,dc=int,dc=xxx,dc=de" uri "ldap://80.156.177.161:389" acl-bind bindmethod=simple binddn="CN=authtest01,ou=GPO-Test,ou=xxx,dc=int,dc=xxx,dc=de" credentials=xxxxx 

的.htaccess:

 AuthBasicProvider ldap AuthType basic AuthName "AuthTest" AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?sAMAccountName?sub" AuthzLDAPAuthoritative On AuthLDAPGroupAttribute member AuthLDAPBindDN CN=authtest02,OU=GPO-Test,OU=xxx,DC=int,DC=xxx,DC=de AuthLDAPBindPassword test123 Require valid-user 

microsoft.minimal.schema:

 attributetype ( 1.2.840.113556.1.4.221 NAME 'sAMAccountName' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE ) 

您需要将映射添加到您的slapd.conf文件中:

 moduleload rwm ... overlay rwm rwm-map attribute uid sAMAccountName rwm-map objectClass posixGroup group rwm-map objectClass posixAccount person rwm-map objectClass memberUid member 

然后,您可以在.htaccess文件中searchuid属性而不是sAMAccountName属性:

 AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?uid?sub" 

你看到这个错误信息:

get_ava:attributeType sAMAccountName的非法值

这是由于microsoft.minimal.schema缺less匹配规则的sAMAccountName属性定义引起的。 简单地说,OpenLDAP的模式定义允许你说什么样的search是允许的(存在,完全匹配,子串匹配等),这个定义没有。

尝试这个:

  attributetype ( 1.2.840.113556.1.4.221 NAME 'sAMAccountName' EQUALITY caseIgnoreMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE ) 

乔纳森的回答指出了我正确的方向,让我看看:

 additional info: sAMAccountName: attribute type undefined 

问题。 但是我意识到,你需要定义这个属性作为一个人的条目的合法值,并且你需要给每个人一个允许拥有该属性的objectClass。 就像所有的属性,你可以给一个inetOrgPerson。

我的microsoft.minimal.schema文件现在是:

 attributetype ( 1.2.840.113556.1.4.221 NAME 'sAMAccountName' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE ) attributetype ( 1.2.840.113556.1.4.146 NAME 'objectSid' SYNTAX '1.3.6.1.4.1.1466.115.121.1.40' SINGLE-VALUE ) objectclass ( 1.2.840.113556.1.5.6 NAME 'securityPrincipal' SUP top AUXILIARY MUST (objectSid $ sAMAccountName ) MAY () ) # MAY (nTSecurityDescriptor $ securityIdentifier $ supplementalCredentials $ # rid $ sAMAccountType $ sIDHistory $ altSecurityIdentities $ tokenGroups $ # tokenGroupsNoGCAcceptable $ accountNameHistory $ # tokenGroupsGlobalAndUniversal)) 

我没有任何东西replaceMS可选属性,所以我不必定义它们。

示例用户条目如下所示:

 dn: uid=user2,ou=example,dc=aa,dc=ad,dc=example,dc=gov uid: user2 sAMAccountName: user2 objectSid: user2 cn: User Two displayName: User Two givenName: User2 sn: One objectClass: inetOrgPerson objectClass: securityPrincipal mail: [email protected] # password from slappasswd is 'user2' userPassword: {SSHA}sjB5fmIIPTrUUammtmonP+6DdC93+P4L