將/share/archive目錄創(chuàng)建為Samba共享,并完成下列要求:
1.共享名為archive。
2.zhangsan、lisi、wangwu用戶都能通過(guò)輸入用戶名和密碼(Skills39)登錄并上傳文件。
3.其他人不能訪問(wèn)共享目錄。
4.zhangsan能夠查看和刪除所有人的文件。
5.lisi能夠查看所有人的文件,但不能刪除別人的文件。
6.wangwu只能查看和刪除自己的文件,不能查看和刪除別人的文件。
在這6項(xiàng)需求中,第1、2、3項(xiàng)需求屬于Samba服務(wù)的常規(guī)配置,實(shí)現(xiàn)起來(lái)較為簡(jiǎn)單 ;第 4、5、6 項(xiàng)需求主要是針對(duì)不同用戶的權(quán)限設(shè)置,需要結(jié)合系統(tǒng)權(quán)限完成配置,實(shí)現(xiàn)起來(lái)較為復(fù)雜。下面就從這兩個(gè)方面分別進(jìn)行分析。
圖1 定義共享
在CentOS 7.4系統(tǒng)中所提供的Samba版本為4.6.2,軟件默認(rèn)沒(méi)有安裝,首先執(zhí)行下列命令安裝、啟動(dòng)服務(wù),并將之設(shè)為開(kāi)機(jī)自動(dòng)運(yùn)行。
# yum install samba
# systemctl start smb
# systemctl enable smb
Samba的配置文件為“/etc/samba/smb.conf”,下面在配置文件中定義共享,相關(guān)設(shè)置項(xiàng)如圖1所示。
對(duì)設(shè)置項(xiàng)的解釋:
[archive]:指 定 共 享名,也就是客戶端在訪問(wèn)時(shí)所看到的共享目錄名字。
path:指 定共享目錄在服務(wù)器中對(duì)應(yīng)的實(shí)際路徑,要求必須使用絕對(duì)路徑。
valid users :只允許指定的Samba用戶訪問(wèn)該共享。
writable:共享目錄是否允許Samba用戶寫(xiě)入。這里雖然設(shè)置了所有Samba用戶都可以寫(xiě)入,但由于“valid users”設(shè)置項(xiàng)限制了只有指定的三個(gè)用戶可以訪問(wèn)共享,因而實(shí)際上也只有這三個(gè)用戶可以寫(xiě)入。
配置完成后,保存退出。
下面創(chuàng)建共享目錄,并將其權(quán)限設(shè)為777。
# mkdir -p /share/archive
# chmod 777 /share/archive
接下來(lái)再創(chuàng)建Samba用戶。由于Samba用戶要以系統(tǒng)用戶為基礎(chǔ),因而需要先創(chuàng)建出系統(tǒng)用戶之后,再將其添加為Samba用戶。這里為了進(jìn)行測(cè)試,額外再創(chuàng)建一個(gè)Samba用戶maliu。
# useradd -s /sbin/nologin zhangsan
# useradd -s /sbin/nologin lisi
# useradd -s /sbin/nologin wangwu
# useradd -s /sbin/nologin maliu
下面將這些系統(tǒng)用戶添加為Samba用戶,同時(shí)需要為每位用戶指定密碼。需要注意的是,Samba用戶的密碼與系統(tǒng)用戶的密碼沒(méi)有任何關(guān)系。
# smbpasswd -a zhangsan
# smbpasswd -a lisi
# smbpasswd -a wangwu
# smbpasswd -a maliu
最后,可以通過(guò)執(zhí)行“pdbedit -L”命令列表顯示目前系統(tǒng)中已經(jīng)存在的所有Samba用戶。
# pdbedit -L
zhangsan:1009:
lisi:1010:
wangwu:1011:
maliu:1012:
至此,Samba的常規(guī)配置就完成了。執(zhí)行“systemctl restart smb”命令重啟服務(wù)使配置生效。然后可在Windows或Linux客戶端進(jìn)行訪問(wèn)測(cè)試,用戶zhangsan、lisi、wangwu都可以訪問(wèn)共享并上傳文件,但用戶maliu沒(méi)有訪問(wèn)共享的權(quán)限。具體測(cè)試過(guò)程從略。
下面再來(lái)完成第 4、5、6項(xiàng)要求,這也是在這整個(gè)任務(wù)需求中最復(fù)雜的部分。將這三項(xiàng)需求進(jìn)行歸納,核心問(wèn)題主要有兩個(gè):是否允許刪除別人的文件,是否允許讀取別人的文件。下面分別來(lái)解決這兩個(gè)問(wèn)題。
要完成這個(gè)任務(wù),首先需要明確一個(gè)問(wèn)題:在Linux系統(tǒng)中,用戶需要具有哪種權(quán)限才可以將一個(gè)文件刪除。
Linux系統(tǒng)規(guī)定,用戶只要對(duì)某個(gè)目錄具備“寫(xiě)入(w)”權(quán)限,便可修改或刪除該目錄中的任何文件,而不論這個(gè)文件的權(quán)限是什么。
也就是說(shuō),用戶能否刪除一個(gè)文件,取決于用戶對(duì)文件所在的目錄是否具有寫(xiě)入權(quán)限。由于我們將共享目錄/share/archive的系統(tǒng)權(quán)限設(shè)為777,因而,此時(shí)任何用戶都可以刪除該目錄中的任意文件。但在任務(wù)5和任務(wù)6中,又明確要求用戶lisi和wangwu不能刪除別人的文件,所以這里自然就想到了sbit粘滯位權(quán)限。
sbit權(quán)限的作用是:當(dāng)目錄被設(shè)置了sbit權(quán)限之后,即便用戶對(duì)目錄有“寫(xiě)入(w)”權(quán)限,也不能刪除該目錄中其他用戶的文件,每個(gè)文件只有該文件的所有者和root用戶才有權(quán)將其刪除。
因而,下面需要為共享目錄/share/archive設(shè)置sbit權(quán)限:
# chmod o+t /share/archive/
# ll -d /share/archive/
drwxrwxrwt. 2 root root 26 4月 28 20:32 /share/archive/
這樣,所有的Samba用戶都可以向共享目錄中上傳文件,但是只能刪除自己的文件,而無(wú)法刪除別人的文件。
但如此一來(lái),又無(wú)法滿足任務(wù)4的需求,用戶zhangsan也無(wú)法刪除別人的文件。到此,思路好像進(jìn)入了死胡同。
其實(shí),關(guān)于sbit權(quán)限還有一條規(guī)則,那就是:對(duì)于目錄的所有者,可以不受sbit權(quán)限的限制,他可以刪除該目錄中所有用戶的文件。
只要明白了該規(guī)則,問(wèn)題自然就迎刃而解了,我們只需將共享目錄的所有者更改為zhangsan即可。
# chown zhangsan /share/archive/
# ll -d /share/archive/
drwxrwxrwt. 2 zhangsan root 26 4月 28 20:32 /share/archive/
至此,關(guān)于能否刪除文件的需求就全部解決了。
同之前一樣,要完成這個(gè)任務(wù),首先需要明確用戶具有哪種權(quán)限才可以讀取文件。這個(gè)問(wèn)題相對(duì)比較簡(jiǎn)單,在Linux系統(tǒng)中,用戶只要對(duì)文件本身具有“讀取(r)”權(quán)限,那么便可以查看文件中的內(nèi)容。
圖2 定義上傳文件的默認(rèn)權(quán)限
圖3 用戶上傳文件的默認(rèn)權(quán)限
綜合任務(wù) 4、5、6 這三項(xiàng)需求,用戶zhangsan和lisi可以讀取所有人的文件,而用戶wangwu則只能讀取自己的文件。下面是具體的實(shí)現(xiàn)過(guò)程。
首先,在Samba的配置文件“/etc/samba/smb.conf”中定義用戶上傳文件的默認(rèn)權(quán)限,這里需要用到“create mask”設(shè)置項(xiàng),將用戶上傳文件的默認(rèn)權(quán)限設(shè)置為0640,也即只有文件的所有者以及所屬組用戶,才具有讀取權(quán)限。相關(guān)設(shè)置項(xiàng)如圖2所示。
設(shè)置完成后,同樣需要執(zhí) 行“systemctl restart smb”命令重啟服務(wù)生效。
接下來(lái)我,們只需使用戶zhangsan和lisi能夠成為每個(gè)上傳文件的所屬組的成員即可,但是默認(rèn)情況下,用戶所上傳文件的所屬組都是與該用戶同名的私有組,如果要使得所有用戶上傳文件的所屬組都能夠是同一個(gè)指定的用戶組,那么就需要為共享目錄設(shè)置SGID權(quán)限。
SGID權(quán)限的作用是:如果針對(duì)目錄設(shè)置SGID,則在該目錄內(nèi)所建立的文件或子目錄的所屬組,將統(tǒng)一被自動(dòng)設(shè)置成此目錄的所屬組。
比如,我們?cè)谙到y(tǒng)中創(chuàng)建一個(gè)名為admin的用戶組,并將其設(shè)為共享目錄/share/archive/的所屬組,然后再對(duì)/share/archive/目錄設(shè)置SGID權(quán)限,這樣用戶在共享目錄中上傳的所有文件,默認(rèn)的用戶組都統(tǒng)一被設(shè)置成了admin。
# groupadd admin
# chown :admin /share/archive/
# chmod g+s /share/archive/
# ll -d /share/archive
drwxrwsrwt. 2 zhangsan admin 60 4月29 10:01 /share/archive
然后再將用戶zhangsan和lisi都加入到admin組即可。
# gpasswd -a zhangsan admin
# gpasswd-a lisi admin
最后,分別以用戶zhangsan、lisi、wangwu 的身份在目錄中上傳文件,默認(rèn)權(quán)限如圖3所示。
至此,這個(gè)案例中的所有任務(wù)需求都已全部完成。對(duì)于Linux系統(tǒng)中絕大多數(shù)服務(wù),用戶在使用時(shí)的最終權(quán)限基本都是由兩個(gè)因素綜合決定的:一個(gè)因素是在服務(wù)配置文件中所做的相關(guān)設(shè)置,另一個(gè)則是系統(tǒng)權(quán)限。因而,作為系統(tǒng)運(yùn)維人員,必須熟知服務(wù)配置和系統(tǒng)權(quán)限,這樣方能更好地滿足各種不同的實(shí)際工作需求。