在FreeBSD上,Kerberised NFSv4的权限不会生效

我目前正在尝试在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客户端和服务器应位于同一域域中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format='{{.LogPath}}' <container_name> 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户