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