我有一个奇怪的问题,kerberos/openldap 环境已经变砖。我无法向其中添加新用户、计算机或其他内容,因为我尝试的所有操作都会导致 SERVER_NOT_FOUND
PERMISSION_DENIED
、INSUFFICIENT ACCESS
、的各种变化CLIENT_NOT_FOUND
。
如果在 kerberos 环境中(例如一年)没有进行任何修改,通常会发生这种情况吗?
其目的是保护 NFS 共享。现在我想添加另一个 NFS 共享来复制数据,但我无法以任何方式更改配置。
即使登录为root
,使用kadmin.local
我也无法执行以下任何操作:
- 创建一个新的管理员用户
- 修改admin用户的密码。
- 以管理员用户身份登录
- 添加校长
我可以做这个:
- 使用 openLDAP 的密码执行命令(例如添加条目)。
我也可以这样做:
- 安装并使用现有共享。 (这意味着 openLDAP 和 krb5 都仍在运行,我只是无法更改任何配置)。
我验证了这些事情。
- krb5kdc/openldap 正在运行
- ACL 在 .acl 文件中设置
- 领域名、域名等正确
- Hosts 文件将域名指向本地主机。
- krb5kdc、slapd、kadmind 正在监听各自的端口。
- 不存在防火墙规则
- Apparmor/SELinux 不存在。
这些错误是由各个系统吐出的。例如:krb5kdc
如果尝试通过以下方式添加主体,则吐出这一点kadmin.local
:
10.0.26.21: SERVER_NOT_FOUND: kadmin/[email protected] for kadmin/[email protected], Server not found in Kerberos database
虽然 kadmin 说:Principal add failed: Insufficient access while creating "[email protected]@COMPANY.COM"
这会产生一个 catch-22,不知何故需要一个主体来添加一个主体?我的印象是,kadmin.local
在创建设置时这是一种“引导”机制。该错误消息没有任何意义。
尝试登录kadmin/admin
也不起作用,同样的消息来自krb5kdc
。
我也看到了这个,我觉得很有趣:preauth spake failed to initialize: No SPAKE preauth groups configured
。搜索这个魔法SPAKE
(为什么是难以理解的缩写词),没有发现任何有用的东西。
尝试slapcat
列出 ldap 数据库的所有内容,我发现kadmin/admin
有krbLoginFailedCount: 0
.那么就 LDAP 而言,没有进行任何登录?或许?我不知道这意味着什么,因为文档(这些组件如何相互交互?)很糟糕。
尝试在lo
或上捕获数据包all interfaces
,根本没有发送任何 LDAP 流量。即使 和/etc/krb5.conf
都有/etc/krb5kdc/kdc.conf
此部分:
[dbmodules]
openldap_ldapconf = {
ldap_servers = ldapi:///
在我把它从轨道上发射出来并从头开始之前,还有其他可以尝试的事情吗?
答案1
不,它不能。
10.0.26.21: SERVER_NOT_FOUND: kadmin/[email protected] for kadmin/[email protected], Server not found in Kerberos database
这看起来根本不像您在使用“kadmin.local”。虽然它是普通的如果kadmin/<fqdn>
主体不存在(而是kadmin/admin
首选主体),则只有基于 RPC 的“kadmin”首先会获得此类票证,而“kadmin.local”则直接访问您的 LDAP 数据库。
另外,从错误消息来看,您似乎正在使用-p kadmin/admin
.不要这样做 - 这是服务主体,而不是“用户”或“管理员”主体。 (不过,kadmin.local 根本不需要任何主体,因为它本身不使用 Kerberos。)
虽然 kadmin 说:主体添加失败:创建时访问权限不足”[电子邮件受保护]@COMPANY.COM”
除了访问问题之外,这看起来不像 Kerberos 主体名称的有效语法。该格式service@fqdn
通常由 GSSAPI 使用,但已转换service/fqdn
为 Kerberos。
这会产生一个 catch-22,不知何故需要一个主体来添加一个主体?我的印象是 kadmin.local 在创建设置时是一种“引导”机制。该错误消息没有任何意义。
确实不是,因为没有任何你所展示的内容将被打印出来kadmin.local
。听起来您正在尝试运行基于常规网络的系统kadmin
。 (是否有任何文件系统损坏会导致前者的内容被后者覆盖?是否有人不小心将cp
另一个覆盖了?)
尝试 slapcat 列出 ldap 数据库的所有内容,我发现 kadmin/admin 有
krbLoginFailedCount: 0
.那么就 LDAP 而言,没有进行任何登录?
这是一个服务主体,而不是客户端(用户)主体,因此不会对其进行任何登录。此属性仅跟踪对用户帐户执行了多少次kinit
操作,而不跟踪为特定服务发出了多少票证。
(主机主体通常既是客户端又是服务,但事实并非如此。)
即使对于客户端主体,如果 KDC 被授予对后端 LDAP 数据库的只读访问权限,则该值也可能为零,这种情况并不罕见。
就 LDAP 而言,还没有登录?或许?我不知道这意味着什么,因为文档(这些组件如何相互交互?)很糟糕。
在这种情况下,LDAP 实际上只不过是一个哑数据库。 krb5kdc 服务(或 kadmin.local 工具)连接到它并读取或写入一些数据。那里是不与 Kerberos 身份验证交互,或者kinit
– 最多,该服务有一个 LDAP 密码(在 ldap.stash 中),krb5kdc 和 kadmin.local 都使用该密码来访问数据库内容。
我还看到了这个,我觉得很有趣:preauth spake failed to initialize: No SPAKE preauth groupsconfigured。搜索这个神奇的 SPAKE(为什么是难以理解的缩写词),没有发现任何有用的东西。
就缩写词而言,它与“RSA”或“AES”属于同一系列。它是一种加密算法,可以选择用于加强基于密码的kinit
网络监控(离线密码破解)。
SPAKE 是可选的——现有的传统(时间戳)预认证机制始终起作用。
尝试在 lo 或所有接口上捕获数据包,根本没有发送 LDAP 流量。即使 /etc/krb5.conf 和 /etc/krb5kdc/kdc.conf 都有此部分:
ldap_servers = ldapi:///
那是因为你有这个部分。它告诉 LDAP 客户端代码使用 Unix 套接字/run/openldap/ldapi
而不是本地 TCP 连接。
切换您的 LDAP 服务器olcLogLevel
以stats
获取有关正在进行的查询的更多信息。