会社全体の認証用にActive Directoryサーバーをセットアップしようとします。
ADに対して認証する必要があるサーバーの一部はDMZに配置されているため、LDAPサーバーをプロキシとして使用することを考えたため、DMZ ADサーバーが配置されているLAN)。
一部のグーグルでslapd(以下のslapd.confを参照)を構成することは問題ではなく、ldapsearchツールを使用すると機能するように見えたため、Apache2 htaccessでそれを使用してLDAPプロキシ経由でユーザーを認証しようとしました。
ここで問題が発生しました。ADのユーザー名が属性sAMAccountNameに保存されていることがわかりました。そのため、.htaccessで構成しましたが(以下を参照)、ログインは機能しませんでした。
Syslogで、ldapsearchのフィルターが(そうであるように)ないことがわかりました '(&(objectClass = *)(sAMAccountName = authtest01)) 'が'(&(objectClass = *)(?= undefined)) 'であることがわかったのは、slapdが属性を実行することを示す方法です存在しないか、この属性の値が構文的に間違っています。
スキーマが不足していると考え、 Microsoft.schema (およびその.std/.extのもの)を見つけ、それらをslapd.confに含めようとしました。これは機能しません。動作するスキーマが見つからなかったので、sAMAccountNameに関する部分を選んで、含まれている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=
ただし、LDAP経由でADと直接Apache htaccessを使用することもできます。誰もが機能する設定をしましたか?事前に助けをありがとう:
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ファイルでsAMAccountName属性の代わりにid属性を検索できます。
AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?uid?sub"
次のエラーメッセージが表示されます。
get_ava:attributeType sAMAccountNameの値が無効です
これは、Microsoft.minimal.schema
のsAMAccountName
属性の定義に一致するルールがないために発生します。簡単に言えば、OpenLDAPのスキーマ定義では、許可される検索の種類(存在、完全一致、部分文字列の一致など)を指定でき、この定義には何もありません。
これを試して:
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))
MSオプションの属性を何にも置き換えないので、定義する必要はありません。
ユーザーエントリの例は次のとおりです。
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