1. 程式人生 > >兄弟連Linux(二十三)--NFS服務

兄弟連Linux(二十三)--NFS服務

1NFS簡介

1.1 什麼是NFS

       NFS(Network File System)      配置簡單許可權不太明確

              NFS可以讓客戶端把伺服器的共享目錄掛載到本機使用,就想使用本機分割槽一樣,使用非常方便。

1.2 RPC(遠端呼叫)服務

       NFC是被RPC服務管理的,所以必須安裝RPC的主程式rpcbind

1.3 NFS埠

       NFS埠:2049

       RPC埠:111

       NFS daemon埠:隨機

1.4 和其他檔案伺服器對比(SFU)

服務名稱

適用範圍

伺服器端

客戶端

侷限性

FTP

內網和公網

Windows、Linux

Windows、Linux

無法直接在伺服器端修改資料

Samba

內網

Windows、Linux

Windows、Linux

只能在內網使用

NFS

內網和公網

Linux

Linux(Windows)

客戶端需要掛載使用,對普通使用者有一定的技術要求

2NFS許可權說明

2.1 許可權說明

       Linux系統目錄許可權會生效

       NFS服務共享許可權也會生效

2.2 使用者身份對映(系統許可權)

       NFS沒有使用者登入認證機制,所以客戶端登入到伺服器後,會把客戶端的身份對映到伺服器端,就會出現四種可能。

2.3 第一種可能

client和server上剛好有相同的賬號和使用者組(使用者名稱和UID都要相同)

              client上使用者可以再server上按照使用者許可權使用檔案

2.4 第二種可能

       當client和server上擁有相同的UID,但是使用者名稱不同

              假設client上有使用者aa(UID:500),server上有使用者bb(UID:500)。在client在使用server共享目錄是,身份識別為bb(因為LInxu許可權繫結在UID上)

              此種情況儘量避免出現,容易邏輯混亂

2.5 第三種可能

       server上沒有client的UID

              client使用者訪問server時,server上沒有此UID,則把此使用者自動轉變為nfsnobody(UID:65534)使用者

2.6 第四種可能

       client上是root使用共享

              預設把roor也轉變為nfsnobody,伺服器端可以修改配置檔案,允許root訪問nfs伺服器

3NFS伺服器端設定

3.1 伺服器端安裝

       預設已安裝,如需手動安裝

              NFS主程式:nfs-utils

              RPC主程式:rpcbind(舊版本 portmap)

3.2 相關檔案

       配置檔案       /etc/exports

3.3 伺服器端管理

       預設已啟動,如需手動啟動

              $ service nfs start

              $ service rpcbind start

3.4 守護程序

       $ ps aux | grep -E “nfs|rpc”

              rpc.rquotad     NFS配額

              rpc.mountd     處理客戶端掛載

              nfsd               NFS守護程序

              rpcbind          RPC守護程序

3.5 RPC服務註冊情況

       $ rpcinfo –p IP或主機名

4NFS伺服器端配置檔案

4.1 配置檔案

       /etc/exports

              共享目錄 客戶端(許可權)

4.2 可識別的客戶端

       指定IP                 192.168.44.4

       指定網段              192.168.44.0/24 192.168.44.0/255.255.255.0

       指定主機名           www.itxdl.cn

       所有主機              *

4.3 常用許可權

       rw                        讀寫

       ro                         只讀

all_squash              不論登入是誰,都壓縮為匿名使用者nfsnobody

       root_squash           如果登入的是root,壓縮為nfsnobody

       no_root_squash      允許root身份登入,不推薦

       anonuid                 把所有的登入使用者,不再壓縮為nfsnobody使用者,而是壓縮為指定uid使用者

       sync                      將資料同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證資料的一致性

       async                    將資料先儲存在記憶體緩衝區中,必要時才寫入磁碟

4.4 舉例1

       任何人可以訪問,允許root訪問

       $ vi /etc/exports

              /home/test *(rw,no_root_squash)

