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)
私が試したこと:
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
グーグルはまた私を助けません。私は途方に暮れています、それはドキュメントに従って動作するはずです、すべてが正しく見えます。ここで何が欠けていますか?
他の誰かがこの問題に遭遇した場合に備えて、私の解決策をここに投稿します。
根本的な原因は、ドキュメント内のこのあいまいなステートメントです:
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から完全に削除することで解決しました。