我已经在CentOS服务器上设置了netbox,并试图让它对我们的AD服务器进行身份验证。不管我尝试什么,服务器只是记录这一行:
My_user的身份验证失败:用户DN/密码被LDAP服务器拒绝。
没有指示被拒绝的是绑定DN还是用户DN。
首先,我可以与netbox超级用户连接,浏览并输入数据。所以这个装置是可以用的。我按照netbox安装文档,第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谷歌也没有进一步帮助我..。我不知所措,它应该按照文件工作,一切看起来都是正确的。我在这里错过了什么?
发布于 2020-04-28 06:40:30
如果其他人遇到这个问题,我会在这里发布我的解决方案。
根本原因是文档中这种含糊的陈述:
使用Windows 2012时,应将AUTH_LDAP_USER_DN_TEMPLATE设置为None。
我们将此解释为将此变量的值设置为"None",认为Netbox/Django需要使用模板跳过该值(我们不是python程序员)。
因为Django-auth-ldap只发出对用户友好的1行警告并隐藏所有LDAP错误,所以我不得不求助于使用Wireshark绑定纯文本LDAP和数据包嗅探,以发现Django实际上并没有绑定配置的绑定DN,而是尝试使用字符串"None“作为DN和用户的密码进行直接绑定。很明显那失败了。
从AUTH_LDAP_USER_DN_TEMPLATE中删除ldap_config.py定义完全解决了这个问题。
https://serverfault.com/questions/1013696
复制相似问题