国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

NFS服務(wù)的用戶身份映射

2019-12-23 15:21煙臺(tái)曲廣平
網(wǎng)絡(luò)安全和信息化 2019年9期
關(guān)鍵詞:配置文件服務(wù)器端客戶端

■ 煙臺(tái) 曲廣平

編者按:NFS服務(wù)雖然在CentOS7.6系統(tǒng)中采用的是目前最新的NFSv4版本,但由于NFS服務(wù)本身比較簡(jiǎn)單,所以如果對(duì)NFS服務(wù)設(shè)置不當(dāng),將會(huì)在企業(yè)網(wǎng)絡(luò)中產(chǎn)生比較嚴(yán)重的安全隱患。本文就NFS服務(wù)的用戶身份映射問(wèn)題進(jìn)行了分析,并給出了推薦的配置和使用方法。

NFS(Network File System,網(wǎng)絡(luò)文件系統(tǒng))主要用于Linux以及類UNIX系統(tǒng)之間的文件共享。它采用C/S工作模式,在NFS服務(wù)器上將某個(gè)目錄設(shè)置為共享目錄,然后在客戶端可以將這個(gè)目錄掛載到本地使用。

筆者準(zhǔn)備了兩臺(tái)Linux虛擬機(jī)來(lái)搭建實(shí)驗(yàn)環(huán)境,虛擬機(jī)所使用的操作系統(tǒng)版本為CentOS7.6。其中名為Server的虛擬機(jī)IP地 址 是 192.168.80.10,名為Client的虛擬機(jī)IP地址是192.168.80.101。

NFS的基本配置

NFS服務(wù)在CentOS7系統(tǒng)中默認(rèn)已經(jīng)安裝,但并未運(yùn)行,因而首先需要在虛擬機(jī)Server中執(zhí)行“systemctl start nfs”命令啟動(dòng)服務(wù),然后再執(zhí)行“systemctl enable nfs”命令將服務(wù)設(shè)置為開機(jī)自動(dòng)運(yùn)行。

在服務(wù)器端新建一個(gè)/var/share目錄,并在其中創(chuàng)建一個(gè)測(cè)試文件test.txt。

[root@server ~]#mkdir /var/share

[root@server ~]# echo'hello,world!' > /var/share/test.txt

下面將/var/share目錄設(shè)置為NFS共享,并允許所有客戶端訪問(wèn)。

NFS服務(wù)的主配置文件是 /etc/exports,在 /etc/exports文件中,每一行定義一個(gè)共享目錄。

利用vi編輯器打開配置文件/etc/exports,在其中增加下面的一行:

[root@server ~]# vim/etc/exports

/var/share*(ro,sync)

在 設(shè) 置 項(xiàng) 中,“/var/share”表示要共享的目錄,“*”表示所有客戶端都可以訪問(wèn)該共享目錄,選項(xiàng)“ro”用于定義客戶端的權(quán)限為 read-only(只讀),選項(xiàng)“sync”表示啟用同步模式,可以將內(nèi)存中的數(shù)據(jù)實(shí)時(shí)寫入到磁盤中。

修改完配置文件之后,重啟NFS服務(wù)生效。

[root@server ~]#systemctl restart nfs

然后在客戶端就可以將共享目錄掛載到本地使用。

[root@client ~]#mkdir /mnt/nfs

#創(chuàng)建掛載點(diǎn)目錄

[root@client~]# mount -t nfs 192.168.80.10:/common /mnt/nfs

#掛載共享目錄

[root@client ~]# ls /mnt/nfs

#查看共享目錄中的文件

test.txt

由于NFS服務(wù)本身并不具備用戶身份驗(yàn)證的功能,而僅支持基于客戶端IP進(jìn)行認(rèn)證。

也就是說(shuō),我們?cè)趯?duì)NFS服務(wù)進(jìn)行權(quán)限設(shè)置時(shí),不能針對(duì)用戶來(lái)分配權(quán)限,而只能針對(duì)客戶端IP進(jìn)行權(quán)限分配。

