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

相關文章
相關標籤/搜索