我懒洋洋地阅读http://nfs.sourceforge.net/nfs-howto/ar01s06.html试图理解为什么当我到达“6.4。通过 SSH 建立 NFS 隧道”部分时 localhost 出口不好。该部分中关于导出 localhost 可能存在安全漏洞的所有内容都是有意义的,因为它允许其他人通过 ssh 端口转发并访问共享。
这是我的问题,如果用户可以 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 容易受到任何可以通过 ssh 进入 B 的人的攻击。是这样吗?除了简单地确保可以登录 B 的任何人都是非常受信任的用户之外,是否有其他方法可以防止这种情况发生?
您强调的问题不是缺陷,而是功能!是的,这是 SSH 协议的一个特性,如果配置不当的 SSH 服务可用于广泛的攻击,例如:
mysql
?]作为常见错误配置和安全问题的一个示例,将
/sbin/nologin
shell 设置为用户,并不能阻止它使用 OpenSSH 守护程序的大多数默认配置生成 ssh 隧道!根据您的问题,您应该避免使用 NFSv2/NFSv3 并使用更安全的 NFSv4,它转向不同的安全模型,它对单个用户而不是主机进行身份验证。或者作为替代方案,通过正确配置 OpenSSH 服务来禁止普通用户使用 SSH 隧道。
这是一个非常古老的文件,你看它谈到了 2001 年发布的内核版本 2.4,在过去的 12 年里发生了很多变化。虽然有些东西还是一样。
我只有 CentOS 6.x 盒子可以玩,默认情况下使用 nfsv4。为了允许通过中间机器连接,我必须使用
insecure
set 导出文件系统。因此,要回答您的问题,请使用 nfsv4 并使用默认
secure
模式。如果您对 B 有足够的权限,您还可以设置在 /etc/ssh/sshd_config 中。
与安全一样,如果你给人们特权,你必须信任他们。
该文件相当旧(2006 年!)。在没有更好的安全机制(即 NFSv4 + GSS)的情况下,将主机添加到导出意味着您隐含地信任该主机、它的用户和进程。
SSH 端口转发不是你唯一的问题,你可以禁止它(sshd's
AllowTcpForwarding no
),但sshd_config(5)
如前所述因此,将 SOCKS 添加到列表
socat
中netcat
(OpenSSH 也支持它,尽管只有 TCP)、OpenSSHtun
隧道支持,即使bash
有了它的/dev/tcp
支持,您也可以看到问题……太多了,无法一一列举。如果 B 具有允许每个用户规则的主机防火墙(即 Linux /iptables with
--uid-owner
),您可以锁定 B,以便 A 可以更加信任它。否则尝试使用 GSS 和 Kerberos 的 NFSv4,这会给你每个用户的信任。这很容易被击败
secure
的手册页
exports(5)
说:请注意,这是默认情况下打开的。
从计算机 C 连接到计算机 B 的任何用户都将作为普通用户进行连接。如您所述,通过 SSH 转发的 NFS 连接看起来像是源自作为该用户在 B 上运行的进程。这意味着连接受 B 上通常的安全控制的约束,特别是普通用户不能从低于 1024 的端口发起连接。
在我的一个系统上测试,我看到以下内容:
当然,任何可以在计算机 B 上将其帐户提升为 root 的人都可以绕过此保护,因此您需要充分锁定 NFS 客户端计算机。