相关概念:node
1、什么是NFS(Network File System)即网络文件系统。NFS 使用内核功能,因此内核须要支持NFS。linux
主要功能:经过网络,让不一样的机器、不一样的OS 能够共享彼此的文件。vim
协议详解请参考百度百科连接:http://baike.baidu.com/view/44349.htmcentos
2、什么是RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种经过网络从远程计算机程序上请求服务,而不须要了解底层网络技术的协议。服务器
协议详解请参考百度百科连接:http://baike.baidu.com/view/7287257.htm?fromId=32726&redirected=seachword网络
主要功能:指定每一个NFS对应的 port number,并通知客户端,让客户端能够链接到正确的端口上。app
由于NFS服务必须使用RFC服务,因此称之为RPC Server的一种,另外NIS也属于RPC Server。tcp
Server/client都要开启RFC 服务。启动NFS以前,RPC要先启动,不然NFS会没法向RPC注册。工具
客户端有NFS文件访问需求时,向服务器的请求数据的流程:测试
一、客户端向服务器端的RPC(Port 111) 发出NFS文件访问功能。
二、服务器端找到对应的已注册的 NFS daemon 端口后,会通知客户端。
三、客户端找到正确端口后,能够直接与NFS daemon。
3、NFS Server 端的配置
一、所须要软件
RPC主程序: rpcbind
NFS主程序: nfs-utils
[root@jone ~]# yum -y install rpcbind nfs-utils
二、NFS的软件结构
主配置文件:/etc/exports
NFS文件系统维护命令:/usr/sbin/exportfs 共享 /etc/exports 更新的目录资源、将NFS 共享的目录卸载以及从新共享。
共享资源的日志文件:/var/lib/nfs/*tab etab:记录NFS共享目录的完整权限设置值;另外一个xtab,记录到链接到此NFS服务器的客户端信息。
客户端查询服务器共享资源的命令:/usr/sbin/showmount
三、/etc/exports配置文件
[root@centos ~]# vi /etc/exports
/tmp 192.168.11.0/24(ro) *(rw)
*.ev.ncku.edu.tw(ro,sync)
[分享目录] [第一部主机(权限)] [可用主机名] [可用通配符]
每一行最前面是要分享出来的目录。是以目录为单位啊! 而后这个目录能够依照不一样的权限分享给不一样的主机,像鸟哥上面的 例子说明是: 要将 /tmp 分别分享给三个不一样的主机或网域的意思。记得主机后面以小括号 () 设计权限参数, 若权限参数不止一个时,则以逗号 (,) 分开。且主机名与小括号是连在一块儿的!在这个档案内也能够利用 # 来批注呢。
至于主机名的设定主要有几个方式:
一、可使用完整的 IP 或者是网域,例如 192.168.100.10 或192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 均可以接受! 不可使用 192.168.100.* 。
二、也可使用主机名,但这个主机名必需要在 /etc/hosts 内,或可以使用 DNS找到该名称才行!反正重点是可找到 IP 就是了。若是是主机名的话,那么能够支持通配符,例如 * 或 ? 都可接受。
Exports文件中的权限参数
选项 说明
Ro 该主机对该共享目录有只读权限
Rw 该主机对该共享目录有读写权限
Root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
No_root_squash 客户机用root访问该共享文件夹时,不映射root用户
All_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
Anonuid 将客户机上的用户映射成指定的本地用户ID的用户
Anongid 将客户机上的用户映射成属于指定的本地用户组ID
Sync 资料同步写入到内存与硬盘中
Async 资料会先暂存于内存中,而非直接写入硬盘
Insecure 容许从这台机器过来的非受权访问
例题一:
让 root 保留 root权限
答:[root@centos ~]# vi /etc/exports
/tmp *(rw,no_root_squash) 任何人均可以使用 /tmp,主机名可使用通配符处理,重点是no_root_squash。
例题二:同一目录针对不一样范围开放不一样权限
我要将一个公共的目录 /home/public 公开出去,可是只有限定个人局域网络192.168.11.0/24 这个网域且加入 vbirdgroup 的用户才可以读写,其余来源则只能读取。
答:
[root@centos ~]# mkdir /home/public
[root@centos ~]# groupadd vbirdgroup例题三:仅给某个单一主机使用的目录设定
我要将一个私人的目录 /home/test 开放给 192.168.100.10 这个 Client 端的机器来使用时,该如何设定?假设使用者的身份是 dmtsai 才具备完整的权限时。
答:
[root@centos ~]# mkdir /home/test
[root@centos~]# setfacl -m u:dmtsai:rwx /home/test
[root@centos ~]# vim /etc/exports
/tmp *(rw,no_root_squash)
/home/public 192.168.11.0/24(rw) *(ro)
/home/test 192.168.11.173(rw)
# 只要设定 IP 正确便可!
这样就设定完成了!并且,只有 192.168.11.173这部机器才能对 /home/test 这个目录进行存取喔!
例题四:开放匿名登陆的状况
我要让 *.centos.vbird 网域的主机,登入个人 NFS 主机时,能够存取 /home/linux ,可是他们存数据的时候,我但愿他们的 UID 与 GID 都变成 45 这个身份的使用者,假设我 NFS 服务器上的 UID 45 与 GID 45 的用户/组名为 nfsanon。
答:
[root@centos~]# groupadd -g 45 nfsanon
[root@centos ~]# useradd -u 45 -g nfsanon nfsanon
[root@centos ~]# mkdir /home/linux
[root@centos ~]# setfacl -m u:nfsanon:rwx /home/linux
[root@centos ~]# vim /etc/exports
/tmp *(rw,no_root_squash)
/home/public 192.168.11.0/24(rw) *(ro)
/home/test 192.168.11.173(rw)
/home/linux *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)
# 若是要开放匿名,那么重点是 all_squash,而且要配合 anonuid 喔!
特别注意到那个 all_squash 与 anonuid, anongid 的功能!如此一来,当clientlinux.centos.vbird 登入这部 NFS 主机,而且在 /home/linux 写入档案时,该档案的全部人与全部群组,就会变成 /etc/passwd 里面对应的 UID 为 45 的那个身份的使用者了!
三、启动NFS
/etc/init.d/rpcbind start
/etc/init.d/nfs start
/etc/init.d/nfslock start
查看NFS 开启的端口
[root@centos ~]# netstat -tunlp | grep -E "(rpc|nfs)"
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1345/rpcbind
tcp 0 0 0.0.0.0:54000 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 0.0.0.0:60724 0.0.0.0:* LISTEN 1425/rpc.statd
tcp 0 0 0.0.0.0:58105 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 0.0.0.0:49257 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 :::111 :::* LISTEN 1345/rpcbind
tcp 0 0 :::57367 :::* LISTEN 1425/rpc.statd
tcp 0 0 :::59611 :::* LISTEN 3034/rpc.mountd
tcp 0 0 :::44958 :::* LISTEN 3034/rpc.mountd
tcp 0 0 :::55489 :::* LISTEN 3034/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1345/rpcbind
udp 0 0 0.0.0.0:753 0.0.0.0:* 1425/rpc.statd
udp 0 0 0.0.0.0:49675 0.0.0.0:* 3034/rpc.mountd
udp 0 0 0.0.0.0:39183 0.0.0.0:* 3034/rpc.mountd
udp 0 0 0.0.0.0:672 0.0.0.0:* 1345/rpcbind
udp 0 0 0.0.0.0:60470 0.0.0.0:* 1425/rpc.statd
udp 0 0 0.0.0.0:36158 0.0.0.0:* 3034/rpc.mountd
udp 0 0 :::49007 :::* 1425/rpc.statd
udp 0 0 :::111 :::* 1345/rpcbind
udp 0 0 :::672 :::* 1345/rpcbind
udp 0 0 :::34479 :::* 3034/rpc.mountd
udp 0 0 :::39476 :::* 3034/rpc.mountd
udp 0 0 :::40297 :::* 3034/rpc.mountd
主要的端口是:
rpcbind 启动的 port 在 111 ,同时启动在 UDP 与 TCP;
nfs 自己的服务启动在 port 2049 上头!
其余 rpc.* 服务启动的 port 则是随机产生的,所以需向 port 111 注册。
启动nfs后又修改了/etc/exports,不用重启该服务,使用exports命令便可:
Exports [-aruv]
-a 所有mount或umount文件/etc/exports中的内容
-r 从新mount文件/etc/exports中的共享内容
-u umount目录
-v 在export的时候,将详细的信息输出到屏幕上
例:
[root@localhost ~]# exportfs –rv 所有从新export一次
[root@localhost ~]# exportfs –au 所有卸载
4、NFS 客户端的设置
一、客户端先rpcbind服务。
[root@jone ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
二、扫描NFS服务器目录有那些,以及是否可用。
showmount –e 192.168.90.254 (服务器端IP)
三、客户端创建挂载点目录。
[root@jone ~]# mkdir -p /home/nfs/public/
四、使用mount 将服务器直接挂载到相关目录。
mount -t nfs 192.168.90.254 :/home/public /home/nfs/public
五、查看是否挂载成功。
[root@jone ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
8.5G 1.7G 6.4G 21% /
tmpfs 246M 0 246M 0% /dev/shm
/dev/sda1 485M 32M 429M 7% /boot
192.168.90.254:/home/public
28G 790M 26G 3% /home/nfs/public
六、使用完毕以后可使用umount卸载
umount /home/nfs/pulic
PS:
一、用户帐号。客户端和服务器端的帐号不一致致使文件系统使用上的混乱,NFS比较大弊端。
二、NFS 服务器开放写入权限(/etc/exports 设置有关)
三、文件权限具备可写入(W)的权限。
常与NIS搭配使用。
自动挂载服务:autofs
创建主配置文件 /etc/auto.master
创建数据对应文件内(/etc/auto.nfs)的挂载信息与服务器对应的资源。
没有测试成功,继续测试。
鸟哥总结的重点,最好记住。
Network FileSystem (NFS) 可让主机之间透过网络分享彼此的档案与目录;
NFS 主要是透过 RPC 来进行 file share 的目的,因此 Server 与 Client的 RPC 必定要启动才行!
NFS 的配置文件就是 /etc/exports 这个档案;
NFS 的权限能够观察 /var/lib/nfs/etab,至于的重要登陆档能够参考 /var/lib/nfs/xtab 这个档案,还包含至关多有用的信息在其中!
NFS 服务器与客户端的使用者帐号名称、UID 最好要一致,能够避免权限错乱:
NFS 服务器预设对客户端的 root 进行权限压缩,一般压缩其成为nfsnobody 或 nobody。
NFS 服务器在更动 /etc/exports 这个档案以后,能够透过 exportfs 这个 指令来从新挂载分享的目录! 可使用 rpcinfo 来观察 RPC program 之间的关系!!!
NFS 服务器在设定之初,就必需要考虑到 client 端登入的权限问题,不少时候没法写入或者没法进行分享,主要是 Linux 实体档案的权限设定问题所致!
NFS 客户端能够透过使用 showmount, mount 与 umount 来使用 NFS 主机提供的分享的目录!
NFS 亦可使用挂载参数,如 bg, soft, rsize, wsize, nosuid, noexec, nodev 等参数, 来达到保护本身文件系统的目标!
本文主要内容来自:鸟哥的Linux私房菜服务器架设篇(第三版),这是一本很好的入门和工具书,有兴趣的能够查看。