天天看點

Linux NFS伺服器配置

NFS伺服器端配置

伺服器端配置

1 建立共享目錄

# mkdir /home/share

# chown nobody.nogroup /home/share

2 建立或修改/etc/exports 配置檔案

這個檔案的内容非常簡單,每一行由抛出路徑,客戶名清單以及每個客戶名後緊跟的通路選項構成:

[共享的目錄] [主機名或IP(參數,參數)]

其中參數是可選的,當不指定參數時,nfs将使用預設選項。預設的共享選項是 sync,ro,root_squash,no_delay。

當主機名或IP位址為空時,則代表共享給任意客戶機提供服務。

當将同一目錄共享給多個客戶機,但對每個客戶機提供的權限不同時,可以這樣:

[共享的目錄] [主機名1或IP1(參數1,參數2)] [主機名2或IP2(參數3,參數4)]

下面是一些NFS共享的常用參數:

ro 隻讀通路

rw 讀寫通路

sync 所有資料在請求時寫入共享

async NFS在寫入資料前可以相應請求

secure NFS通過1024以下的安全TCP/IP端口發送

insecure NFS通過1024以上的端口發送

wdelay 如果多個使用者要寫入NFS目錄,則歸組寫入(預設)

no_wdelay 如果多個使用者要寫入NFS目錄,則立即寫入,當使用async時,無需此設定。

hide 在NFS共享目錄中不共享其子目錄

no_hide 共享NFS目錄的子目錄

subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(預設)

no_subtree_check 和上面相對,不檢查父目錄權限

all_squash 共享檔案的UID和GID映射匿名使用者anonymous,适合公用目錄。

no_all_squash 保留共享檔案的UID和GID(預設)

root_squash root使用者的所有請求映射成如anonymous使用者一樣的權限(預設)

no_root_squas root使用者具有根目錄的完全管理通路權限

anonuid=xxx 指定NFS伺服器/etc/passwd檔案中匿名使用者的UID

anongid=xxx 指定NFS伺服器/etc/passwd檔案中匿名使用者的GID

配置檔案/etc/exports内容如下:

$ cat /etc/exports

/home/share 192.168.102.15(rw,sync) *(ro)

配置說明: 對192.168.102.15賦予讀寫權限,其他機器僅有隻讀權限。

3 Iptables 防火牆

如果我們的NFS伺服器在防火牆後邊,則需要在防火強政策中加入如下政策:

-A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT

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

NFS:Network File System,linux中共享檔案的服務。

使用NFS需要啟用RPC(remoteprocedure call),RPC可以指定每個NFS功能所對應的端口号,重新開機RPC後,RPC所管理的所有NFS功能服務都需重新向RPC注冊。

設定NFS需要安裝nfs-utils和portmap程式,使用rpm –q可以檢視是否安裝

Nfs-utils:提供rpc.nfsd和rpc.mountd兩個daemon與其他document說明檔案。

rpc.nfsd:管理client是否能夠登入主機,及對登入者ID的辨識。

rpc.mountd:管理NFS檔案系統,讀取/etc/exports對比client取得相應的權限。

Portmap:端口映射;在啟動rpc之前做好端口映射工作。

NFS的配置檔案有兩個:

/etc/exports:NFS配置檔案

