一、NFS服務(wù)
網(wǎng)絡(luò)文件系統(tǒng)(Network File System,NFS),由SUN公司開發(fā),目前被廣泛應(yīng)用于UNIX和Linux操作系統(tǒng)中。NFS在異構(gòu)系統(tǒng)和設(shè)備之間提供文件和資源共享服務(wù),類似于Windows的磁盤映射,將NFS服務(wù)器中的共享目錄掛載到本地后,就像訪問本地文件一樣訪問和操作遠程文件,從而方便了多臺計算機之間的文件共享和協(xié)作。
如下圖所示,NFS服務(wù)器通過網(wǎng)絡(luò)共享目錄/mnt/public,NFS客戶端將服務(wù)器共享目錄掛載到本地目錄/mnt/nfsdata上,對客戶端來說,訪問網(wǎng)絡(luò)共享目錄就如同訪問本地目錄一樣。
借助NFS服務(wù),協(xié)同工作的NFS客戶端可以將數(shù)據(jù)存儲在NFS服務(wù)器上,比如多個WEB服務(wù)器集群可以利用NFS服務(wù)器共享數(shù)據(jù),既可以實現(xiàn)數(shù)據(jù)的共享,還可以保證數(shù)據(jù)一致。
二、NFS工作原理
2.1 NFS和RPC的關(guān)系
NFS服務(wù)器工作時需要通過遠程過程調(diào)用(Remote Procedure Call 簡稱RPC)服務(wù)來實現(xiàn),RPC服務(wù)本身使用的是TCP和UDP的111端口。
NFS協(xié)議功能復(fù)雜,涉及到文件傳輸、身份驗證、權(quán)限驗證等多個方面,每個功能都需要占用一個端口,然而NFS大都的功能都沒有固定的端口,而是由NFS服務(wù)器隨機選擇的。當NFS啟動后,會向RPC去注冊登記這些端口,RPC服務(wù)記錄每個NFS功能對應(yīng)的端口,并開啟自身的111端口,等待客戶端的請求。
當客戶端請求NFS服務(wù)時,請求會轉(zhuǎn)發(fā)給服務(wù)器上RPC的111端口,RPC服務(wù)會將記錄的NFS的端口返回給客戶端,客戶端獲取到NFS服務(wù)器的端口信息后,就可以與NFS服務(wù)器建立連接傳輸數(shù)據(jù)了。
如下圖所示,說明了NFS和RPC合作為客戶端提供NFS服務(wù)的過程。
(1)服務(wù)器啟動NFS服務(wù)后,向RPC服務(wù)注冊工作端口,RPC負責(zé)登記,并在111端口偵聽請求;
(2)NFS客戶端請求NFS服務(wù)時,內(nèi)核調(diào)用RCP Client,并向服務(wù)器請求NFS的端口信息;
(3)服務(wù)器查詢NFS端口信息,并返回給客戶端;
(4)客戶端內(nèi)核調(diào)用NFS模塊;
(5)NFS客戶端根據(jù)獲取到的端口信息與服務(wù)器端NFS服務(wù)建立連接;
(6)NFS處理連接請求、權(quán)限認證,建立連接。
2.2 NFS服務(wù)的主要進程
1、rpc.nfsd
nfs的主要進程,用于響應(yīng)客戶端的連接請求,決定客戶端是否具備登錄主機的權(quán)限。
2、rpc.mountd
NFS服務(wù)端會維護一張可被NFS客戶端訪問的文件系統(tǒng)表。表中的每個文件都有單獨的訪問控制列表(acl),rpc.mountd使用這些acl來決定NFS客戶端是否允許訪問對應(yīng)的文件。
3、rpcbind
rpcbind進程主要是進行端口映射工作,當客戶端嘗試連接并使用RPC管理的服務(wù)時,rpcbind會將該服務(wù)對應(yīng)的端口提供給客戶端,從而使客戶端可以通過該端口向服務(wù)器請求服務(wù)。
rpcbind進程應(yīng)該在所有RPC管理的服務(wù)啟動之前啟動,如果rpcbind重啟了,所有RPC管理的服務(wù)都必須重啟。
4、rpc.locked
本進行處理服務(wù)器上共享文件的鎖定問題,以保持數(shù)據(jù)的一致性。
5、rpc.statd
文件鎖并不是持久的,當主機重啟時鎖的狀態(tài)會丟失。該守護進程用于監(jiān)聽其他主機的重啟消息,并管理本地主機重啟時需要通知的主機列表,配合rpc.locked進程,確定文件的一致性。
三、NFS服務(wù)器配置(以CentOS 7為例)
3.1 安裝NFS服務(wù)
幾乎所有的Linux發(fā)行版都默認安裝了NFS,運行NFS服務(wù),至少需要兩個套件,一是rpcbind,二是nfs-utils。
安裝之前,可以先檢查是否安裝了這兩個套件。
[root@server ~]# rpm -qa | grep rpcbind
[root@server ~]# rpm -qa | grep nfs-utils
如果沒有安裝,可以使用yum命令安裝這兩個套件。
[root@server ~]# yum install rpcbind nfs-utils -y
3.2 啟動NFS服務(wù)
使用rpcinfo -p 命令檢查nfs是否運行,如果沒有看到nfs和mountd,表示nfs沒有啟動。
[root@server ~]# rpcinfo -p
使用systemctl命令管理nfs服務(wù),并在啟動nfs服務(wù)之前,確保rpcbind服務(wù)已啟動。
[root@server ~]# systemctl start rpcbind #啟動rpcbind服務(wù)
[root@server ~]# systemctl start nfs #啟動nfs服務(wù)
[root@server ~]# systemctl enable rpcbind #設(shè)置開機自動啟動rpcbind服務(wù)
[root@server ~]# systemctl enable nfs #設(shè)置開機自動啟動nfs服務(wù)
3.3 配置NFS服務(wù)
NFS服務(wù)的配置文件是/etc/exports,但是這個文件并沒有隨nfs服務(wù)安裝而創(chuàng)建,需要管理員手工創(chuàng)建它。
1、exports文件的格式
/etc/exports文件的格式如下,例如 “/mnt/share 192.168.1.0/24(rw) *(ro,all_squash)”。
共享目錄 [客戶端1 (權(quán)限,用戶映射,其他)] [客戶端2 (權(quán)限,用戶映射,其他)]
2、文件格式說明
(1)共享目錄
NFS服務(wù)器需共享目錄的實際路徑,使用絕對路徑。如“/mnt/share”。
(2)客戶端
指可以訪問NFS服務(wù)器共享目錄的計算機??梢允荌P地址、網(wǎng)段、域名等形式,還可以使用通配符。例如:
客戶端 | 說明 |
---|---|
192.168.200.100 | 指定IP地址的主機 |
192.168.200.0/24 | 指定子網(wǎng)的所有主機 |
192.168.200.* | IP地址前綴為192.168.200的所有主機 |
www.example.com | 指定域名的主機 |
*.example.com | 指定域內(nèi)的所有主機 |
* | 任意主機 |
(3)權(quán)限
訪問權(quán)限參數(shù)用于控制共享目錄的訪問權(quán)限,有rw和ro兩種,rw表示共享目錄可讀寫,ro表示共享目錄只讀。
(4)用戶映射
客戶端訪問NFS服務(wù)器上的共享目錄時,不需要提供用戶賬號和密碼。默認情況下,客戶端若以root用戶訪問NFS服務(wù)器時,NFS服務(wù)器會將其映射成一個本地的匿名用戶nfsnobody,并將其所屬的組也映射成匿名用戶組nfsnobody,從而提高系統(tǒng)的安全性。客戶端若以普通用戶訪問NFS服務(wù)器,則映射成服務(wù)器上UID相同的用戶和GID相同的組,若不存在,則映射成匿名用戶和組。具體映射參數(shù)如下表所示:
參數(shù)值 | 內(nèi)容說明 |
---|---|
all_squash | 將遠程訪問的所有普通用戶及所屬用戶組都映射成匿名用戶或匿名組。 |
no_all_squash | 不將遠程訪問的所有普通用戶及所屬用戶組都映射成匿名用戶或匿名組。(默認配置) |
root_squash | 將root用戶及所屬組都映射為匿名用戶或匿名組。(默認配置) |
no_root_squash | 不將root用戶及所屬組都映射為匿名用戶或匿名組。 |
anonuid=XXX | 將遠程訪問的所有用戶都映射為指定用戶,該用戶的UID=XXX |
anongid=XXX | 將遠程訪問的所有用戶組都映射為指定組,該組的GID=XXX |
(5)其他
其他參數(shù)可以用于對共享目錄更全面的控制。
參數(shù)值 | 內(nèi)容說明 |
---|---|
secure | 限制客戶端只能從小于1024的端口連接NFS服務(wù)器 |
insecure | 允許客戶端從大于1024的端口連接NFS服務(wù)器 |
sync | 將數(shù)據(jù)同步寫入內(nèi)存緩沖區(qū)與磁盤中 |
async | 將數(shù)據(jù)先保存在內(nèi)存緩沖區(qū)中,必要時才寫入磁盤 |
wdelay | 檢查是否有相關(guān)的寫操作,如果有則將這些寫操作一起執(zhí)行,提高效率 |
no_wdelay | 若有寫操作則立即執(zhí)行,應(yīng)與sync配合 |
subtree_check | 若輸出目錄時一個子目錄,則NFS服務(wù)器將檢查其父目錄的權(quán)限 |
no_subtree_check | 即使輸出目錄時一個子目錄,則NFS服務(wù)器也不檢查其父目錄的權(quán)限 |
四、NFS客戶端訪問NFS共享
4.1 showmount命令查看共享
NFS客戶端安裝nfs-utils軟件包后,可以使用showmount命令查看NFS服務(wù)器上的共享目錄。
showmount的使用語法如下:
showmount [-adehv] [NFS服務(wù)器名或IP地址]
選項 | 說明 |
---|---|
a | 顯示客戶端主機名和掛載目錄 |
d | 僅顯示已被NFS客戶端加載的目錄 |
e | 顯示NFS服務(wù)器上所有的共享目錄 |
v | 顯示版本信息 |
h | 顯示幫助信息 |
4.2 mount命令掛載共享
可以使用mount命令將NFS共享掛載到本地目錄,格式如下:
mount ?-t nfs NFS服務(wù)器IP:共享資源目錄 掛載目錄
例如:下面命令可以將服務(wù)器192.168.200.100上的共享目錄/mnt/share掛載到本地目錄/mnt/nfs
mount ?-t nfs 192.168.200.100:/mnt/share /mnt/nfs
4.3 修改/etc/fstab實現(xiàn)開機自動掛載
若需系統(tǒng)啟動自動掛載到NFS服務(wù)器上的共享目錄,可以修改/etc/fstab,在文件最后一行添加如下格式代碼:
NFS服務(wù)器IP:共享資源目錄 掛載目錄 nfs defaults ?0 ?0
五、企業(yè)NFS服務(wù)器配置案例
5.1 案例描述
某公司因門戶網(wǎng)站并發(fā)量增加,采用Web集群技術(shù)提供Web訪問,為保證Web數(shù)據(jù)共享且保持一致,將網(wǎng)站數(shù)據(jù)使用NFS服務(wù)器存儲,經(jīng)研討,決定按如下需求搭建NFS服務(wù)器。
1、共享/public目錄,允許所有客戶端訪問該目錄并只有讀取權(quán)限。
2、共享/website/code目錄,允許192.168.100.0/24和192.168.200.0/24網(wǎng)段的客戶端訪問,并且對此目錄只有讀取權(quán)限。
3、共享/website/images目錄和/website/videos目錄,所有人都具有讀寫權(quán)限,但是當用戶使用該共享目錄時,都將賬號映射成用戶webuser(UID=9999)和組webgroup(GID=9999)。
4、共享/website/security目錄,僅允許192.168.200.138客戶端訪問并具有讀寫權(quán)限。
5.2 實驗環(huán)境
主機名稱 | 操作系統(tǒng) | IP地址 | 備注 |
---|---|---|---|
Server | CentOS 7.5 | 192.168.200.100 | 防火墻關(guān)閉、Selinux關(guān)閉、YUM源配置完成 |
Client | CentOS 7.5 | 192.168.200.138 | 防火墻關(guān)閉、Selinux關(guān)閉、YUM源配置完成 |
5.3 配置NFS服務(wù)器
1、安裝NFS服務(wù)
[root@server ~]# yum install rpcbind -y #安裝rpcbind,一般默認已安裝
[root@server ~]# yum install nfs-utils -y #安裝nfs-utisl,一般默認已安裝
2、啟動NFS服務(wù),并設(shè)置開機自啟動
[root@server ~]# systemctl start rpcbind #啟動rpcbind,要先于nfs前啟動
[root@server ~]# systemctl start nfs #啟動nfs服務(wù)
[root@server ~]# systemctl enable rpcbind
[root@server ~]# systemctl enable nfs
3、查看NFS端口注冊信息
[root@server ~]# rpcinfo -p #查看NFS服務(wù)端口注冊信息
? program vers proto ? port ?service
? ?100000 ? ?4 ? tcp ? ?111 portmapper #rpc端口映射portmap使用111端口
? ?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
? ?100005 ? ?1 ? udp ?20048 mountd #rpc.mountd使用了端口20048
? ?100005 ? ?1 ? tcp ?20048 mountd
? ?100005 ? ?2 ? udp ?20048 mountd
? ?100005 ? ?2 ? tcp ?20048 mountd
? ?100005 ? ?3 ? udp ?20048 mountd
? ?100005 ? ?3 ? tcp ?20048 mountd
? ?100003 ? ?3 ? tcp ? 2049 nfs #rpc.nfsd使用了端口2049
? ?100003 ? ?4 ? tcp ? 2049 nfs
? ?100227 ? ?3 ? tcp ? 2049 nfs_acl
? ?100003 ? ?3 ? udp ? 2049 nfs
? ?100003 ? ?4 ? udp ? 2049 nfs
? ?100227 ? ?3 ? udp ? 2049 nfs_acl
? ?100021 ? ?1 ? udp ?50120 nlockmgr
? ?100021 ? ?3 ? udp ?50120 nlockmgr
? ?100021 ? ?4 ? udp ?50120 nlockmgr
? ?100021 ? ?1 ? tcp ?39126 nlockmgr
? ?100021 ? ?3 ? tcp ?39126 nlockmgr
? ?100021 ? ?4 ? tcp ?39126 nlockmgr
?4、添加用戶、創(chuàng)建共享目錄并設(shè)置權(quán)限
[root@server ~]# groupadd -g 9999 webgroup
[root@server ~]# useradd -g webgroup -u 9999 webuser
[root@server ~]# mkdir /public
[root@server ~]# mkdir -p /website/code
[root@server ~]# mkdir -p /website/images
[root@server ~]# mkdir -p /website/videos
[root@server ~]# mkdir -p /website/security
[root@server ~]# chmod -R 777 /website/images
[root@server ~]# chmod -R 777 /website/videos
[root@server ~]# chown -R webuser:webgroup /website/security
[root@server ~]# chmod -R 700 /website/security
5、編輯配置文件
[root@server ~]# touch /etc/exports
[root@server ~]# vim /etc/exports
##/etc/exports文件內(nèi)容如下:
/public *(ro)
/website/code 192.168.100.0/24(ro) 192.168.200.0/24(ro)
/website/images *(rw,all_squash,anonuid=9999,anongid=9999)
/website/videos *(rw,all_squash,anonuid=9999,anongid=9999)
/website/security 192.168.200.138(rw)
6、重新啟動rpcbind和NFS服務(wù)
[root@server ~]# systemctl restart rpcbind
[root@server ~]# systemctl restart nfs
5.4 配置NFS客戶端
1、安裝NFS服務(wù)
[root@client ~]# yum install nfs-utils -y
2、查詢服務(wù)器共享目錄
[root@client ~]# showmount -e 192.168.200.100
Export list for 192.168.200.100:
/website/videos ? *
/website/images ? *
/public ? ? ? ? ? *
/website/code ? ? 192.168.200.0/24,192.168.100.0/24
/website/security 192.168.200.138
3、掛載目錄
[root@client ~]# mkdir -p /nfs/{public,code,images,videos,security}
[root@client ~]# mount -t nfs 192.168.200.100:/public /nfs/public/
[root@client ~]# mount -t nfs 192.168.200.100:/website/code /nfs/code
[root@client ~]# mount -t nfs 192.168.200.100:/website/images /nfs/images/
[root@client ~]# mount -t nfs 192.168.200.100:/website/videos /nfs/videos/
[root@client ~]# mount -t nfs 192.168.200.100:/website/security /nfs/security/
[root@client ~]# df -Th
文件系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? 類型 ? ? 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root ? ? ? ? ? xfs ? ? ? 17G ?5.8G ? 12G ? 34% /
devtmpfs ? ? ? ? ? ? ? ? ? ? ? ? devtmpfs ?2.0G ? ? 0 ?2.0G ? ?0% /dev
tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmpfs ? ? 2.0G ? ? 0 ?2.0G ? ?0% /dev/shm
tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmpfs ? ? 2.0G ? 21M ?2.0G ? ?2% /run
tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmpfs ? ? 2.0G ? ? 0 ?2.0G ? ?0% /sys/fs/cgroup
/dev/sda1 ? ? ? ? ? ? ? ? ? ? ? ? xfs ? ? 1014M 157M 858M ? 16% /boot
tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmpfs ? ? 394M ?4.0K 394M ? ?1% /run/user/42
tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmpfs ? ? 394M ? 60K 394M ? ?1% /run/user/0
192.168.200.100:/public ? ? ? ? ? nfs4 ? ? ? 17G ?1.2G ? 16G ? ?7% /nfs/public
192.168.200.100:/website/code ? ? nfs4 ? ? ? 17G ?1.2G ? 16G ? ?7% /nfs/code
192.168.200.100:/website/images ? nfs4 ? ? ? 17G ?1.2G ? 16G ? ?7% /nfs/images
192.168.200.100:/website/videos ? nfs4 ? ? ? 17G ?1.2G ? 16G ? ?7% /nfs/videos
192.168.200.100:/website/security nfs4 ? ? ? 17G ?1.2G ? 16G ? ?7% /nfs/security
4、測試權(quán)限文章來源:http://www.zghlxwxcb.cn/news/detail-844469.html
[root@client ~]# cd /nfs/public/ #public目錄可以訪問,不可寫
[root@client public]# touch a
touch: 無法創(chuàng)建"a": 只讀文件系統(tǒng)
[root@client code]# touch a
#code目錄可以訪問,不可寫,換個別網(wǎng)段(非192.168.100.0/24和192.168.200.0/24)將不可讀
touch: 無法創(chuàng)建"a": 只讀文件系統(tǒng)
[root@client ~]# cd /nfs/images/ #image目錄可讀寫,且用戶映射成9999
[root@client images]# touch pl.jpg
[root@client images]# ll
總用量 0
-rw-r--r--. 1 9999 9999 0 3月 ?24 18:48 pl.jpg
[root@client ~]# cd /nfs/security/ #無法訪問security目錄,因為root用戶被映射成nfsbody,
-bash: cd: /nfs/security/: 權(quán)限不夠
在客戶端添加一個UID=9999的用戶,可以對security目錄讀寫。文章來源地址http://www.zghlxwxcb.cn/news/detail-844469.html
[root@client ~]# groupadd -g 9999 webgroup
[root@client ~]# useradd -g webgroup -u 9999 webuser
[root@client ~]# passwd webuser
更改用戶 webuser 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經(jīng)成功更新。
[root@client ~]# su - webuser
[webuser@client ~]$ cd /nfs/security/
[webuser@client security]$ touch web.sec
[webuser@client security]$ ll
總用量 0
-rw-r--r--. 1 webuser webgroup 0 3月 ?24 18:56 web.sec
到了這里,關(guān)于配置與管理NFS服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!