首先是漏洞
本来我以为是个很容易搞定的问题,没想到折腾一下午,做了allow,做了deny,做了exports,还是不行。原因是nfs的开放性,这个后面再说,直接上解决思路吧。
环境是内网环境,服务器分布
机器IP | 用途 |
---|---|
192.168.1.34(K8Smaster) | 主节点+nfs |
192.168.1.35(K8Snode) | nfs2+从节点 |
192.168.1.36(K8Snode) | 从节点 |
192.168.1.20(借了一台机器) | 测试整改效果 |
目前的要求是,nfs只能集群内部访问,其他机器,比如20这台,执行showmount -e 192.168.1.34是无输出的。
解决步骤:
1. 配置 /etc/exports文件,这个文件是负责目录位置,目录共享的,参数解析如下
第一列:欲共享出去的目录,
也就是想共享到网络中的文件系统;
第二列:可访问主机
192.168.1.34 指定IP地址的主机
nfsclient.test.com 指定域名的主机
192.168.1.0/24 指定网段中的所有主机
*.test.com 指定域下的所有主机
* 所有主机
第三列:共享参数
下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
这里我们将1.34的nfs目录设置为只共享给34,35,36这几台集群内部机器
2.设置/etc/hosts.allow和/etc/hosts.deny
hosts.allow
hosts.deny
然后,我们就可以验证一下成果了(由于当时没截图,所以这里找一张旧图,意思是仍然可以完好输出,但无法共享)
懵了啊,搞了这么多台系统,都是这么来的,双重保障,怎么翻车了?
看了不少文章,也找了不少资料,发现假如rpcbind的111端口和nfs的2049端口开放,在其他机器还是一样可以export的
这个不懂是nfs的开放性所致还是统信系统的特质。
遂搞端口控制,配置iptables
同理,nfs的2049也搞一下
然后,我们再来一波测试
完工。
但这东西,如果防火墙停了,就没用了,但对于现在来说,应该不会有人不开防火墙。
另外,还是没懂为什么做了allow和deny仍然能访问的真正底层原因,如果有知道的大佬,也可以分享一下。