NFS安全配置
1、NFS简介
NFS(Network File System)网络文件系统是FreeBSD支持的文件系统中的一种, 也被称为 NFS。 NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件 一样访问远端系统上的文件。
使用NFS有以下好处:
1、本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一 台机器上而且可以通过网络访问到。 2、用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。 3、诸如软驱,CDROM和Zip之类的存储设备可以在网络上面被别的机器使用。 这可以减少整个网络上的可移动介质设备的数量。
NFS是不可以单独进行工作的,它必须跟portmap来协商生成的。Portmap用于提供RPC协议(远程过程调用)
NFS相关进程:
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器 rpc.mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的文凭前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。 portmap:portmap的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
服务器必须运行以下服务:
nfsd:NFS,为来自NFS客户端的 请求服务。 mountd:NFS挂载服务,处理nfsd递交过来的请求。 rpcbind:此服务允许 NFS 客户程序查询正在被 NFS 服务使用的端口。
2、NFS服务器架设
搭建环境:CentOS release 6.6 (Final) 安装软件包
yum install nfs-utils
NFS相关文件
/etc/exports:NFS服务的主要配置文件 /usr/sbin/exportfs:NFS服务的管理命令 /usr/sbin/showmount:客户端的查看命令 /var/lib/nfs/etab:记录NFS分享出来的目录的完整权限设定值 /var/lib/nfs/xtab:记录曾经登录过的客户端信息
启动服务
/etc/init.d/rpcbind start /etc/init.d/nfs start
配置输出的路径
vim /etc/exports
查看挂在出来的东西
showmount -e ip
将ip:/var/test输出的目录,挂在到本机的/mnt下面
mount-t nfs ip:/var/test /mnt
/etc/exports中配置的简单说明:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
网段表示方法:
不做限制,允许任何主机:* 限定单个IP:192.168.5.6 限定子网:192.168.5.0/24、192.168.5.0/255.255.255.0 指定主机:test.wooyun.org 限定一个域中的所有主机:*.wooyun.org
配置参数:
ro:只读(默认配置) rw:可写 root_squash:root用户的所有请求映射成如anonymous用户一样的权限(默认) subtree_check:如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) no_subtree_check:和上面相对,不检查父目录权限 all_squash:共享文件的UID和GID映射匿名用户anonymous,适合公用目录 no_all_squash:保留共享文件的UID和GID(默认) sync:同步模式,内存中数据时时写入磁盘 async:不同步,把内存中数据定期写入磁盘中 secure:NFS通过1024以下的安全TCP/IP端口发送 insecure:NFS通过1024以上的端口发送 wdelay:如果多个用户要写入NFS目录,则归组写入(默认) hide:在NFS共享目录中不共享其子目录 no_hide:共享NFS目录的子目录 no_root_squash:允许已root身份写入,如果不开启这个参数,NFS挂载端在以本机root身份写入东西的时候,生成的文件的文件的用户和属组均为nfsnobody anonuid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的UID anongid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的GID
3、错误配置以利用
3.1、限制NFS可挂载的IP/IP段
任何人都可以对输出的目录进行挂载,造成信息泄露
3.2、未对NFS的权限存在问题,任何人均可写
可挂载的情况下,如果发布的文件为web文件,可以直接写入webshell
4、实际案例
5、修复方案
5.1、在/etc/exports中限制可以挂在的IP或IP段
5.2、错误的开放了可写权限
6、漏洞扫描与发现
nmap扫描TCP 2049端口,然后试用showmount -e ip进行权限查看
nmap -Pn -p2049 -sV --open ip showmount -e ip