一、目标:
1. 回顾NFS协议及其缺陷
2. 理解如何配置NFSv4的服务器和客户端
3. 使用Kerbeross来保证NFS认证和传输的加密
4. 研究SELinux和NFS之间如何影响
5. NFS配置问题排错
二、NFS服务配配置:
1. 类型:System V-launched service
2. 软件包:nfs-utils
3. Daemons:nfsd、rpc.mountd、rpc.statd、lockd、rpc.idmapd、rpc.gssd、rpc.svcgssd
4. 脚本:nfs、nfslock、rpcidmapd、rpcgssd、rpcsvcgssd
5. 端口:2049/tcp和2049udp(nfsd)、其它端口随机(通过portmap(111/tcp和111/udp)映射)
6. 配置:/etc/exports、/etc/sysconfig/nfs、/etc/idmapd.conf
7. 额外:portmap、krb5-workstation、util-linux
三、NFS挂载类型:
1. NFSv2:采用UDP协议传输
2. NFSv3:安全的异步传输、支持TCP协议、64-bit文件大小、大文件的读写、支持一部分Kerbeross特性
3. NFSv4:支持更完整的附加协议、UTF-8文件编码、提升用户映射支持、提升了锁机制、提升了客户端的缓存、支持完整的Kerbeross功能
四、挂载并使用NFSv3的步骤详解:
1. 客户端询问服务器的portmap,获取rpc.mountd端口
2. 客户端询问服务器的rpc.mountd,获取导出的文件系统和权限
3. rpc.mountd分发给客户端访问文件系统的句柄(也就是告知客户端如何访问文件系统)
4. 客户端使用句柄通过服务器的nfsd服务来进行访问和改变文件系统
5. 通过lockd和rpc.statd服务来进行文件锁管理
五、系统认证和用户认证
1. 程序是通过挂载的NFS文件系统来访问文件的
2. NFS客户端通过NFS请求来访问NFS服务器的时候包含了程序的UID和GID
(1) NFS服务器相信客户端发送精确的UID/GID信息
(2) 在服务器与客户端假设相同的用户UID和组GID信息
3. NFS服务器使用UID/GID信息控制访问
六、控制系统认证名字映射
1. 如果可能,使用中心认证方式
(1) 使用中心NIS或者LDAP服务保证服务器与客户端的UID和GUI映射的一致性
2. 在/etc/exports使用适当的选项
(1) root_squash:root映射UID和GID为65534(nfsnobody)
(2) all_squash:映射所有UID和GID为65534(nfsnobody)
七、基本共享安全
1. 不要共享包含服务器配置文件的目录
2. 共享全部的文件系统考虑使用subtree_check
3. 除非必须,否则不要使用no_root_squash选项
4. 共享文件系统时,小心使用crossmnt和nohide选项
八、NFSv3漏洞
1. 辅助协议使用随机端口,配置防火墙较为复杂
2. 客户端认证是通过主机名或IP地址
3. 服务器信任认证的客户端
4. 明文传输协议容易导致内存篡改和窃取
5. 以root身份运行复杂的服务
九、NFSv3中使用静态的端口
1. 通过设置静态端口为辅助NFS服务简单进行防火墙配置
2. 默认情况下,nfsd使用TCP和UDP的2049端口
3. 编辑/etc/sysconfig/nfs:
- LOCKD_TCPPORT=888
- LOCKD_UDPPORT=888
- MOUNTD_PORT=889
- STATD_PORT=12001
4. 通过rpcinfo -p命令核实端口