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