/var/lib/nfs/*tab:NFS伺服器日志放置路徑;etab記錄共享出來的目錄完整權限設定值;xtab記錄曾經連接配接到此NFS主機的相關用戶端資料

兩個指令:

/usr/sbin/exportfs:維護NFS共享資源;重新共享/etc/exports變更目錄或将NFSserver共享目錄解除安裝或重新共享

/usr/sbin/showmount:在用戶端檢視NFS伺服器共享出來的目錄資源

/etc/exports配置檔案

首先需要手動編輯/etc/exports配置檔案

共享目錄必須使用絕對路徑,權限部分依照不同的權限共享給不同的主機,括号内是設定權限參數的位置,權限不止一個時,使用,隔開,主機名和括号連在一起。

主機名設定可以使用網段:192.168.1.0/24或完整IP:192.168.1.23也可以使用主機名稱,但此主機名稱需要存在于/etc/hosts中或使用DNS可以找到,找到IP即可,主機名支援通配符,如*?

/mnt/sda4/share/a      192.168.23.129(rw)

設定共享目錄/mnt/sda4/share/a,僅192.168.23.129主機允許通路此共享目錄,具有讀寫權限

/mnt/sda4/share/b      192.168.23.129(rw) *(ro)

設定共享目錄/mnt/sda4/share/b,192.168.23.129可以讀寫該共享目錄,其他主機隻可以讀取該共享目錄

/mnt/sda4/share/c       192.168.23.129(no_root_squash)

設定共享目錄/mnt/sda4/share/c,僅192.168.23.129可以通路和讀寫,root登入時擁有root權限

/mnt/sda4/share/d      192.168.23.0/24(rw)

設定共享目錄/mnt/sda4/share/d,僅有192.168.23.0/24網段的主機才可通路和讀寫此目錄檔案

/mnt/sda4/share/e      *(rw,all_squash,anonuid=500,anongid=500)

設定共享目錄/mnt/sda4/share/e,所有主機都允許通路此共享目錄,具有讀寫權限,但他們通路該共享目錄時,已将其UID、GID設定成500。NFSserver主機中UID、GID=500的權限已經設定好

權限參數說明如下:

Rw:read-write可讀寫的權限

Ro:read-only隻讀權限

no_root_squash:登入NFS主機使用共享目錄的使用者,如果是使用者root,對于此共享目錄具有root權限,不建議使用。

root_squash:登入NFS主機使用共享目錄的使用者,如果是使用者root,此使用者權限将被壓縮為匿名使用者,其UID和GID都會被壓縮為nobody(nfsnobody)系統賬号的身份。

all_squash:不論登入NFS的使用者身份為何,其身份都被轉換成為匿名使用者,即nobody。

Anonuid:anonymous;即nobody,可以自行設定此UID值,但此UID必須存在于/etc/passwd中。

Anongid:同anonuid,變成group ID即可。

Sync:資料同步寫入到記憶體與硬碟中

Async:資料先暫存于記憶體中,而非直接寫入硬碟

權限說明:

1.NFS server和NFS client具有相同的UID和賬号

如果NFSserver和NFSclient具有相同共享檔案賬号和相同UID,用戶端登入NFSserver時,就會擁有/etc/exports設定的權限

2.NFS server和NFS client具有不同的賬号

如果NFSclient不擁有NFSserver共享檔案賬号,或NFSclient的賬号在NFSserver不存在,是否可以讀寫共享目錄,需要檢視NFSserver的權限而定,其身份會變為匿名使用者nobody

3.NFS client的身份為root

預設情況下,用戶端的root身份會被壓縮成匿名使用者nobody

啟動NFS

啟動NFS隻需啟動portmap和NFS服務即可。如果需要啟動資料一緻性檢查,則需啟動nfslock服務。

使用netstat–tnlu可以檢視nfs開放了哪些端口。Portmap的端口為111,nfs的端口為2049

[root@localhost share]# rpcinfo -p

程式       版本 協定   端口               服務名稱

100000    2   tcp   111        portmapper

100000    2   udp  111        portmapper

100024    1   udp  695        status

100003    2   udp  2049     nfs

100021    1   udp   46017  nlockmgr

………………………………………………

如果rpcinfo–p的資料無法輸出,表示注冊的資料有問題,重新啟動portmap和nfs即可。

client檢視Server有提供哪些NFS服務,可以使用showmount

# showmount -e  顯示某台主機的/etc/exports所共享的目錄資料

# showmount -a  顯示目前主機與用戶端NFS聯機共享狀态

# showmount -e

Export list for localhost.localdomain:

/mnt/sda4/share/e *

/mnt/sda4/share/d 192.168.23.0/24

/mnt/sda4/share/c 192.168.23.129

/mnt/sda4/share/b (everyone)

/mnt/sda4/share/a 192.168.23.129

需要掃描某台主機提供的NFS共享目錄,使用showmount–e ip(hostname)即可

檢視/var/lib/nfs/etab可以檢視NFSserver目錄權限設定情況

# cat /var/lib/nfs/etab

/mnt/sda4/share/a      192.168.23.129(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

…………………………………………………………

如果修改/etc/exports檔案之後無需重新開機nfs,隻需重新掃瞄一次檔案/etc/exports,并且重新将設定加載即可;

Exportfs:

-a:全部挂載(或解除安裝)/etc/exports 檔案内的設定。

-r:重新挂載/etc/exports裡的設定,同時同步更新/etc/exports及/var/lib/nfs/xtab的内容。

-u:解除安裝某一目錄。

-v:在export時,将共享的目錄顯示在螢幕上。

重新挂載/etc/exports的設定:#exportfs–arv

全部解除安裝/etc/exports的設定:#exportfs–auv

用戶端配置:

# mkdir -p /mnt/share/client/b

# mount -t nfs192.168.23.128:/mnt/sda4/share/b /mnt/share/client/b

# df

檔案系統                                                             1K-塊      已用    可用        已用%   挂載點

/dev/sda2                                                            5952284    3158868  2486176 56%               /

/dev/sda1                                                            101086     11481   84386                    12%      /boot

tmpfs                                                    127720     0          127720    0%        /dev/shm

192.168.23.128:/mnt/sda4/share/b   3905632   73408          3633824   2%       /mnt/share/client/b

設定成開機啟動挂載

修改/etc/fstab檔案

192.168.23.128:/mnt/sda4/share/e  /mnt/share/client/e  nfs  defaults,rw   0 0

此外可以使用autofs設定用戶端需要時自動挂載,不需要時若幹分鐘後自動解除安裝,還可在/etc/fstab或用戶端手動挂載時設定一些參數,友善用戶端使用。

繼續閱讀