NFS的全称是Network File System,即网络文件系统。主要的目的是让网络中不同的主机共享彼此的文件。客户机可以将NFS服务器共享的目录挂载到本地的文件系统中,相当于自己的一个磁盘分区。比如说NFS服务器共享/shared这个目录,则NFS客户端便可以通过网络将这个目录挂载到自己的文件系统。

        RPC(Remonte Procedure Call)远程过程调用,作用是让不同主机上的两个进程能够基于二进制格式实现数据通信。NFS是基于RPC的。NFS支持众多功能,每个功能都由不同的进程实现,因此NFS端口号并不固定,这时候就需要RPC了,RPC指定每个功能所对应的端口号,并且通知给客户端,这样客户端便可找到对应的端口去连接。

        NFS在启动时随机选取数个端口,并向RPC注册,因此RPC知道每个端口对应的NFS功能。RPC使用固定的端口111监听客户端请求并返回给客户端正确的端口号,客户端收到正确端口号,便可直接与NFS daemon连接。因此RPC必须在NFS之前启动,否则NFS便无法向RPC注册。

NFS配置文件 

/etc/exports 可能不存在,需手动建立。格式如:

    /share    192.168.1.0/24(ro)        是什么意思呢?将/share目录以只读权限共享给192.168.1这个网段内的所有主机。

权限参数:

    ro:共享目录的权限是只读

    rw:共享目录的权限是读写

    sync:数据同步写入磁盘,效率低

    async:数据同步写入磁盘,效率高

    root_squash:将root用户和组都映射为匿名用户和匿名组,限制了root用户权限。

    no_root_squash:与上相反,保留root用户root组,不安全。

    all_squash:登录NFS的所有用户,身份都被映射为匿名用户。

    anonuid:匿名用户UID设置值,通常与前面xx_squash一起使用。

    anongid:匿名用户GID设置值,通常与前面xx_squash一起使用。


 exportfs 命令
-a :全部;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录

注意:-ar和-ur常一起使用,修改配置文件后不用重启nfs,直接使用exportfs重读配置文件即可。


查看服务器端都共享了哪些目录 
    showmount -e 服务器IP

显示哪些客户端挂载了哪些目录

    showmount -a


实例演示

共享/shared目录,只允许192.168.1.0/24网段用户读写访问,且所有用户都映射为id号位1100的用户,UID和GID都设置为1000。

服务器IP:192.168.1.110

客户端IP:192.168.1.19

服务器端:

#mkdir /shared

#groupadd -g 1100 xiaoming

#useradd -g 1100 -u 1100 xiaoming

#vim /etc/exportfs

    /shared 192.168.1.0/24(rw,all_squash,anonuid=1100,anongid=1100)

#exportfs -ra

# showmount -e 192.168.1.110

    /shared 192.168.1.0/24


客户端:

#mkdir /nfs

#mount -t nfs -onolock,nfsvers=3 192.168.1.110:/shared/ /nfs

#cd /nfs 

#touch a #touch失败,因为1100用户并没有对/shared目录写权限,设置即可。


服务器端:

setfacl -m u:xiaoming:rwx /shared

客户端即可touch文件。

#showmount -a 192.168.1.110

    192.168.1.19:/shared