4.5 舉例2

       同時共享多個目錄

       $ vi /etc/exports

              /home/test 192.168.44.3(rw,no_root_squash) *(ro)

              /home/soft 192.168.44.0/24(rw)

4.6 舉例3

       匿名使用者訪問

       $ vi /etc/exports

              /home/soft 192.168.44.0/24(rw,all_squash,anonuid=600)

4.7 常用命令

       $ exportfs 選項

              -a    按照配置檔案掛載/解除安裝所有目錄

-r     重新掛載

-u    解除安裝

-v    顯示詳細資訊

4.8 exportfs舉例

       $ exportfs -arv              重新掛載所有目錄,不用重啟NFS服務

       $ exportfs -auv       全部解除安裝所有目錄

4.9 showmount命令

       shoumount檢視共享目錄

              $ shoumount –e IP或主機名

                     -e    產看某個主機的共享目錄

5NFS客戶端使用

5.1 客戶端需要啟動的服務

       需要啟動rpcbind,預設已經啟動

       手工啟動命令

              $ service rpcbind start

5.2 檢視伺服器端共享目錄

       $ showmount -e 192.168.44.3              指定伺服器端IP即可

5.3 把伺服器共享目錄掛載到本地

       $ mkdir /home/client            建立掛載點

       $ mount –t nfs 192.168.44.3:/home/soft /home/client         掛在到本地使用

       $ mount                檢視掛載

5.4 解除安裝

       $ umount /home/client

5.5 開機自動掛載

       $ vi /etc/fstab 192.168.44.2:/home/test /home/client nfs defaults 0 0 

6、許可權實驗

6.1 第一種可能

       client和server上剛好有相同的賬號和使用者組(使用者組名和UID都要相同)

              client上使用者可以再server上按照使用者許可權使用檔案

伺服器

              $ useradd –u 600 test1

              $ passwd test1

客戶端

              一樣的使用者與UID

              $ su - test1

              $ cd /home/test

              $ touch cde

              $ ll cde

                     -rw-rw-r--1 test1 test1 0 11月 14 2016 cde

6.2 第二種可能

       當client和server上擁有相同過的UID,但是使用者民不同

              假設client上有使用者aa(UID:500),server上有使用者bb(UID:500)。在client在使用server共享目錄時,身份識別為bb(因為Linux許可權繫結在UID上)

              此種情況儘量避免出現,容易邏輯混亂

伺服器端

              使用者名稱:test1 UID:600

客戶端

              $ useradd -u 600 user1

              $ su - user1

              $ cd /home/test

              $ touch def

              $ ll def

                     -rw-rw-r-- 1 user1 user1 0 11月 14 2016 def

伺服器端

              $ ll /tmp/def

                     -rw-rw-r-- 1 test1 test1 0 11月14 05:40 /tmp/def

6.3 第三種可能

       server上沒有client的UID

              client使用者訪問server時,server上沒有此UID,則把此使用者自動轉變為nfsnobody(UID:65534)使用者

伺服器端

              沒有UID為700的使用者

客戶端

              $ useradd -u 700 test2

              $ touch qwe

              $ ll qwe

                     -rw-rw-r-- 1 nobody nobody 0 11月14 2016 qwe

6.4 第四種可能

       client上是root使用共享

              預設把root也轉換為nfsnobody。伺服器端可以修改配置檔案,允許root訪問nfs伺服器

伺服器端

              不允許root訪問

客戶端

              $ cd /home/test

              $ touch asd

              $ ll asd

                     -rw-r--r-- 1 nfsnobody nfsnobody 0 1月14 2016 asd

伺服器端

              允許root訪問

              $ vi /etc/exports

                     /tmp 192.168.44.4(rw,no_root_squash)

              $ exportfs -auv

              $ exportfs -arv

客戶端

              $ cd /home/test

              $ touch zxc

              $ ll zxc

                     -rw-r--r-- 1 root root 0 11月14 2016 zxc