You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Samba Active Directory创建LDAP BIND_DN?Django认证遇阻

Samba AD DC 初始BIND_DN及LDAP连接配置

初始可用的BIND_DN

当你通过samba-tool domain provision --use-rfc2307 --interactive完成默认域初始化后,有两个可靠的初始BIND_DN可选:

  • 域管理员完整DN:
    格式基于你设置的Realm拆分,假设默认Realm为SAMBA.EXAMPLE.COM、Domain为SAMBA,则管理员DN为:
    CN=Administrator,CN=Users,DC=samba,DC=example,DC=com
    替换规则:将Realm按.拆分,每个部分前缀加DC=,比如Realm是TEST.LOCAL,对应DC=test,DC=local。
  • Samba内置LDAP服务账户DN(适合服务级绑定):
    自动创建的服务账户,格式为:
    CN=ldap service,CN=Users,DC=your-domain,DC=tld
    同样替换your-domain和tld为实际Realm拆分后的组件。

正确的Python LDAP连接方式

1. 依赖准备

先安装LDAP模块:

pip install python-ldap

2. 绑定代码示例

import ldap

# 替换为你的实际配置
LDAP_SERVER = "ldap://127.0.0.1:389"  # 或ldaps://127.0.0.1:636启用SSL
BIND_DN = "CN=Administrator,CN=Users,DC=samba,DC=example,DC=com"
BIND_PASSWORD = "你设置的管理员密码"

try:
    # 初始化连接
    conn = ldap.initialize(LDAP_SERVER)
    # 启用LDAPv3协议
    conn.set_option(ldap.OPT_PROTOCOL_VERSION, ldap.VERSION3)
    
    # 若使用LDAPS,测试环境可临时关闭证书验证(生产环境建议导入容器证书)
    # conn.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    
    # 执行绑定
    conn.simple_bind_s(BIND_DN, BIND_PASSWORD)
    print("LDAP绑定成功")
    
    # 后续可执行查询等操作,例如获取用户列表
    # base_dn = "DC=samba,DC=example,DC=com"
    # search_filter = "(objectClass=user)"
    # attrs = ["cn", "sAMAccountName"]
    # result = conn.search_s(base_dn, ldap.SCOPE_SUBTREE, search_filter, attrs)
    
    conn.unbind()
except ldap.INVALID_CREDENTIALS:
    print("无效凭证:请检查BIND_DN格式和密码是否正确")
except ldap.LDAPError as e:
    print(f"LDAP错误:{str(e)}")

验证与排查

  • 进入容器执行以下命令,可查看管理员的完整DN:
samba-tool user show Administrator
  • 检查端口连通性:确保389/636端口在主机和容器间正常映射,无防火墙拦截。

内容的提问来源于stack exchange,提问作者Deepali Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:41:21