我目前正在尝试在FreeBSD上设置NFSv4服务器.我在其他Unices(Solaris和
Linux)上有这方面的丰富经验,但我对FreeBSD还不熟悉.
我的目标是实现以下目标:
>从FreeBSD系统提供的文件
>唯一的安全模型应该是krb5p
>客户端是Linux(Ubuntu)和OSX
目前,我已设法进行设置,以便我需要一个有效的TGT才能访问文件系统.在尝试访问这些文件后,我可以在客户端上运行klist,我可以看到已经检索到nfs / domainname主体.这表明NFS挂载的Kerberos部分是正确的.
我的问题是仍然使用nobody用户执行所有客户端访问.当我执行ls -l时,我可以看到权限.即使用户映射工作正常,但除非没有人对文件执行任何操作,否则我会获得权限拒绝.
这是来自客户端的示例交互(在这种情况下是Ubuntu,但同样的事情发生在OSX上).在这个例子中,/ export / shared / testshare是FreeBSD服务器的共享目录:
(我已将实际域名更改为域,将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 $sudo mount -t nfs4 -osec=krb5p,vers=4 lion:/export/shared/testshare /mnt $ls -l /mnt total 4 -rw-r--r-- 1 nobody nogroup 5 Feb 7 18:17 bar.txt -rw------- 1 elias nogroup 4 Feb 5 23:09 foo.txt $cat /mnt/bar.txt blah $echo foo >>/mnt/bar.txt bash: /mnt/bar.txt: Permission denied $cat /mnt/foo.txt cat: /mnt/foo.txt: Permission denied $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 09/02/2013 09:41:56 10/02/2013 09:40:44 nfs/lion.domain@REALM
服务器配置
我在找到一个在FreeBSD上设置NFSv4的综合指南时遇到了一些问题.这本身有点令人惊讶,因为我发现有关如何在FreeBSD中做事的信息非常好.
以下是/etc/rc.conf中的相关行:
rpcbind_enable="YES" nfs_server_enable="YES" nfsv4_server_enable="YES" nfsuserd_enable="YES" nfscbd_enable="YES" mountd_enable="YES" gssd_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES" zfs_enable="YES"
这是/ etc / exports的内容:
/export/shared/testshare -sec=krb5p V4: / -sec=krb5p
另一个有趣的方面是,当我使用tcpdump记录客户端和服务器之间的NFS网络流量时,我看到了NFS3数据包和NFS4数据包.这两种数据包类型都包含加密数据,所以我仍然认为使用了Kerberos,但考虑到上面的配置,我原本预计除了NFS4流量之外什么也没有.
解决方法
>需要使用vfs.nfsd.server_min_nfsvers = 4禁用nfs3. >为避免“nobody”,NFSv4客户端和服务器应位于同一域域中.