web-dev-qa-db-ja.com

ADに対するネットボックス認証は機能しませんが、パラメーターはコマンドラインで機能します

CentOSサーバーにネットボックスを設定し、それをADサーバーに対して認証できるようにしようとしています。何を試しても、サーバーは次の行をログに記録するだけです。

My_userの認証に失敗しました:ユーザーDN /パスワードがLDAPサーバーによって拒否されました。

拒否されているのはバインドDNかユーザーDNかはわかりません。

まず、ネットボックスのスーパーユーザーに接続し、データを参照して入力します。したがって、インストールは機能しています。 netbox installation doc、Chapter 5 にあるドキュメントに従って、LDAP認証を有効にしました。これは私の(難読化された)設定です:

###################################
### LDAP server
###################################
import ldap

# Server URI - ldaps port is 696
AUTH_LDAP_SERVER_URI = "ldaps://ad-ldap.my.domain:696"

AUTH_LDAP_CONNECTION_OPTIONS = {
    ldap.OPT_REFERRALS: 0
}

AUTH_LDAP_BIND_DN = "CN=netbox,OU=Users,DC=My,DC=Domain"
AUTH_LDAP_BIND_PASSWORD = "********"

LDAP_IGNORE_CERT_ERRORS = True

###################################
### User Authentication
###################################
from Django_auth_ldap.config import LDAPSearch

AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Users,DC=My,DC=Domain",
                                    ldap.SCOPE_SUBTREE,
                                    "(sAMAccountName=%(user))")

AUTH_LDAP_USER_DN_TEMPLATE = "None"

AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail",
    "uid": "samaccountname"
}

###################################
### User groups for permissions
###################################
from Django_auth_ldap.config import LDAPSearch, GroupOfNamesType

AUTH_LDAP_GROUP_SEARCH = LDAPSearch("OU=Sec - Tree,OU=Groups,DC=My,DC=Domain", ldap.SCOPE_SUBTREE,
                                    "(objectClass=group)")
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()

AUTH_LDAP_REQUIRE_GROUP = "CN=G_Netbox_Users,OU=Sec - Tree,OU=Groups,DC=My,DC=Domain"

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_active": "CN=G_Netbox_RO,OU=Sec - Tree,OU=Groups,DC=My,DC=Domain",
    "is_staff": "CN=G_Netbox_RW,OU=Sec - Tree,OU=Groups,DC=My,DC=Domain",
    "is_superuser": "CN=G_Netbox_Admins,OU=Sec - Tree,OU=Groups,DC=My,DC=Domain"
}

AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600

# LDAP Logging
import logging, logging.handlers
logfile = "/var/log/netbox/Django-ldap-debug.log"
my_logger = logging.getLogger('Django_auth_ldap')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
logfile, maxBytes=1024 * 500, backupCount=5)
my_logger.addHandler(handler)

私が試したこと:

  • uRI内のサーバー名を存在しないfqdnに変更して、実際にLDAPサーバーに接続することを示します。
  • ldapsの代わりにldapを使用-影響なし
  • ネットボックス用に構成されたものと同じバインドユーザー、パスワード、ベースDNを使用して、open-ldapツールldapsearchを使用してコマンドラインで試してください。返されたユーザーDNとのバインドも試みましたが、どちらも成功しました。
ldapsearch -H ldaps://ad-ldap.my.domain:696 -D "CN=netbox,OU=Users,DC=My,DC=Domain" -w '*******' -b "OU=Users,DC=My,DC=Domain" "(sAMAccountName=my_user)" dn

ldapsearch -H ldaps://ad-ldap.my.domain:696 -D "CN=my user name,OU=Users,DC=My,DC=Domain" -w '*******' -b "OU=Users,DC=My,DC=Domain" "(sAMAccountName=my_user)" cn

  • ネットボックスユーザーの(非常に)強力なパスワードを文字と数字のみのパスワードに変更-影響なし
  • aUTH_LDAP_USER_SEARCHでより広いベースDNを使用します。つまり、OUを削除します(実際のベースには番号があります)-影響なし

グーグルはまた私を助けません。私は途方に暮れています、それはドキュメントに従って動作するはずです、すべてが正しく見えます。ここで何が欠けていますか?

1
Tony

他の誰かがこの問題に遭遇した場合に備えて、私の解決策をここに投稿します。

根本的な原因は、ドキュメント内のこのあいまいなステートメントです:

Windows Server 2012を使用する場合、AUTH_LDAP_USER_DN_TEMPLATEをNoneに設定する必要があります。

これをこの変数の値を「なし」に設定すると解釈し、Netbox/Djangoがテンプレートの使用をスキップする必要があると考えました(pythonプログラマーではありません)。

Django-auth-ldapはユーザーフレンドリーな1行の警告のみを発行し、すべてのLDAPエラーを非表示にするため、プレーンテキストLDAPへのバインドとWiresharkによるパケットスニッフィングに頼ってDjango実際には、構成済みのバインドDNでバインドするのではなく、DNとして文字列「なし」とユーザーのパスワードを使用して直接バインドを試みましたが、明らかに失敗しました。

AUTH_LDAP_USER_DN_TEMPLATE定義をldap_config.pyから完全に削除することで解決しました。

0
Tony