所以如果希望IP地址為192.168.80.101的客戶端可以對(duì)共享目錄執(zhí)行寫入操作,那么可以在服務(wù)器端對(duì)配置文件進(jìn)行如下修改,添加客戶端的IP,并設(shè)置權(quán)限選項(xiàng)為“rw(read-write)”:

[root@server ~]# vim/etc/exports

/var/share*(ro,sync)

192.16 8.80.101(rw,sync)

修改完成后,需要重啟NFS服務(wù)生效。

但是如果NFS共享正在被某些服務(wù)器使用的話,那么NFS服務(wù)是不允許隨便重啟的,所以在CentOS系統(tǒng)中提供了exportfs命令,可以在不重啟NFS服務(wù)的情況下,重新加載/etc/exports文件,使得新的設(shè)置項(xiàng)生效。

exportfs命令的常用選項(xiàng)有:-a(全部掛載或全部卸載)、-r(重新掛載)、-v(顯示詳細(xì)信息),通常都是將這三個(gè)選項(xiàng)組合使用。

下面通過(guò)exportfs命令使得我們剛才所做的設(shè)置生效。

[root@server ~]#exportfs -arv

exporting 192.168.80.101:/var/share

exporting *:/var/share

在客戶端先將共享目錄卸載,然后再重新掛載,以使得服務(wù)器端的設(shè)置生效。

但在對(duì)共享目錄進(jìn)行寫入測(cè)試時(shí)失敗。

[root@Client ~]#umount /mnt/share

#卸載共享目錄

[root@Client ~]#mount 192.168.80.10:/var/share /mnt/share

#重新掛載共享目錄

[root@Client ~]#touch /mnt/share/a.txt

#寫入測(cè)試失敗

touch: 無(wú)法創(chuàng)建"/mnt/share/a.txt": 只讀文件系統(tǒng)

這是由于雖然在服務(wù)器端的配置文件/etc/exports中設(shè)置了允許用戶對(duì)/var/share目錄具有讀寫權(quán)限,但在操作系統(tǒng)層面,用戶對(duì)/var/share目錄卻不具備寫入權(quán)限。

因而,要實(shí)現(xiàn)對(duì)共享目錄的寫入操作,必須要保證在NFS服務(wù)和操作系統(tǒng)兩個(gè)層面全部都具有寫入權(quán)限才可以。

如何使得客戶端可以在操作系統(tǒng)層面對(duì)共享目錄具有寫入權(quán)限,這就要涉及到用戶身份映射問(wèn)題。

用戶身份映射的原理

NFS服務(wù)雖然不具備用戶身份驗(yàn)證的功能,但是NFS提供了一種身份映射的機(jī)制來(lái)對(duì)用戶身份進(jìn)行管理。

當(dāng)客戶端訪問(wèn)NFS服務(wù)時(shí),服務(wù)器會(huì)根據(jù)情況將客戶端用戶的身份映射成NFS匿名用戶nfsnobody。

nfsnobody是由NFS服務(wù)在系統(tǒng)中自動(dòng)創(chuàng)建的一個(gè)程序用戶賬號(hào),該賬號(hào)不能用于登錄系統(tǒng),專門用作NFS服務(wù)的匿名用戶賬號(hào)。

[root@Server ~]# grep nfsnobody /etc/passwd

#查看nfsnobody用戶的信息。

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

所謂用戶身份映射,是指當(dāng)客戶端訪問(wèn)NFS服務(wù)器時(shí),會(huì)自動(dòng)被視作服務(wù)器中的nfsnobody用戶,并按照該用戶的權(quán)限設(shè)置去執(zhí)行操作。

但是并非所有的客戶端都會(huì)被映射為nfsnobody用戶,在/etc/exports配置文件中提供了以下選項(xiàng),以決定是否將NFS客戶端映射為nfsnobody用戶:

