首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对AD的Netbox身份验证不起作用,但参数在命令行上工作

针对AD的Netbox身份验证不起作用,但参数在命令行上工作
EN

Server Fault用户
提问于 2020-04-23 06:15:37
回答 1查看 5.1K关注 0票数 1

我已经在CentOS服务器上设置了netbox,并试图让它对我们的AD服务器进行身份验证。不管我尝试什么,服务器只是记录这一行:

My_user的身份验证失败:用户DN/密码被LDAP服务器拒绝。

没有指示被拒绝的是绑定DN还是用户DN。

首先,我可以与netbox超级用户连接,浏览并输入数据。所以这个装置是可以用的。我按照netbox安装文档,第5章的文档编写了信函,以启用LDAP身份验证。这是我的(模糊的)配置:

代码语言:javascript
复制
###################################
### 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服务器--它确实连接到LDAP服务器。
  • 使用ldap而不是ldaps -没有效果。
  • 使用open工具ldapsearch在命令行上尝试使用与netbox配置相同的绑定用户、密码和基本DN。我还尝试与返回的用户DN绑定--都成功了。
代码语言:javascript
复制
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
  • 将netbox用户的(非常)强密码更改为只有字母和数字的密码--没有效果
  • 在AUTH_LDAP_USER_SEARCH中使用更宽的基本DN,即删除OU(我的实际基数有一个数字)--没有效果

谷歌也没有进一步帮助我..。我不知所措,它应该按照文件工作,一切看起来都是正确的。我在这里错过了什么?

EN

回答 1

Server Fault用户

回答已采纳

发布于 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定义完全解决了这个问题。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1013696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档