NFS服务的搭建

基础知识篇node

  NFS是Network File System的简称,它的目的想让不一样的机器,不一样的操做系统能够彼此共享数据文件。web

 一、它须要启动PRC+NFS服务,需首先启动RPC,而后启动NFSvim

 二、RPC的做用是将服务器中注册的NFS的port number通知给clientbash

 三、NFS的端口号通常为2049,但不肯定,缘由是文件系统较为复杂。它用来传输的端口是随机选择且小于1024服务器

1、NFS的文件访问权限
app

一、NFS Server/NFS Client恰好有相同的帐号与用户async

  此时用户能够直接以zj(假定为客户端的普通帐号)的身份访问服务器所提供的共享文件系统tcp

二、NFS Server的501这个UID帐号对应为yf(假定为服务端的一个普通帐号)ide

  若是客户端的ql(假定为客户端的另外一个普通帐号)刚好对应服务器端的yf,则客户端的ql能够访问服务器端的yf,只由于二者拥有相同的UID。但用户名不相同,因此ql只会以匿名的方式访问yf(可参考补充部分的内容)。提到了这里你可能会想到,那root的UID不都为0吗?这样一来客户端的权限不是很大。然而结果不是这样的。服务器端默认会将客户端的root用户压缩为匿名用户ui

三、若是用户身份是root

  在默认的状况下,root的身份会被主动压缩成为匿名用户

四、NFS Server并无501这个UID

  此种状况的后果是服务器端将UID为501的这个用户压缩为匿名用户,以匿名用户的身份访问服务器

具有了以上四种条件后,还应该具有如下二种条件

一、NFS服务器已经开放可写入的权限(与/etc/exports文件有关)

二、实际的文件权限具备可写入(w)的权限

总结下来无非此三句话

一、UID与帐户的相关性

二、NFS服务器容许写入的权限

三、文件系统确实具备w的权限,此时你才具备该文件的写入权限

2、/etc/exports配置文件的语法与参数

值得一提的是NFS会直接使用到内核功能,因此内核必需要支持NFS才行。使用uname -r查看其版本

配置文件权限参数

sync           表明数据会同步写入到内存与硬盘中,此种方式速度过慢

async          表明数据会先暂时存放在内存中而后保存在硬盘上,此种方式速度较快

no_root_squash    不将客户端中的root用户压缩为nfsnobody(匿名用户)

root_squash      将客户端中的root用户压缩为nfsnobody(匿名用户)

all_squash       不管是什么用户都将被压缩成为nfsnobody(匿名用户)

anonuid         指的是UID,能够自行指定该值,但必须存在

anongid         指的是UID,能够自行指定该值,但必须存在

3、mount命令主要参数

suid/nosuid    当挂载的分区上面有任何SUID的二进制程序时,只要使用nosuid就可以取消其功能

rw/ro        提供客户端可写/可读的权限

dev/nodev      是否能够保留设备文件的特殊功能

exec/noexec     是否具备执行二进制文件的权限,视具体的状况而定

user/nouser     是否容许用户进行文件的挂载与卸载操做,最好不容许

auto/noauto     指的是mount -a时,会不会被挂载到项目

注:加粗为默认值

4、额外的NFS挂载功能

fg/bg:指定挂载的行为为fg(前台)仍是bg(后台)

soft/hard :当某台主机脱机时RPC的呼叫方式soft(重复呼叫)、hard(持续呼叫)

intr:它与上面的hard连用,加此参数,当RPC持续呼叫时,该次呼叫是能够被中断的

rsize/wsize :rsize(读出)与wsize(写入)的区块大小,它影响着C/S传输数据的缓冲记忆容易(二者的值均为1024)

注:加粗为默认值

5、没法挂载的缘由分析

一、客户端的主机名或IP网段不容许使用

二、服务器或客户端某些服务未启动

三、被防火墙拦截

实验配置篇

基本配置:

