通过SSH隧道保护NFS

我正忙着读http://nfs.sourceforge.net/nfs-howto/ar01s06.html试图了解为什么本地主机导出不好,当我到了“6.4。通过SSH隧道NFS”部分。 这一节中的所有内容都是导出本地主机时可能存在的一个安全漏洞,因为它允许其他人ssh端口转发并访问共享。

这是我的问题,如果用户能够连接到可以连接到NFS服务器的计算机,那么如何防止ssh隧道破坏系统的安全? 例如,想象计算机A( 192.168.1.1 ),B( 192.168.1.2 )和C( 192.168.1.3 )。 设A是具有以下导出文件的服务器:

 /home 192.168.1.2(rw) 

正如您所看到的,A正在授予B权限来使用/ home共享。 现在,让C ssh到B与:

 $ ssh 192.168.1.2 -L 250:192.168.1.1:2049 -f sleep 60m $ ssh 192.168.1.2 -L 251:192.168.1.1:32767 -f sleep 60m 

看起来A的出口给B的股票很容易受到任何人的支配。这是这种情况吗? 除了简单地确保任何可以loginB的人都是非常值得信赖的用户,有没有一种方法可以防止这种情况呢?

这是一个非常古老的文档,你看它在2001年出来的关于内核版本2.4的讨论,在过去的12年中发生了很多变化。 虽然有些事情保持不变。

我只有CentOS 6.x机器,默认使用nfsv4。 为了允许通过中间机器进行连接,我必须导出带有insecure集的文件系统。

所以要回答你的问题使用nfsv4并使用默认的secure模式。 如果你有足够的特权B你也可以设置

 AllowTcpForwarding no 

在/ etc / ssh / sshd_config中。

尽pipe安全,如果你给人的特权,你必须相信他们。

你突出的问题不是一个缺陷,这是一个function! 是的,这是SSH协议的一个特性,并且给出了configuration不当的SSH服务可以用于多种漏洞攻击,如:

  • 绕过主机防火墙
  • 绕过IP限制
  • 远程访问仅侦听“localhost”接口的服务[ mysql ?]

作为常见configuration错误和安全问题的一个例子,将/sbin/nologin shell设置为一个用户,并不妨碍它为OpenSSH守护进程产生大多数默认configuration的ssh隧道。

根据你的问题,你应该避免使用NFSv2 / NFSv3,并使用更安全的NFSv4,这将转向不同的安全模式,在这种模式下,它对单个用户而不是主机进行身份validation。 或者作为替代,通过正确configurationOpenSSH服务,禁止普通用户使用SSH隧道。

那个文件比较老(2006!)。 在没有更好的安全机制(例如NFSv4 + GSS)的情况下,将主机添加到导出意味着您隐式信任该主机,其用户和进程。

SSH端口转发不是你唯一的问题,你可以禁止它(sshd的AllowTcpForwarding no ),但作为sshd_config(5)

请注意,禁用TCP转发不会提高安全性,除非用户也被拒绝访问shell,因为他们始终可以安装自己的转发器。

因此,添加到列表socatnetcat ,SOCKS(OpenSSH也支持,虽然只有TCP),OpenSSH tun隧道支持,甚至bash/dev/tcp支持,你可以看到问题…太多列出。

如果B有主机防火墙允许每用户规则(即Linux / iptables与 – --uid-owner ),您可能能够lockingB,使A可以更多地信任它。 否则,请尝试使用GSS和Kerberos的NFSv4,以便您获得每个用户的信任。

这很容易被打败

  1. 确保您的出口标记secure
  2. 不允许计算机B根访问计算机C.

exports(5)手册页exports(5)说:

 secure This option requires that requests originate on an internet port less than IPPORT_RESERVED (1024). This option is on by default. To turn it off, specify insecure. 

请注意,这是默认情况下。

从计算机C连接到计算机B的任何用户将作为普通用户连接。 如您所描述的,通过SSH转发的NFS连接看起来像来自运行在B上的进程的源自该用户。 这意味着连接受到B上通常的安全控制,特别是普通用户不能从低于1024的端口发起连接。

testing我的一个系统,我看到以下内容:

 djs@tuonela:~$ sudo mount -o port=250,mountport=251,tcp localhost:/srv/users /mnt/x -t nfs mount.nfs: access denied by server while mounting localhost:/srv/users 

当然,任何人都可以提升他们的帐户在电脑B的根目录可以击败这种保护,所以你需要充分lockingNFS客户端计算机。