如何在已加入MS AD域的Debian 12上用计算机账户执行ldapsearch
使用Debian 12计算机账户执行LDAP查询解决方案
问题背景
我有一台已加入MS AD域的Debian 12计算机,用户可通过GSSAPI认证执行LDAP搜索(符合信息安全要求),示例命令及输出如下:
$ ldapsearch -LLL -H ldap://DC03.mydomain.loc -o ldif-wrap=no -Y GSSAPI -s "base" -b "" supportedSASLMechanisms SASL/GSS-SPNEGO authentication started SASL username: test-linux@MYDOMAIN.LOC SASL SSF: 256 SASL data security layer installed. dn: supportedSASLMechanisms: GSSAPI supportedSASLMechanisms: GSS-SPNEGO supportedSASLMechanisms: EXTERNAL supportedSASLMechanisms: DIGEST-MD5
为实现自动化流程,需要定期执行LDAP查询,希望使用计算机账户完成操作。这样能简化域控制器和客户端的日志记录,避免为每台计算机单独创建用户账户,同时规避用户密码按AD策略频繁变更的问题。当前系统已存在默认keytab(SSSD正使用它完成DNS记录更新、计算机密码更新等操作),keytab内容如下:
Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ------------------------------------------------------ 8 host/app01.mydomain.loc@MYDOMAIN.LOC (aes256-cts-hmac-sha1-96) 8 host/APP01@MYDOMAIN.LOC (aes256-cts-hmac-sha1-96) 8 host/app01.mydomain.loc@MYDOMAIN.LOC (aes128-cts-hmac-sha1-96) 8 host/APP01@MYDOMAIN.LOC (aes128-cts-hmac-sha1-96) 8 host/app01.mydomain.loc@MYDOMAIN.LOC (DEPRECATED:arcfour-hmac) 8 host/APP01@MYDOMAIN.LOC (DEPRECATED:arcfour-hmac) 8 APP01$@MYDOMAIN.LOC (aes256-cts-hmac-sha1-96) 8 APP01$@MYDOMAIN.LOC (aes128-cts-hmac-sha1-96) 8 APP01$@MYDOMAIN.LOC (DEPRECATED:arcfour-hmac)
解决方案
方法1:先获取计算机账户Kerberos票据,再执行LDAP查询
- 从keytab获取计算机账户的Kerberos票据
可以直接使用计算机账户主体(APP01$@MYDOMAIN.LOC)或其关联的SPN主体(host/app01.mydomain.loc@MYDOMAIN.LOC):# 使用计算机账户主体 kinit -k -t /etc/krb5.keytab APP01$@MYDOMAIN.LOC # 或使用host SPN主体 kinit -k -t /etc/krb5.keytab host/app01.mydomain.loc@MYDOMAIN.LOC - 验证票据是否成功获取
输出中应包含对应计算机账户的有效票据。klist - 执行LDAP查询
此时系统已缓存计算机账户的Kerberos票据,直接使用GSSAPI认证执行查询即可:ldapsearch -LLL -H ldap://DC03.mydomain.loc -o ldif-wrap=no -Y GSSAPI -s "base" -b "" supportedSASLMechanisms
方法2:在ldapsearch命令中直接指定keytab和主体(适合脚本自动化)
无需提前获取票据,直接在ldapsearch命令中指定keytab路径和计算机账户主体,一步完成认证与查询:
# 使用计算机账户主体 ldapsearch -LLL -H ldap://DC03.mydomain.loc -o ldif-wrap=no -Y GSSAPI -U APP01$@MYDOMAIN.LOC -K /etc/krb5.keytab -s "base" -b "" supportedSASLMechanisms # 或使用host SPN主体 ldapsearch -LLL -H ldap://DC03.mydomain.loc -o ldif-wrap=no -Y GSSAPI -U host/app01.mydomain.loc@MYDOMAIN.LOC -K /etc/krb5.keytab -s "base" -b "" supportedSASLMechanisms
注意事项
- AD中计算机账户默认拥有基础的LDAP读取权限,若需查询特定敏感信息,需在AD中为该计算机账户配置对应权限。
- 确保
/etc/krb5.keytab的权限正确(建议设置为600,属主为root),避免非授权访问。
内容的提问来源于stack exchange,提问作者Irbis
相关产品推荐
相关产品推荐