1.root_squash,當(dāng) NFS客戶端以root用戶身份訪問(wèn)時(shí),映射為NFS服務(wù)器的nfsnobody用戶。

2.no_root_squash,當(dāng)NFS客戶端以root身份訪問(wèn)時(shí),映射為NFS服務(wù)器的root用戶,也就是要為超級(jí)用戶保留權(quán)限。

這個(gè)選項(xiàng)會(huì)留下嚴(yán)重的安全隱患,一般不建議采用。

3.all_squash,無(wú)論 NFS客戶端以哪種用戶身份訪問(wèn),均映射為NFS服務(wù)器的nfsnobody用戶。

其中默認(rèn)值是root_squash,即當(dāng)客戶端以root用戶的身份訪問(wèn)NFS共享時(shí),在服務(wù)器端會(huì)自動(dòng)被映射為匿名賬號(hào)nfsnobody。

下面將分幾種情況分別予以說(shuō)明。

root用戶的身份映射

我們之前之所以無(wú)法在客戶端執(zhí)行寫入操作,是因?yàn)檫€沒有在系統(tǒng)層面賦予nfsnobody用戶對(duì)共享目錄/var/share具有寫入權(quán)限。

這里通過(guò)設(shè)置ACL規(guī)則賦予nfsnobody用戶rwx權(quán)限。

[root@Server~]# setfacl -m u:nfsnobody:rwx /var/share

然后在客戶端重新掛載共享目錄,并測(cè)試能否寫入。

[root@Client ~]#umount /mnt/share

[root@Client~]# mount -t nfs 192.168.80.10:/var/share/mnt/share

[root@Client ~]#touch /mnt/share/b.txt

可以看到此時(shí)客戶端可以寫入,并且所創(chuàng)建文件的所有者正是nfsnobody。

[root@Client ~]# ll /mnt/share/b.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 3月 21 07:39 /mnt/share/b.txt

由于客戶端當(dāng)前所使用的用戶身份是root,默認(rèn)情況下,當(dāng)客戶端訪問(wèn)NFS服務(wù)器時(shí),在服務(wù)器端會(huì)將其用戶身份映射為nfsnobody,所以在服務(wù)器端只要賦予nfsnobody用戶對(duì)共享目錄具有寫入權(quán)限,那么客戶端自然就可以寫入了。

下面我們?cè)衮?yàn)證一下no_root_squash設(shè)置項(xiàng),即root用戶不進(jìn)行身份映射。

首先在服務(wù)器端修改配置文件/etc/exports,為/var/share共享目錄添加no_root_squash選項(xiàng)。

[root@server ~]# vim/etc/exports#修改配置文件

/var/share *(rw,no_root_squash,sync)

[root@Server ~]#exportfs -arv

#重新加載服務(wù)

exporting *:/var/share

然后去掉對(duì)共享目錄/var/share所設(shè)置的ACL規(guī)則,取消nfsnobody用戶對(duì)該目錄的寫入權(quán)限。

[root@Server ~]#setfacl -b /var/share

最后在客戶端重新掛載共享目錄,并測(cè)試能否寫入。

[root@Client ~]#umount /mnt/share

[root@Client~]# mount -t nfs 192.168.80.10:/var/share/mnt/share

[root@Client ~]#touch /mnt/share/c.txt

[root@Client ~]# ll /mnt/share/c.txt

-rw-r--r--. 1 root root 0 4月 14 17:08 /mnt/share/c.txt

可以發(fā)現(xiàn),此時(shí)客戶端仍然是可以寫入的。

因?yàn)閷?duì)于NFS服務(wù)器而言,訪問(wèn)共享目錄的客戶端就是服務(wù)器中的root用戶,對(duì)共享目錄具有完全權(quán)限。

所以no_root_squash選項(xiàng)會(huì)產(chǎn)生很大的安全隱患,一般情況下都不建議采用。

