[b]网络文件系统(Network File System,NFS )[/b],是在 Unix 系统间[color=red]实现磁盘文件共享[/color]的一种方法,[color=red]它支持应用程序在客户端通过网络存取位于服务器磁盘中数据的一种文件系统协议[/color]。最早于1984年由昇陽开发。功能是通过网络让不同的机器、不同的操作系统能夠彼此分享个别的資料。
NFS 的基本原則是「[color=red]允许不同的客戶端及服务器端通过一组 RPCs 分享相同的文件系統[/color]」,它是独立与操作系统,允许不同硬件及操作系統共同进行文件的分享。
NFS 提供了以下的服务:
[list]
[*]在目录(directory)中寻找文件
[*]列出目录中的文件
[*]管理目录
[*]取得各文件的属性(file attribute)
[*]文件的读/写
[/list]
[b]RPC(Remote Procedure Call)[/b]
NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以[color=red]只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT[/color]。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:[color=red]NFS是一个文件系统,而RPC是负责负责信息的传输[/color]。
[b]NFS的不安全性主要体现于以下4个方面:[/b]
[list]
[*]1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现 [color=red]防火墙对各端口的设定,hosts.allow对各服务、客户端IP的限制[/color]
[*]2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制 [color=red]可以使用安全的NFS服务器 使用公钥、密钥?[/color]
[*]3、较早的NFS可以使未授权用户获得有效的文件句柄
[*]4、在RPC远程调用中,一个SUID的程序就具有超级用户权限.
[/list]
[b]加强NFS安全的方法:[/b]
[list]
[*]合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用no_root_squash。
[*]合理设置共享出去目录的权限([color=red]文件所有者、文件所在组、其他人的权限760[/color]?)
[*]使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
[*]根据客户端数,在/etc/sysconfig/nfs中设置合理的[color=red]nfs服务器端进程数RPCNFSDCOUNT[/color],默认8
[*]修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/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
[*]/etc/services中改变默认的portmapper端口111,和nfs端口2049
[*][color=red]配置安全NFS[/color] [url=http://dag.wieers.com/blog/tunneling-nfs4-over-ssh]Tunneling NFS4 over SSH[/url], [url=http://nfs.sourceforge.net/nfs-howto/ar01s06.html]Security and NFS[/url]
[/list]
[b]NFS相关端口:[/b]
111 portmap端口
2049 nfsd端口
在/etc/sysconfig/nfs或者/etc/service中固定mountd、rquotad、rpc.statd相关端口,[color=red]/etc/sysconfig/nfs中的优先级 大于 /etc/service, lockd,statd的端口好像只能在nfs配置文件中指定?试着没有修改成功![/color]
防火墙设置:
[url=http://www.cnblogs.com/yuepeng/archive/2010/12/08/1900604.html]CentOS NFS配置[/url]
[url=http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F]维基百科 - 网络文件系统[/url]
NFS 的基本原則是「[color=red]允许不同的客戶端及服务器端通过一组 RPCs 分享相同的文件系統[/color]」,它是独立与操作系统,允许不同硬件及操作系統共同进行文件的分享。
NFS 提供了以下的服务:
[list]
[*]在目录(directory)中寻找文件
[*]列出目录中的文件
[*]管理目录
[*]取得各文件的属性(file attribute)
[*]文件的读/写
[/list]
[b]RPC(Remote Procedure Call)[/b]
NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以[color=red]只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT[/color]。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:[color=red]NFS是一个文件系统,而RPC是负责负责信息的传输[/color]。
[b]NFS的不安全性主要体现于以下4个方面:[/b]
[list]
[*]1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现 [color=red]防火墙对各端口的设定,hosts.allow对各服务、客户端IP的限制[/color]
[*]2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制 [color=red]可以使用安全的NFS服务器 使用公钥、密钥?[/color]
[*]3、较早的NFS可以使未授权用户获得有效的文件句柄
[*]4、在RPC远程调用中,一个SUID的程序就具有超级用户权限.
[/list]
[b]加强NFS安全的方法:[/b]
[list]
[*]合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用no_root_squash。
[*]合理设置共享出去目录的权限([color=red]文件所有者、文件所在组、其他人的权限760[/color]?)
[*]使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
[*]根据客户端数,在/etc/sysconfig/nfs中设置合理的[color=red]nfs服务器端进程数RPCNFSDCOUNT[/color],默认8
[*]修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/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
[*]/etc/services中改变默认的portmapper端口111,和nfs端口2049
[*][color=red]配置安全NFS[/color] [url=http://dag.wieers.com/blog/tunneling-nfs4-over-ssh]Tunneling NFS4 over SSH[/url], [url=http://nfs.sourceforge.net/nfs-howto/ar01s06.html]Security and NFS[/url]
[/list]
[b]NFS相关端口:[/b]
111 portmap端口
2049 nfsd端口
在/etc/sysconfig/nfs或者/etc/service中固定mountd、rquotad、rpc.statd相关端口,[color=red]/etc/sysconfig/nfs中的优先级 大于 /etc/service, lockd,statd的端口好像只能在nfs配置文件中指定?试着没有修改成功![/color]
方式一:在/etc/service固定相应守护进程的端口
mountd 892/tcp #rpc.mountd
mountd 892/udp #rpc.mountd
rquotad 875/tcp #rpc.rquotad
rquotad 875/udp #rpc.rquotad
方式二:/etc/sysconfig/nfs
#默认:
#Port rpc.mountd should listen on.
#MOUNTD_PORT=892
#Port rpc.statd should listen on.
#STATD_PORT=662
#/usr/sbin/rpc.rquotad Port rquotad should listen on.
#RQUOTAD_PORT=875
#TCP port rpc.lockd should listen on.
#LOCKD_TCPPORT=32803
#UDP port rpc.lockd should listen on.
#LOCKD_UDPPORT=32769
修改成:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30003
MOUNTD_PORT=30004
STATD_PORT=30005
防火墙设置:
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p udp --dport 111 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p udp --dport 2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 30001:30005 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p udp --dport 30001:30005 -j ACCEPT
[url=http://www.cnblogs.com/yuepeng/archive/2010/12/08/1900604.html]CentOS NFS配置[/url]
[url=http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F]维基百科 - 网络文件系统[/url]