一、服务端的配置
[root@web1 ~]#mkdir /shared
[root@web1 ~]#vim /etc/exports
/shared 172.16.0.11(rw)
[root@web1 ~]#service nfs restart
[root@web1 ~]#service iptables stop
[root@web1 ~]#setenforce 0
二、客户端的配置
[root@web2 ~]#mkdir /mnt/nfs
[root@web2 ~]#service iptables stop
[root@web2 ~]#setenforce 0
[root@web2 ~]#mount -t nfs 172.16.0.10:/shared /mnt/nfs
[root@web2 ~]# df
Filesystem          1K-blocks    Used    Available  Use%  Mounted on
172.16.0.10:/shared    10190208     470144   9195776    5%   /mnt/nfs
三、结果验证
[root@web1 ~]#cp /etc/inittab /shared
[root@web2 ~]#ls /mnt/nfs
inittab

匿名访问的状况:

gnnt.web1.com:服务器
gnnt.web2.com:客户端
一、开放匿名访问的状况
[root@web1 ~]#groupadd -g 45 nfsanon
[root@web1 ~]#useradd -u 45 -g nfsanon nfsanon
[root@web1 ~]#mkdir /public
[root@web1 ~]#setfacl -m u:nfsanon:rwx /public
[root@web1 ~]#getfacl /public
getfacl: Removing leading '/' from absolute path names
# file: public
# owner: root
# group: root
user::rwx
user:nfsanon:rwx
group::r-x
mask::rwx
other::r-x
[root@web1 ~]#vim /etc/exports
/public *.gnnt.com(rw,all_squash,anonuid=45,anongid=45)
[root@web1 ~]#exportfs -arv              #保存配置文件,不用重启也可生效
#-a:所有挂载或卸载/etc/exports文件中的设置
#-r:从新挂载/etc/exports里面的设置,此外,也同步更新/etc/exports及/var/lib/nfs/xtab内容
#-v:在export的时候,将共享的目录显示到屏幕上
#-u:卸载某一目录
二、显示exports共享信息
[root@web1 ~]# showmount -e localhost   #显示exports所共享的目录数据,经常使用于客户端
Export list for localhost:
/public *.gnnt.com
/tmp    172.16.0.11
/shared 172.16.0.11
三、查看etab文件
[root@web1 ~]# cat /var/lib/nfs/etab
/tmp172.16.0.11(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
/shared172.16.0.11(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
/public*.gnnt.com(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=45,anongid=45)
四、查看NFS开启哪些端口
[root@web1 ~]# netstat -tulnp|grep -E '(rpc|nfs)'
五、查看本机rpc服务注册状况 
[root@web1 ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  53456  status
    100024    1   tcp  51270  status
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  60789  mountd
    100005    1   tcp  52694  mountd
    100005    2   udp  48954  mountd
    100005    2   tcp  53781  mountd
    100005    3   udp  40201  mountd
    100005    3   tcp  34867  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  35388  nlockmgr
    100021    3   udp  35388  nlockmgr
    100021    4   udp  35388  nlockmgr
    100021    1   tcp  58204  nlockmgr
    100021    3   tcp  58204  nlockmgr
    100021    4   tcp  58204  nlockmgr
六、检查相关软件版本信息(仅查看TCP数据包)
[root@web1 ~]# rpcinfo -t localhost nfs
program 100003 version 2 ready and waiting
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting

服务器端与客户端UID不一致时的结果:

[root@web1 ~]# cat /etc/passwd|grep yf
yf:x:500:500:yf:/home/yf:/bin/bash
[root@web2 ~]# cat /etc/passwd|grep ql
ql:x:500:500::/home/ql:/bin/bash
[root@web2 ~]# ll /mnt/nfs1
total 8
-rwxr-xr-x. 1 nobody nobody 6878 Aug 15 16:54 nfs    
#由于使用的root用户,默认状况下将客户端的root用户压缩为匿名用户
[root@web2 ~]# su - ql
[ql@web2 ~]$ ll /mnt/nfs1
total 8
-rwxr-xr-x. 1 nobody nobody 6878 Aug 15 16:54 nfs    
#UID同为500的不是同一个用户,因此将ql压缩为匿名用户






至此,本文档已经结束,文档中不免有不尽人意之处,但愿各位可以给出宝贵的建议,谢谢!


紫禁之巅

2015年8月28日 17:50

相关文章
相关标签/搜索