普通用戶的身份映射

如果客戶端所使用的用戶身份不是root,而是一個(gè)普通用戶,那么默認(rèn)情況下在服務(wù)器端會(huì)將其視作其它用戶(other)。

下面我們?cè)诳蛻舳艘云胀ㄓ脩舻纳矸堇^續(xù)進(jìn)行測(cè)試。

首先在服務(wù)器端修改配置文件/etc/exports,將共享目錄/var/share中的no_root_squash選項(xiàng)去掉,重新加載服務(wù)后,再次通過(guò)設(shè)置ACL規(guī)則的方式賦予nfsnobody用戶讀寫執(zhí)行權(quán)限。

[root@server ~]# vim/etc/exports

#修改配置文件/var/share *(rw,sync)[root@Server ~]#exportfs -arv#重新加載服務(wù)

exporting *:/var/share

#通過(guò)設(shè)置ACL賦予nfsnobody用戶rwx權(quán)限

[root@Server~]# setfacl -m u:nfsnobody:rwx /var/share

在客戶端重新掛載共享,并測(cè)試以root用戶身份可以正常寫入。

[root@Client ~]#umount /mnt/share

[root@Client ~]#mount 192.168.80.10:/var/share /mnt/share

[root@Client ~]#touch /mnt/share/d.txt

[root@Client ~]# ll /mnt/share/d.txt

-rw-r--r--. 1 nfsnobody nfsnobody 0 4月 14 17:29 /mnt/share/d.txt

下面在客戶端創(chuàng)建一個(gè)admin用戶,并設(shè)置密碼。

[root@Client ~]#useradd admin

[root@Client ~]# echo 123 | passwd --stdin admin

切換到admin用戶身份,嘗試向共享目錄中寫入文件,寫入失敗,但是可以讀取目錄中的內(nèi)容。

因而,如果客戶端是以普通用戶的身份訪問(wèn)NFS共享,那么默認(rèn)情況下在服務(wù)器端并不將其映射為nfsnobody,而是視作其他用戶(other)。

[root@Client ~]# su -admin

[admin@Client ~]$touch /mnt/share/e.txt

touch: 無(wú)法創(chuàng)建"/mnt/share/e.txt": 權(quán)限不夠

[admin@Client ~]$ cat/mnt/share/e.txt

下面在服務(wù)器端繼續(xù)修改配置文件/etc/exports,在共享設(shè)置中添加“all_squash”選項(xiàng),將所有客戶端用戶均映射為nfsnobody。

[root@server ~]# vim/etc/exports

#修改配置文件

/var/share*(rw,sync,all_squash)

[root@Server ~]#exportfs -arv

#重新加載服務(wù)

exporting *:/var/share

然后在客戶端再次重新掛載共享(具體操作從略),此時(shí)以admin用戶身份就可以寫入了,并且可以發(fā)現(xiàn)所創(chuàng)建文件的所有者同樣是nfsnobody。

[admin@Client ~]$touch /mnt/share/e.txt

[admin@Client ~]$ ll/mnt/share/e.txt

-rw-rw-r--. 1 nfsnobody nfsnobody 0 4月14 17:37 /mnt/share/e.txt

用戶身份重疊

在使用NFS共享的過(guò)程中,有時(shí)還可能會(huì)遇到用戶身份重疊的問(wèn)題。

所謂用戶身份重疊,是指在NFS服務(wù)采用默認(rèn)設(shè)置(用戶身份映射選項(xiàng)為root_squash)時(shí),如果在服務(wù)器端賦予某個(gè)用戶對(duì)共享目錄具有相應(yīng)權(quán)限,而且在客戶端恰好也有一個(gè)具有相同uid的用戶,那么當(dāng)在客戶端以該用戶身份訪問(wèn)共享時(shí),將自動(dòng)具有服務(wù)器端對(duì)應(yīng)用戶的權(quán)限。

