RHCA培训笔记(333网络安全 – 5)《关于NFS》
NFS
1、NFS(网络文件系统Network File System)可能启动的进程有nfsd、rpc.mountd、rpc.statd、lockd(内核态)、rpc.idmapd、rpc.gssd、rpc.svcgssd。nfsd使用2049的TCP和2049的UDP端口,其它的端口号由portmap随机提供(portmap自己监听在111端口);
3、NFS v3的连接过程:
a> 客户端问服务器端的portmap:rpc.mount目前的用哪个端口?
b> 客户端向服务器端的rpc.mount请求挂载NFS;
c> 服务器端的rpc.mount判断权限后给客户端一个文件句柄;
d> 客户端使用这个句柄与服务器端的nfsd交流(使用TCP或UDP的2049端口),以读写文件;
e> 文件锁是由lockd和rpc.stats管理的;
4、NFSv3协议的服务器端是无状态的,所以就算机器重启了,NFS服务起来以后,客户端依然可以拿着旧文件句柄继续读写文件。但是服务器端的lockd进程是有状态的,重启就有点麻烦,解决方案是服务器端的rpc.statd让客户端报告自己手里的锁,然后重新让lockd恢复锁状态。这种锁状态机制是到v3版本才引入的;v2版本在crash之后会出现锁错误;
6、NFS的UID/GID同步问题初步讨论:
a> 最简单的办法就是用root_squash或者all_squash来做UID映射,把所有用户都映射成匿名用户。需要注意的是匿名用户的UID其实是-2,所以65534其实只是在16bit用户ID的系统上的表现,在一些32bit用户ID的系统上-2会被表现为4294967294;
b> pam_lisfile.so和pan_limits.so这两个PAM模块可以帮助我们确保NFS用户不会得到shell登录权限;
c> UID和GID在不同客户端之间不同的根治方法是使用NIS或者LDAP的方式直接把UID/GID统一掉;