快捷搜索:   nginx

RHEL NFS服务器搭建

1:NFS简介
(1)什么是NFS
NFS就是network file system 的缩写,最早由sun开发。它的最大功能就是可以通过网络让不同的机器,不同的操作系统可以彼此共享。
NFS是通过网络来进行数据传输的,那么NFS应该会使用一些端口吧?NFS使用哪个端口来进行传输呢?答案是....不知道。因为NFS传输数据时使用 的端口是随机选择的,唯一的限制是小于1024。怎么知道使用的是哪个端口?此时就得要远程过程调用(Remote Procedure Call 简称RPC)协议来帮忙了。
(2) 什么是RPC(Remote Procedure Call)
因为NFS得功能相当多,每个功能会启动一些相应的程序,这些程序会对应一些端口,由于这些端口是小于1024的随机端口,就会导致客户端无法访问。这个 时候就需要RPC(远程过程调用)服务,RPC最主要的功能就是制定每个NFS功能所对应的端口,(RPC还可以为别的服务指定对应的端口,如NIS等) 并且传递该信息给客户端,让客户端可以连接到正确的端口上,那RPC又是如何知道每个NFS的端口呢?这是因为当服务器在启动NFS时会随机取用数个端 口,并主动的向RPC注册,因此RPC可以知道每个端口对应的NFS功能,然后RPC固定使用port 111来监听客户端的需求并应答客户端正确的端口
注意:启动NFS之前,RPC就要先启动了,否则NFS会无法向RPC注册,另外,RPC若重新启动,原来注册的端口数据会不见,因此RPC重新启动后,它管理的所有程序都需要重新启动以重新向RPC注册
(3)NFS客户端和NFS服务器的访问步骤
>客户端会向服务器端的RPC(port 111)发出NFS文件存储功能的询问请求
>服务器端找到对应的已注册的NFS daemon端口后,会通知客户端
>客户端了解正确的端口后,就可以直接与NFS daemon联机
(4)运行NFS需要启动的RPC daemons
。rpc.nfsd:这个daemon主要功能是管理client是否能够登入主机,还判断登入者的ID
。rpc.mount:这个daemon主要功能是管理NFS的文件系统
。rpc.lockd(非必要) 它主要是解决多个客户端同事尝试写入某个文件时,出现的问题
。rpc.statd(非必要)它是配合rpc.lockd来解决因为多个客户端同时写入文件,导致的文件受损

2:NFS的文件存取权限
因为NFS本身的服务并没有身份认证机制,所以当我们在客户端以某个用户来存取服务器端的文件系统时,服务器会以客户端的用户UID和GID等身份来尝试 读取服务器端的文件系统。这时就产生了一个问题:如果客户端与服务器端的用户身份不一致怎么办,所以就可能会发生几种情况:
>NFS Server/NFS Client刚好有相同的账号与组
此时用户可以直接以那个相同用户的身份来对服务器所提供的文件系统进行存取。
>NFS Server/NFS Client两侧UID相同但用户名不同
此时那个UID相同的账户也可以对服务器端的文件系统进行存取
>NFS Server并没客户端的UID
此时客户端的用户会被压缩成匿名者,且UID会变成65534 这个帐号称之为nobody 在centos里为nfsnobody
>如果用户身份是root
root用户在默认情况下,root的身份会被主动压缩成匿名者
总之,客户端用户能做什么事仅取决于其UID GID
当你满足三个条件时,你才具有W的权限
。用户账号,亦即UID的相关身份
。NFS服务器允许写入的权限
。文件系统确实具有W的权限时

