linux NFS 服务安全加固方法
NFS(NetworkFileSystem)是FreeBSD支持的一种文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。不正确的配置和使用NFS,会带来安全问题。
概述
NFS的不安全性,主要体现于以下4个方面:
- 缺少访问控制机制
- 没有真正的用户验证机制,只针对RPC/Mount请求进行过程验证
- 较早版本的NFS可以使未授权用户获得有效的文件句柄
- 在RPC远程调用中,SUID程序具有超级用户权限
加固方案
为有效应对以上安全隐患,推荐您使用下述加固方案。
配置共享目录(/etc/exports)
使用anonuid,anongid配置共享目录,这样可以使挂载到NFS服务器的客户机仅具有最小权限。不要使用no_root_squash。
使用 安全组策略 或iptable防火墙限制能够连接到NFS服务器的机器范围。
iptables-AINPUT-ieth0-pTCP-s192.168.0.0/24--dport111-jACCEPT iptables-AINPUT-ieth0-pUDP-s192.168.0.0/24--dport111-jACCEPT iptables-AINPUT-ieth0-pTCP-s140.0.0.0/8--dport111-jACCEPT iptables-AINPUT-ieth0-pUDP-s140.0.0.0/8--dport111-jACCEPT
账号验证
使用KerberosV5作为登录验证系统,要求所有访问人员使用账号登录,提高安全性。
设置NFSD的COPY数目
在Linux中,NFSD的COPY数目定义在启动文件/etc/rc.d/init.d/nfs中,默认值为8。
最佳的COPY数目一般取决于可能的客户机数目。您可以通过测试来找到COPY数目的近似最佳值,并手动设置该参数。
选择传输协议
对于不同的网络情况,有针对地选择UDP或TCP传输协议。传输协议可以自动选择,也可以手动设置。
mount-tnfs-osync,tcp,noatime,rsize=1024,wsize=1024EXPORT_MACHINE:/EXPORTED_DIR/DIR
UDP协议传输速度快,非连接传输时便捷,但其传输稳定性不如TCP,当网络不稳定或者黑客入侵时很容易使NFS性能大幅降低,甚至导致网络瘫痪。一般情况下,使用TCP的NFS比较稳定,使用UDP的NFS速度较快。
- 在机器较少,网络状况较好的情况下,使用UDP协议能带来较好的性能。
- 当机器较多,网络情况复杂时,推荐使用TCP协议(V2只支持UDP协议)。
- 在局域网中使用UDP协议较好,因为局域网有比较稳定的网络保证,使用UDP可以带来更好的性能。
- 在广域网中推荐使用TCP协议,TCP协议能让NFS在复杂的网络环境中保持最好的传输稳定性。
限制客户机数量
修改/etc/hosts.allow和/etc/hosts.deny来限制客户机数量。
/etc/hosts.allow
portmap:192.168.0.0/255.255.255.0:allow
portmap:140.116.44.125:allow
/etc/hosts.deny
portmap:ALL:deny
改变默认的NFS端口
NFS默认使用的是111端口,使用port参数可以改变这个端口值。改变默认端口值能够在一定程度上增强安全性。
配置nosuid和noexec
SUID(SetUserID)或SGID(SetGroupID)程序可以让普通用户以超过自己权限来执行。很多SUID/SGID可执行程序是必须的,但也可能被一些恶意的本地用户利用,获取本不应有的权限。
尽量减少所有者是root,或是在root组中却拥有SUID/SGID属性的文件。您可以删除这样的文件或更改其属性,如:
使用nosuid选项禁止set-UID程序在NFS服务器上运行,可以在/etc/exports加入一行:
/wwwwww.abc.com(rw,root_squash,nosuid)
使用noexec禁止直接执行其中的二进制文件。