所以我正在建立一个包含所有标准内容(文件、电子邮件等)的小型网络,我决定采用 Kerberos+LDAP 解决方案。关于 Heimdal 与 MIT 的任何想法或建议?
我以前使用过麻省理工学院,切向海姆达尔,但我真的不知道使用一个而不是另一个的真正原因。我只知道我不想意识到我宁愿在启动整个 Heimdal 并使用完整的用户数据库运行之后运行 MIT。
如果任何其他信息有用,我很乐意提供。
我目前正在将我们的环境从 NIS 切换到 Kerberos + LDAP。
在这次迁移期间,我现在遇到了以下情况。
我们通过 NFS 挂载我们的家,这显然也应该被 kerberized。但是,由于我们的用户都在终端服务器上登录并且通常不会注销而是暂停他们的会话或在后台长时间运行作业,这会导致 Kerberos 票证迟早过期,从而使 NFS 共享不可用。
为用户自动续订这些票证的最佳选择是什么?
此外,我想为用户离开旅行但仍在运行他们的工作(这可能比最长的 Kerberos 更新时间更长)的情况做好准备,因此我需要为该用户获取一张全新的票证。在这种情况下,如果不大量延长门票的默认最大续订时间,最好的选择是什么?
我正在尝试设置一个简单的 Kerberos 环境,该环境由 Kerberos 服务器 (KDC)、客户端计算机和运行 OpenSSH 守护程序的服务器计算机组成。客户端应该在与服务器计算机建立 SSH 连接时通过 Kerberos 进行身份验证。
我尝试验证的 Kerberos 用户的名称是krbuser
. 此用户存在于服务机器上,其 uid 为1001
。奇怪的是我用SSH登录的时候需要输入Kerberos用户的密码。每次登录。不仅是我的第一次连接。这看起来很奇怪,因为 Kerberos 的全部意义在于无需密码即可进行身份验证。
我在身份验证过程中进行了 tcpdump,并注意到客户端正在使用 cname 对 KDC 执行 AS-REQ root
。这个 Kerberos 用户名没有,我不知道为什么客户端使用这个名字。正如预期的那样,KDC 会以一条eRR-C-PRINCIPAL-UNKNOWN
消息作为响应,因为root
数据库中没有用户。
对我来说,主要问题似乎是客户端尝试验证 asroot
而不是krbuser
.
我将在下面发布有关我当前配置的一些信息。如果您需要任何其他信息,请告诉我。
在 KDC 上:
/etc/krb5.conf
[logging]
default = FILE:/usr/local/krb5/var/log/krb5lib.log
kdc = FILE:/usr/local/krb5/var/log/krb5kdc.log
admin_server = FILE:/usr/local/krb5/var/log/kadmin.log
[libdefaults]
default_realm = metz.prac.os3.nl
rdns = false
# The following krb5.conf variables are only for MIT Kerberos. …
Run Code Online (Sandbox Code Playgroud) MIT Kerberos 支持多种类型的凭证缓存来存储票证。
例如,如果我想在内核内存中使用每个用户的持久密钥环,我可以将以下内容添加到krb5.conf
.
[libdefaults]
default_ccache_name = KEYRING:persistent:%{uid}
Run Code Online (Sandbox Code Playgroud)
选项之一是进程内存中的 ccache。
如何启用此选项?
问题 1:
我的 ActiveDirectory 在 Windowsserver 2012 机器上 - 它的域名是AD-DEMO.LOCAL
Kerberos 管理服务器在另一台 Ubuntu 机器上 - 它的领域 KERBEROS.COM
添加了对“Active Directory 域和信任”的信任。
为 AD 中的信任领域设置的属性是,
尝试使用以下“netdom”命令验证跨领域信任,
“网络信任 KERBEROS.COM /d:AD-DEMO.LOCAL /verify”
并得到这个异常“命令未能成功完成”
问题2:
为了解决这个问题,进行了搜索并找到了这些链接(链接 1和链接 2);
根据这两个链接的信息,我尝试为添加的域启用验证属性。但是我没有在我的 AD 域和信任窗口中找到任何像验证这样的属性。
请建议我哪里出错了,
我试图自己解决这个问题,但无济于事。谷歌提供了很多教程,但我找不到适合以下情况的教程。
我们有一名外部合作员工,可以通过 VPN 访问我们的 LAN,他需要访问我们的一些 Web 应用程序。他的工作站在 Windows 7 Professional 下运行。Web 应用程序只能接受基于 Kerberos 的 SSO身份验证 - 密码身份验证由于安全策略而被禁用,并且无法更改。Kerberos AS/KDC 由Windows Server 2008 R2级域提供,他的工作站不是该域的成员。
我们如何从他的工作站配置 Kerberos 身份验证而不将其添加到域中?到目前为止,我只使用 Kerberos 配置基于 UNIX 的系统。在Windows下我可以想到两种不同的解决方案:
安装外部 Kerberos库(即MIT Kerberos for Windows) - 我假设配置过程类似于基于 UNIX 的配置过程(即编辑krb5.conf、设置默认领域并启用基于 DNS 的 KDC 定位)。
配置 Windows 内置 Kerberos 客户端而不将工作站添加到域 - 我不确定这是否可能。
我们需要使 SSO 在 Mozilla Firefox 中正常工作。如果我们使用第一个解决方案,我假设我们应该设置network.negotiate-auth.gsslib
为外部 Kerberos DLL 路径。这个设置能按预期工作吗?从上面的选项来看,后者是强烈首选,因为我们希望避免外部依赖和可能的不兼容。
我需要使用 kerberos 票证通过 openssh 从 Windows 连接到 Linux 服务器。我从以下位置获取了 bin 文件: https ://github.com/NoMoreFood/openssh-portable/releases/tag/v7.9-sspi
通过我的公司登录 UI,我使用 MIT Kerberos 获取票证。如果我跑
klist
Run Code Online (Sandbox Code Playgroud)
这是输出
Ticket cache: FILE:C:\Users\Test\....\host.domain.subdomain.local
Default principal: USER@REALM
Valid starting Expires Service principal
09/23/19 16:18:53 09/23/19 19:18:53 krbtgt/REALM@REALM
09/23/19 16:18:56 09/23/19 19:18:53 krbtgt/DOMAIN@REALM
09/23/19 16:18:56 09/23/19 19:18:53 host/host.domain.subdomain.local@DOMAIN
Run Code Online (Sandbox Code Playgroud)
使用 Putty 我没有连接问题。所以我尝试使用 openssh 二进制文件:
ssh -Kvvv USER@HOST
Run Code Online (Sandbox Code Playgroud)
配置文件在哪里
Host HOST
GSSAPIDelegateCredentials yes
GSSAPIAuthentication yes
Run Code Online (Sandbox Code Playgroud)
我到达服务器,但它询问我密码并且不发送 kerberos 票证
这是日志
OpenSSH_for_Windows_7.9p1, LibreSSL 2.6.4
debug1: Reading configuration data C:\\Users\\Test/.ssh/config
debug1: C:\\Users\\Test/.ssh/config line 7: Applying options for …
Run Code Online (Sandbox Code Playgroud) 我按照 MIT Kerberos 5 说明更新了我的 Kerberos 5 服务器的主密钥。我重新启动了 kdc 和 kadmind 服务,并使用 krb5-prop 将更改推送到其他服务器。
现在我无法从任何服务器(包括管理服务器)连接 kadmin:
$kadmin
Authenticating as principal jacob/admin@THE.REALM with password.
Password for jacob/admin@THE.REALM:
kadmin: GSS-API (or Kerberos) error while initializing kadmin interface
Run Code Online (Sandbox Code Playgroud)
通过我的搜索,我发现造成这种情况的一个常见原因是时间同步问题,但机器在一秒钟内匹配,即使从运行 kadmind 的服务器也失败。
我不知道如何解决这个问题。我的 kadmind 版本没有任何类型的调试参数或我发现的详细日志记录级别。我试过用 -nofork 从命令行运行它,那里很安静。
密码被接受。我可以将 kinit 作为目标原则,如果我输入的密码错误,它会告诉我。
kadmin: Incorrect password while initializing kadmin interface
Run Code Online (Sandbox Code Playgroud)
如果 kadmind 服务没有运行,它也会给出不同的错误。
kadmin: Communication failure with server while initializing kadmin interface
Run Code Online (Sandbox Code Playgroud)
我在更新主密码之前没有测试 kadmin,但我最近使用了它,并且没有进行其他配置更改。我试过检查我的密钥版本号 (kvno),它们似乎是正确的。
还有什么可能导致这种情况?我还能在哪里检查?如何调试 kadmind?
Debian 8,krb5-admin-server 1.12.1。