Linux之NFS基础总结及应用实践
一、简介
NFS(Network File System)即网络文件系统,允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
特性:节省本地存储空间、共享存储空间、 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用
NFS工作原理
简要说明:NFS并不是单独存在的,它和另外2个模块共同存在(即:NFS,RPC,PORTMAP),试想两台网络当中的主机如何进行通讯,当然只有通过ip+port来发送数据。远程客户端进行nfs请求,RPC获得请求,通知PORTMAP来获取端口号,然后PORTMAP将可用的端口号传给NFS、RPC,然后NFS模块再进行权限检验,如果有足够的权限,RPC就通过PORTMAP给出的端口进行数据传输,并通过该端口到达客户端。
二、简要说明NFS配置文件
1、NFS服务主配置文件在/etc/exprots,“exports”文件用于配置NFS服务器中输出的共享目录,如
#im /etc/exports
/nfs/share *(sync,ro)
注:/nfs/share为nfs共享目录名、*为客户端主机地址、(sync,ro)是设置选项
客户端主机地址指能够访问共享目录的主机地址,可以有以下几种方式:
指定IP地址的主机:192.168.1.x
指定网段中的所有主机:192.168.1.0/24
指定域名的主机:www.test.com
指定域下的所有主机:*.test.com
所有主机:*
设置选项指设置共享目录的属性,要用()括起来,多个选项间用逗号分隔
sync :设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项
ro :设置输出的共享目录只读,与rw 不能共同使用
rw :设置输出的共享目录可读写,与ro 不能共同使用
其他常用用户选项:
root_squash:不允许 root 用户访问挂载上来的 NFS 卷
no_root_squash:允许 root 用户访问挂载上来的 NFS 卷
all_squash:限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。
anonuid、anongid:将匿名 UID 和 GID 修改成特定用户和组帐号。
三、NFS应用实践
实践要求:建立nfs共享,将主机192.168.1.100上的目录/magedu通过nfs共享给192.168.1.0/24网络的主机以异步读写方式使用;当nfs服务器不允许root用户访问共享文件,即映射为服务器端的nfsuser用户
环境:centos 6.7(最小化安装)
检查已安装NFS(如能看到nfs-utils rpcbind两个相关的包即为已安装,如未安装直接yum -y install nfs*即可)
[root@hc01 ~]# rpm -qa|grep nfs
nfs4-acl-tools-0.3.3-7.el6.x86_64
nfs-utils-1.2.3-64.el6.x86_64
nfs-utils-lib-1.1.5-11.el6.x86_64
[root@hc01 ~]# rpm -qa|grep rpcbind
rpcbind-0.2.0-11.el6.x86_64
1、创建nsfuser用户,mageedu目录并在目录创建test.txt测试文件,设置NFS主配置文件
#useradd nfsuser
#mkdir /mageedu
#touch test.txt
#vi /etc/exports
/mageedu 192.168.1.100/24(rw,async,root_squash,anonuid=501,anongid=501)
2、启动nfs服务,必须可以正常看到以下5个进程启动
3、客户端查看挂载nfs并验证是否访问正常,这里以192.168.1.101为客户端
[root@hc02 ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/mageedu 192.168.1.100/24
[root@hc02 ~]# mount -t nfs 192.168.1.100:/mageedu /mnt
[root@hc02 ~]# ls /mnt/
test.txt
4、客户端在挂载/mnt目录下创建hc02.txt,验证客户端root权限是否有权限
[root@hc02 ~]# cd /mnt/
[root@hc02 mnt]# ls
test.txt
[root@hc02 mnt]# touch hc02.txt
提示:权限拒绝
注:由于在挂载参数指定了root匿名用户的权限,映射为普通用户nfsuser的权限501来访问。该用户在服务器端/mageedu上是没有权限写入的。这是我们可以验证在NFS Server(192.168.1.100)上的/mageedu目录下创建一个让nfsuser用户可读可写的目录rw_user
[root@hc01 /]# ll -d /mageedu/
drwxr-xr-x 2 root root 4096 Nov 7 01:50 /mageedu/
#mkdir /mageedu/rw_user
#setfacl -m u:nfsuser:rwx /mageedu/read_write (注意该命令是设置权限)
这是在客户端挂载的/mnt/rw_user目录下,新建hc02.txt,可以正常创建,并且在nfs服务器端查看