4:NFS Server端的设置
(1)所需软件
NFS主程序:nfs-utils
RPC主程序:portmap
(2)NFS的软件结构
>/etc/exports   //NFS的主要配置文件
>/usr/sbin/exports   //这个命令重新共享/etc/exports变更的目录资源,将NFS Server共享的目录卸载或重新共享,是NFS里比较重要的一个命令
>/usr/sbin/showmount   //在客户端用来查看NFS服务器共享出来的目录资源
>/var/lib/nfs/*tab        //记录NFS的日志 etab记录NFS共享的数据目录    xtab 记录连接到NFS主机的客户端
(3)/etc/exports设置文件的语法与参数
#vi /etc/exports
/tmp                          192.168.76.0/24(ro)        localhost(rw)          *.ztgame.com(ro,sync)
//共享目录                 共享网段                         也可用主机名          或者域名+通配符
权限方面:(就是小括号内的参数)常见参数有:
。rw:read-write,可读写的权限
。ro:read-only,只读的权限
。sync:将数据同步写入到内存和硬盘中
。async:数据会先暂存在内存中,而非直接写入硬盘
。no_root_squash:登入NFS主机使用共享目录权限的用户,如果是root身份,那么对于共享目录来说,它就具有root的权限
。root_squash:登入NFS主机使用共享目录权限的用户,如果是root身份,它会被压缩成匿名用户
。all_squash:不论登入NFS的用户身份如何,都会被压缩成匿名用户
。anonuid:设置匿名用户的UID值
。anongid:设置匿名用户的GID值
实例一:让root用户保有root的权限
#vi /etc/exports
/tmp     *(rw,no_root_squash)
实例二:同一目录正对不同范围开放不同的权限
#vi /etc/exports
/tmp   *(rw,no_root_squash)
/home/public   192.168.76.0/24(rw)    *(ro)
实例三:仅给某个单一主机使用的目录设置
#vi /etc/exports
/tmp   *(rw,no_root_squash)
/home/public   192.168.76.0/24(rw)    *(ro)
/home/test    192.168.76.132(rw)
实例四:开放匿名登入的情况
#vi /etc/exports
/tmp   *(rw,no_root_squash)
/home/public   192.168.76.0/24(rw)    *(ro)
/home/test    192.168.76.132(rw)
/home/linux   *.com(rw,all_squash,anonuid=40,anongid=40)
(4)启动NFS
#/etc/init.d/portmap start
#/etc/init.d/nfs start
#/etc/init.d/nfslok stat   //保持数据一致性
#rpcinfo ip Master.com   //查看PRC服务注册情况,查看NFS是否正常
(5)NFS联机观察
#showmount -e Master.com //查看本机的NFS共享情况
#tail /var/lib/nfs/etab //关于NFS的共享就权限的说明
如果重新设置了/etc/exports后 我们每次都需要重启NFS服务,而重启NFS服务,就要向RPC注册,这个时候我们可以用exportsfs命令来帮忙
#exportsfs -arv   //重新挂载
a:全部挂载文件内的设置
r:重新挂载/etc/exports里的设置
u:卸载某一个目录
v:在exports的时候,将目录共享出来
#exports -auv //全部卸载

5:NFS的安全性
(1)利用iptables做大范围联机的限制
#iptable -A INPUT -s 192.168.76.0 -p tcp --dport 111 -j ACCEPT
//开放76网段的111端口 这样客户端可以连接到PRC服务,从而可以访问NFS服务器
(2)利用TCP Wrappers限制
#vi /etc/hosts.allow
mountd:192.168.76.0/255.255.255.0
#vi /etc/hosts.deny
mountd:ALL
//为什么是mountd,用rpcinfo查看 你就会知道为什么用Mountd
(3)NFS服务器关机前的注意事项
当NFS使用这个RPC在Client连接在服务器时,需先关闭NFS服务,否则关机会异常的缓慢!

4:NFS客户端的设置
(1)远程NFS服务器的挂载
>确认本地端已启动了portmap服务
>扫描NFS服务器共享的目录有哪些,并了解我们是否可以使用
>在本地端建立预计要挂载的挂载点目录(mkdir)
>利用mount将远程主机直接挂载在相关目录
#/etc/init.d/portmap start
#/etc/init.d/nfslock     start   //如果服务器端启动了nfslock的话 则客户端需要启这个服务
#showmount -e Master.com
#mkdir -p /data/nfs/public
#mount -t nfs 192.168.76.131:/home/pubilc /data/nfs/pubilc
#umount /data/nfs/public
(2)客户端可处理的挂载参数与开机挂载
suid,nosuid:当挂载的分区上有任何SUID的程序时,只要使用nosuid就能取消SUID的功能。
rw,ro:指定是否可读写
dev,nodev:是否可以保留设备文件的特殊功能,一般只有/dev/才会有特殊够功能
exec,noexec:是否具有可执行binary file的权限,如果挂载的仅是数据,没有可执行文件,则可以noexec
user,nouser:时候允许用户进行文件的挂载与卸载,如果要保护文件系统,最好不要
auto,noauto:这个auto指的是"mount -a "时会不会被挂载的项目,如果不需要这个partion则可以noauto
如下例:
#mount -t nfs -o nosuid,noexec,nodev,rw 192.168.76.131:/home/public /data/nfs/public
这样一来,挂载的文件系统就只能作为数据存取只用,相对于客户端而言,这样就相对安全一些,所以,nosuid,noexec,nodev这些参数要牢记
还有一些特殊的挂载参数,如下:
fg,bg:这个是指mount时命令在前台运行还是在后台,在前台时如果mount不上的话,它会等到Mount time out的,而bg则是在后台运行,不会影响你前台的程序操作
soft,hard:这里是指的一个RPC呼叫的问题,如果用hard,则与服务器持续呼叫,如果是soft则是重复呼叫,有一个时间段的间隔,这样系统的延迟不会那么明显
intr:这个结合hard使用,可以随时中断呼叫
rsize,wsize:读出(rsize)和写入(wsize)的区块大小,如果内存够大,这个值可以调大,但不要超过网络的传输能力
#mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 192.168.76.131:/home/public /data/nfs/public
使用NFS开机挂载
方法一:vi /etc/rc.d/rc.local
方法二:vi /etc/fstab
192.168.76.131:/home/public /data/nfs/public nfs nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768   0 0
(3)无法挂载的原因分析
>用户或客户端身份权限不符
>服务器或者客户端服务未启动
>被防火墙当掉了
(4)自动挂载autofs的使用
起因:因为NFS服务器与客户端的联机或许可能不会永远存在,而RPC这个服务有挺讨厌,在挂载了NFS服务器之后,任何一方离线都可能造成另外一方老是在等待超时,而且,挂载的NFS文件系统又不可能常常被使用,所以换个角度想这个问题
。可不可以让客户端在用到NFS文件系统的时候才挂载?并且不需要事先建立挂载点?
。另外,当NFS文件系统使用完毕后,可不可以让NFS自动卸载,以避免可能的RPC错误?
好主意,在现在的Linux环境下这是可以实现的想法,方法就是用autofs这个服务
实现方法:
首先定义/etc/auto.master 在这里定义好你的最上层目录,以及目录下对应的字母的挂载点文件/etc/auto.nfs
然后编辑你定义的auto.nfs 做好相应的挂载点和服务器目录的对应
#vi /etc/auto.master
/home/nfs    /etc/auto.nfs
#mkdir /home/nfs
#vi /etc/auto.nfs
pubilc -rw,bg,soft     192.168.76.131:/home/public
testing -rw,bg,soft     192.168.76.131:/home/test
temp    -rw,bg,soft      192.168.76.131:/tmp
#/etc/init.d/autofs start
这样就可以了,如果你现在使用Mount命令,你看不到任何nfs的挂载 而当你cd /home/nfs/public后 在使用mount你会发现多了一条Mount 没错 这个时候/pubilc会自动挂载的 当你一段时间不去使用该目录,这个目录会自动被卸载的。大家可以去尝试。到时候会就这个服务和NIS做一个整合的实验!!

================

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论