下面舉例予以說(shuō)明。

首先在服務(wù)器端將/var/share共享還原為默認(rèn)設(shè)置,并且取消/var/share目錄針對(duì)nfsnobody用戶的ACL規(guī)則,具體操作從略。

假設(shè)服務(wù)器端存在一個(gè)名為teacher的用戶賬號(hào),uid為1246,將該用戶設(shè)置為共享目錄的所有者。

[root@Server ~]# id teacher

#查看teacher用戶的身份信息

uid=1246(teacher)gid=1246(teacher) 組=1246(teacher)

#將teacher用戶設(shè)置為/var/share目錄的所有者

[root@Server ~]#chown teacher /var/share

[root@Server ~]# ll-d /var/share

drwxr-xr-x. 2 teacher root 45 4月 14 17:37 /var/share

下面在客戶端進(jìn)行操作。首先仍是重新掛載共享目錄,然后將原先admin用戶的uid也改為1246。

[root@Client ~]#usermod -u 1246 admin

[root@Client ~]# id admin

uid=1246(admin)gid=1002(admin) 組=1002(admin)

然后以admin用戶身份測(cè)試能否對(duì)共享目錄執(zhí)行寫入操作,發(fā)現(xiàn)可以正常寫入,并且所創(chuàng)建文件的所有者是admin。

[root@Client ~]# su -admin

[admin@Client ~]$touch /mnt/share/f.txt

[admin@Client ~]$ ll/mnt/share/f.txt

-rw-rw-r--. 1 admin admin 0 4月 14 17:47 /mnt/share/f.txt

在服務(wù)器端查看admin用戶所創(chuàng)建的文件,發(fā)現(xiàn)所有者則是teacher。

[root@Server ~]# ll /var/share/f.txt

-rw-rw-r--. 1 teacher 1002 0 4月 14 17:47 /var/share/f.txt

這是因?yàn)閷?duì)于Linux系統(tǒng)而言,區(qū)分不同用戶的唯一標(biāo)識(shí)就是uid,至于用戶名只是為了方便人類理解。所以在系統(tǒng)層面,無(wú)論是teacher用戶還是admin用戶,只要他們的uid一樣,就認(rèn)為是同一個(gè)用戶。但也正是因?yàn)檫@個(gè)原因,才會(huì)導(dǎo)致出現(xiàn)用戶身份重疊的問(wèn)題,對(duì)于NFS服務(wù)而言,這也是一個(gè)比較嚴(yán)重的安全隱患。

如何避免用戶身份重疊呢?可以從以下兩個(gè)方面著手:

一是在設(shè)置NFS共享時(shí),建議采用“all_squash”選項(xiàng),將所有客戶端用戶均映射為nfsnobody。這樣就可以有效避免用戶身份重疊的問(wèn)題。

二是應(yīng)嚴(yán)格控制NFS共享目錄的系統(tǒng)權(quán)限,盡量不用為普通用戶賦予權(quán)限。

猜你喜歡
配置文件服務(wù)器端客戶端
你的手機(jī)安裝了多少個(gè)客戶端
基于Docker的實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)配置文件管理軟件的設(shè)計(jì)與實(shí)現(xiàn)
“人民網(wǎng)+客戶端”推出數(shù)據(jù)新聞
——穩(wěn)就業(yè)、惠民生,“數(shù)”讀十年成績(jī)單
從Windows 10中刪除所有網(wǎng)絡(luò)配置文件
Linux環(huán)境下基于Socket的數(shù)據(jù)傳輸軟件設(shè)計(jì)
用軟件處理Windows沙盒配置文件
互不干涉混用Chromium Edge
基于Qt的安全即時(shí)通訊軟件服務(wù)器端設(shè)計(jì)
基于Qt的網(wǎng)絡(luò)聊天軟件服務(wù)器端設(shè)計(jì)
媒體客戶端的發(fā)展策略與推廣模式