NFS:network file system(网络文件系统)
作用:通过网络,让不同的机器,不同的操作系统可以共享彼此的文件
默认NFS用来传输的端口是随机选择小于1024的端口;

PRC:remote procedure call(windows系统三大服务之一)
作用:指定每个NFS功能所对应的端口号,并通知给客户端。让客户端可以连接到正确的端口上去
当NFS服务启动时,会随机选取数个端口向RPC注册,因此RPC可以知道每个端口对应的NFS功能;

注意:在NFS启动前,就要启动RPC,否则NFS无法向RPC注册;
PRC若重新启动。原来注册的数据会清除,因此RPC重启后,它所管理的所有的服务都要重新启动。

当客户端对NFS文件访问需求时,如何向服务器发送请求数据

1、客户端向RPC(prot:111)发出NFS文件访问功能的查询要求;
2、服务器找到对应的已注册的NFS daemon端口,通知给客户端;
3、客户端知晓端口后,直接连接;

NFS的rpc daemones

rpc.nfsd
最主要的NFS服务提供程序
这个damon主要功能:
管理客户端是否能使用服务器文件系统挂载信息其中包含判断这个登录用户ID
rpc.mountd
这个daemon主要功能:在于管理NFS的文件系统
当客户端顺利的通过rpc.nfsd登录服务器之后,在可以使用提供的文件之前会经过文件权限的认证;
读取NFS服务器的配置权限/etc/exports来比较客户端权限(若没有文件可自行创建)
rpc.lockd(非必要)
这个daemon主要功能:管理文件的锁定
rpc.statd(非必要)
这个daemon主要功能:检查文件的一致性;与rpc.lockd一致性

NFS本身服务并没有进行用户身份验证
服务器会以client的用户UID、GID等身份尝试读取server端的文件系统;
如:当client以dmtsai(UID:501、GID:501)身份去访问NFS共享服务系统时有4种情况可能发生:

1、NFS服务器与客户端刚好有相同的账户与用户组:
此时此用户可以直接 以dmtsai的身份访问服务器所提供的共享文件系统
2、NFS服务器的501账户对应为sc
此时此用户以sc的身份访问共享文件系统;只能访问sc的文件;因为文件系统的indoe所记录的属性为UID、GID,而非账号与属组名
3、NFS服务器没有501这个UID
此时服务器会将该用户在该目录下压缩成匿名用户;通常匿名用户的ID为65535
4、特殊情况
在服务器端共享/tmp的情况下,dmtsai的身份保持为501,但建立的各项数据在服务端成为无主数据,若以root用户访问,因考虑安全性会将root的身份主动压缩成为匿名用户。

服务器端的配置;

两个主程序包:prcbind、nfs-utils
配置文件:/etc/exports
文件系统维护二进制文件:/usr/sbin/exportfs
共享资源日志文件:/var/lib/nfs/*tab
客户端查询服务器共享资源命令:showmount
setfacl -m u:502:rwx /home/sc
将赋予uid=502的账号读写执行的权限,对于/home/sc

新建/etc/exports;
exports语法:

示例:将tmp开放共享对192.168.100.0/24这个网段有只读权限,其他来源具有读写权限
eg:/tmp 192.168.100.0/24(ro) *(rw)
共享目录 主机/网段(权限)
当权限不止一个时;以逗号隔开;

权限参数:

rw read-write 读写
ro read-only 只读
sync 同步数据写入内存和磁盘
async 数据暂存于内存中
no_root_squash 当客户端以root访问,该权限将在共享文件系统开放root权限
root_squash 当客户端以root访问,该权限将root压缩成nfsnobody
all_squash 无论登录NFS用户为什么,都会被压缩成nfsnobody
anonuid 指定匿名用户uid
anongid 指定匿名用户的gid

配置步骤:

安装相关包
yum install -y rpcbind nfs-utils

启动服务

service rpcbind start
service nfs start
chkconfig nfs on

创建共享文件夹

mkdir /sharedata
echo”This is a NFS test file ” > /sharedata/test.txt
chown -R nfsnobody.nfsnobody /sharedata

检查是否有nfsnobody的用户

grep nfsnobody /etc/password

配置/etc/exports

echo”/sharedata 192.168.100.0/24(rw,sync)” >> /etc/exports

客户端配置

安装prcbind和nfs
showmount -e 192.168.100.1
mount -t nfs 192.168.100.1:/sharedata /mnt