我目前正在尝试在 FreeBSD 上设置 NFSv4 服务器。我在其他 Unices(Solaris 和 Linux)上有丰富的经验,但我对 FreeBSD 还很陌生。
我的目标是实现以下目标:
目前,我已经设法进行设置,以便我需要一个有效的 TGT 才能访问文件系统。尝试访问这些文件后,我可以klist
在客户端上运行,并且可以看到nfs/domainname
主体已被检索。这表明 NFS 挂载的 Kerberos 部分是正确的。
我的问题是所有客户端访问仍然使用nobody
用户执行。当我这样做时,我可以看到权限ls -l
。即使用户映射工作正常,但除非nobody
有权对文件执行任何操作,否则我的权限被拒绝。
这是来自客户端的示例交互(在本例中为 Ubuntu,但在 OSX 中也会发生同样的情况)。在这个例子中,/export/shared/testshare
是来自 FreeBSD 服务器的共享目录:
(我已将实际域名更改为domain
,并将 Kerberos 领域名称更改为REALM
)
$ kinit
Password for elias@REALM:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000_GBjtDP
Default principal: elias@REALM
Valid starting Expires Service principal
09/02/2013 09:40:47 10/02/2013 09:40:44 krbtgt/REALM@REALM
$ …
Run Code Online (Sandbox Code Playgroud) 我目前正在设置一个环境,其中我有一组 Solaris 和 Linux 机器,使用专用的 Krberos 5 领域(MIT,在 Solaris 11 上,krb5-config --version
返回:)Solaris Kerberos (based on MIT Kerberos 5 release 1.6.3)
。我们还有一个用于单独领域的 Active Directory (Windows 2003) 服务器。
我的目标是让 AD 服务器中的所有用户,以及基于 MIT 的领域中的 host/nnn、nfs/nnn 和 cifs/nnn 主体。我正在尝试在这两个领域之间建立跨域信任。
假设如下:
我已经根据Microsoft 文档设置了 AD 跨领域信任,具有双向信任。
发生的情况是跨领域身份验证仅在一个方向上起作用。从 AD 到 Unix 的工作原理:
# kinit adtest@AD.EXAMPLE.COM
Password for adtest@AD.EXAMPLE.COM:
root@clienttest2:~# kvno ltest@EXAMPLE.COM
ltest@EXAMPLE.COM: kvno = 1
Run Code Online (Sandbox Code Playgroud)
但是,相反的情况并没有,并给我一条错误消息:KDC 在获取 adtest@AD.EXAMPLE.COM 的凭据时不支持加密类型
# kinit ltest@EXAMPLE.COM
Password for ltest@EXAMPLE.COM:
root@clienttest2:~# …
Run Code Online (Sandbox Code Playgroud)