我无法让 Solaris 11.0 服务器将对 NFS 共享的访问限制为单个客户端系统。
share
我对 ZFS 文件系统的属性大致有以下值tank/mail
:
name=mail,path=/tank/mail,prot=nfs,none=*,[email protected],sec=sys
我无法在 10.0.23.43 的客户端(运行 Solaris 11.3)上安装共享。我尝试这样:
mount -F nfs keisha:/tank/mail /tmp/mnt
并得到以下错误:
nfs mount: mount: /tmp/mnt: Permission denied
如果我删除,none=*
那么客户端安装得很好。然而,据我了解,这样做将允许访问客户任何地址,我想阻止(是的,我知道可能会欺骗该地址,但更愿意添加我可以添加的任何限制。)
none
我尝试颠倒和的顺序rw
,但这没有任何改变。我已经尝试过了[email protected]/32
,但这也行不通。
我尝试过将其开放给整个子网,[email protected]/16
甚至那不起作用。我还仔细检查了客户的地址是否正确。客户端无法使用 IPv6 访问服务器,因为服务器的 DNS 条目仅为 IPv4,而我通过名称访问它。
为什么限制客户端地址甚至会阻止某个客户端的访问明确允许地址?我该如何解决?
答案1
Ridgy的评论暗示了答案。需要的是删除none
,留下:
name=mail,path=/tank/mail,prot=nfs,[email protected],sec=sys
(也许可以省略,@
但文档要求它,所以我认为最好保留它,以防将来解释变得更加严格。)
这是一个文档不完善的情况。手册页指出(强调我的):
none
禁止所有客户端访问。ro
或选项rw
可以覆盖none
.
none=
access_list
不允许任何与访问列表匹配的客户端进行访问。 例外情况是当访问列表是星号 (*
) 时,在这种情况下ro
或rw
可以覆盖none
。
这不仅非常明确地表明我的客户端在 10.0.23.43 应该获得访问权限,即使none
(它没有),它还意味着您实际上需要 none
为了避免未列出的客户端rw
获得至少某种访问权限,否则,为什么none=*
甚至(据说)会实现覆盖异常? 这将是多余的!
我没有任何其他 NFS 客户端可供测试,因此我更改了客户端的 IP 号并确认确实none
是不是为了拒绝未以其他方式列出的客户端的访问,这是必需的。为了确定起见,我添加了ro
一个测试,然后我位于不同地址的客户端可以读取但不能写入。
虽然这似乎是解决方案,但我对此并不满意,因为文档暗示我正在做的事情是开放的,事实上我可能会在未来的版本中这样做,以纠正自身以遵守文档暗示的意图。 (至少我有外部防火墙。)
答案2
看起来 Ridgy 回答了你的问题,如果它只共享给一台主机。如果有多个,可以使用分号或创建网络组。
如果您需要/想要额外的阻止,您可以考虑使用 ipfilters 或源自 OpenBSD PF (pkg:/network/firewall) 的 Solaris 防火墙。