如何为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
相关产品推荐
相关产品推荐

