NFS全稱"網絡檔案系統",主要配置件/etc/exports和etc/sysconfig/nfs...NFS能使不同計算機之間能通過網絡進行檔案共享的一種網絡協定,多用于UNIX/Linux網絡系統中,使用NFS既可以提高資源的使用率,又可以大大節省用戶端本地硬碟的空間,因為你根本不需要将所有檔案複制到本地硬碟中,同時也便于對資源進行集中管理.
雖然NFS可以在網絡中進行檔案共享,但是NFS協定本身并沒有提供資料傳輸的功能,它必須借助于遠端過程調用(RPC)協定來實作資料傳輸.RPC定義了一種程序間通過網絡進行互動通信的機制,它允許用戶端程序通過網絡向遠端伺服器上的服務程序請求服務,而不需要了解底層通信協定細節.可以将NFS伺服器看成是RPC伺服器,而将NFS用戶端看成RPC用戶端,這樣NFS伺服器和NFS用戶端之間就可以通過RPC協定協定進行資料傳輸...
要使用NFS伺服器,至少有三個守護程序在行,rpc.nfsd rpc.mount portmap 還有一個守護程序lockd,用來鎖定使用者權限的..
rpc.nfsd 他是基本的NFS守護程序,主要功能是管理用戶端是否能夠登入伺服器..
rpc.mount 他是RPC安裝守護程序,主要功能是管理NFS的檔案系統.當用戶端順利地通過了rpc.nsfd登入NFS伺服器後,在使用NFS伺服器所提供的檔案前,還必須通過檔案使用權限的驗證.rpc.mountd會讀取NFS的配置檔案/etc/exports來對比用戶端權限...portmap 主要功能是進行端口映射工作,當用戶端嘗試連接配接并使用RPC伺服器提供服務(如NFS服務)時,portmap會将所管理的與服務對應的端口号提供給用戶端,進而使用戶端可以通過該端口向伺服器請求服務...要主意的是portmap隻用于RPC,但它對NFS服務來說是必不可少的.portmap沒有運作,NFS用戶端就無法查找從NFS伺服器中共享的目錄...這個一定要記住...
使用者映射選項:
all_squash 将遠端通路的所有使用者及屬主和屬組都映射為匿名使用者和使用者組,一般均為nfsnobody....
no_all_squash 不将遠端通路的所有使用者及屬組都映射為匿名使用者...
root_squash 将root使用者及所屬組都映射為匿名使用者(預設設定)
no_root_squash 不将root使用者及屬組映射為匿名使用者.
anonuid=xxx 将遠端通路的所有使用者都映射為匿名使用者,并制定該匿名使用者賬為本地使用者(UID=xxx)
anongid=xxx 将遠端通路的所有使用者組都映射為匿名使用者組賬戶,并制定該匿名組賬戶為本地使用者組賬戶(GID=xxx)
常用其他選項.
secure 限制用戶端隻能從小于1024的TCP/IP端口連接配接NFS伺服器(預設設定)
insecure 允許用戶端從大于1024的TCP/IP端口連接配接NFS伺服器.
sync 将資料同步寫入記憶體緩沖區于磁盤中,雖然這樣做效率很低,但可以保證資料的一緻性...
async 将資料先儲存在記憶體緩沖區,必要時才寫入磁盤..
wdelay 檢查是否有相關的寫操作,如果有則将這些寫操作一起執行,這樣可提高效率..(預設設定)..
no_wdelay 若有寫操作,則立即執行,應與sync配合使用..
subtree_check 若輸出目錄時一個子目錄,則NFS Server将檢查其父目錄的權限(預設設定)..
no_subtree_check 即使輸出目錄是一個子目錄,NFS Server也不檢查其父目錄的權限,這樣做客提高效率...
下面我們來配置NFS服務,我的SERVER IP:92.168.0.195..CLIENT IP:192.168.0.197先的安裝一個名為nfs-utils和另一個為portmap兩個包,預設情況下Redhat安裝了這兩
個包...使用下面指令檢視是否安裝了這兩個包....
#rpm -qa |grep nfs-utils
#rpm -qa |grep portmap
我這已經安裝了,就不再示範怎麼去裝了,然後我們建立四個目錄....
#mkdir -p /var/{test,pub,wendy,natasha}
#cd /var/test;touch a.txt b.txt;ls -l
-rw-r--r-- 1 root root 0 Mar 4 22:15 a.txt
-rw-r--r-- 1 root root 0 Mar 3 22:15 b.txt
#vim /etc/exports
/var/test 192.168.0.197(rw,async)
/var/pub *(ro)
/var/wendy 192.168.1.0/24(ro,no_root_squash)
/var/natasha *.zzu.com(rw,all_squash,sync,no_wdelay)
解說:/var/test目錄可供192.168.0.197通路,資料異步寫入磁盤...
/var/pub目錄任何網段的客戶機都可以通路,且具有隻讀的權限.
/var/wendy目錄隻允許192.168.1.0網段機器通路,且具隻讀權限.并且不将root使用者映射到匿名使用者..
/var/nastasha目錄允許.*zzu.com中的所有客戶機通路,且具備讀寫權限,并且将所有使用者及所屬的組都映射為nfsnobody,資料同步寫入磁盤,如果有寫入操作,立即執行...
然後重新開機服務...
#service nfs restart
#service portmap restart
檢視服務的狀态...
#service nfs status
nfsd (pid 5126 5125 5124 5123 5122 5121 5120 5119) is running...
rpc.rquotad (pid 5114) is running...
#service portmap status
portmap (pid 3211) is running...
其實每次修改了配置檔案我們可以不重新開機動服務,讓其重新讀取一下配置檔案使用下面的指令...
#exportfs -r (重新讀取所有檔案系統,相當于重新開機服務)
#exportfs -u (關閉所有已挂載的檔案系統)
#exportfs -v (重新開機服務後用此指令可檢視配置檔案中的資訊)
#exportfs -au(關閉所有的要被挂載的檔案系統)
檢視監聽的端口,及其程序..
#rpcninfo -p localhost;netstat -tunlp |grep 2049
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 883 status
100024 1 tcp 886 status
100011 1 udp 823 rquotad
100011 2 udp 823 rquotad
100011 1 tcp 826 rquotad
100011 2 tcp 826 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 34831 nlockmgr
100021 3 udp 34831 nlockmgr
100021 4 udp 34831 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 40888 nlockmgr
100021 3 tcp 40888 nlockmgr
100021 4 tcp 40888 nlockmgr
100005 1 udp 837 mountd
100005 1 tcp 840 mountd
100005 2 udp 837 mountd
100005 2 tcp 840 mountd
100005 3 udp 837 mountd
100005 3 tcp 840 mountd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
檢視本機都有哪些共享目錄..使用
#showmount -e localhost
下面我們進入用戶端先建立一個目錄,執行此指令進行挂載..
#mkdir /mnt/a
#mount -t nfs 192.168.0.195:/var/test/ /mnt/a
#cd /mnt/a;ls -l
-rw-r--r-- 1 root root 0 Mar 3 22:15 a.txt
-rw-r--r-- 1 rootroot 0 Mar 3 22:15 b.txt
我們不能将其這兩個小檔案删除,因為我們沒有給192.168.0.197的no_root_squash,如果給它這個權限,他是可以删掉的,這些我都測試過,預設情況下都是root_squash,伺服器會将其轉換成來賓的賬号...
在伺服器端執行下面的指令,檢視本機有哪些檔案被挂載了...
[root@station18 ~]# showmount -a localhost
All mount points on localhost:
192.168.0.197:/var/test
來做個小測試,在伺服器上建立一個randy的使用者UID為1000,密碼為redhat,在客戶機上建立一個使用者solaris,UID為 1000,密碼redhat
伺服器:
#useradd -u 1000 randy
#passwd randy
客戶機:
#useradd -u 1000 solaris
#passwd solaris
修改伺服器上/var/test/上a.txt和b.txt屬主和屬組都為randy還要修改test目錄的所屬組和屬主位randy
#cd /var/test
#chown -R randy.randy ../test/;ls -l;ls -ld ../test
-rw-r--r-- 1 randy randy 0 Mar 4 07:51 a.txt
-rw-r--r-- 1 randy randy 0 Mar 3 22:15 b.txt
drwxr-xr-x 2 randy randy 4096 Mar 3 23:00 ../test/
在去客戶機從新挂載次檔案,再切換到solaris使用者然後删除看一下是否具備删權限,發現可以删除的...有的人會發現在伺服器上兩檔案屬主屬組都randy,且配置檔案中沒no_root_squash權限,在客戶機上此檔案屬主和屬組solaris,但是客戶機可以将其删除,不可思議吧!那是因為兩使用者的UID一樣,NFS靠UID來識别使用者,隻要雙方UID一樣,對方就能将檔案進行修改.這點大可以看出NFS很不安全的,但是很好用,很多場合也得用到它