1. 程式人生 > >Samba服務權限配置案例

Samba服務權限配置案例

size 運維 都是 部分 arch passwd mark 集中 分享圖片

文件共享是在企業辦公網絡中經常用到的一項功能,如何設置並使用文件共享在技術上並不復雜,其中的問題主要集中在權限配置方面。
本文以世界技能大賽網絡系統管理賽項中的一道題目作為案例,詳細分析了如何利用Samba服務結合系統權限來完成各種復雜的權限設置,本文所采用的系統版本為CentOS7。

1. 任務需求與分析

將/share/archive目錄創建為samba共享,並完成下列要求:
① 共享名為archive;
② zhangsan,lisi,wangwu用戶都能通過輸入用戶名和密碼(Skills39)登錄並上傳文件;
③ 其他人不能訪問共享目錄;
④ zhangsan能夠查看和刪除所有人的文件;
⑤ lisi能夠查看所有人的文件,但不能刪除別人的文件;

⑥ wangwu只能查看和刪除自己的文件,不能查看和刪除別人的文件;
在這6項需求中,第1、2、3項需求屬於Samba服務的常規配置,實現起來較為簡單;第4、5、6項需求主要是針對不同用戶的權限設置,需要結合系統權限完成配置,實現起來較為復雜。下面就從這兩個方面分別進行分析。

2. Samba常規配置

在CentOS7系統中所提供的Samba版本為4.6.2,軟件默認沒有安裝,首先執行下列命令安裝、啟動服務,並將之設為開機自動運行。

# 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”設置項限制了只有指定的三個用戶可以訪問共享,因而實際上也只有這三個用戶可以寫入。
配置完成後,保存退出。
下面創建共享目錄,並將其權限設為777。

# mkdir -p /share/archive
# chmod 777 /share/archive

接下來再創建Samba用戶。由於Samba用戶要以系統用戶為基礎,因而需要先創建出系統用戶之後,再將其添加為Samba用戶。這裏為了進行測試,額外再創建一個Samba用戶maliu。

# useradd -s /sbin/nologin zhangsan
# useradd -s /sbin/nologin lisi
# useradd -s /sbin/nologin wangwu
# useradd -s /sbin/nologin maliu

下面將這些系統用戶添加為Samba用戶,同時需要為每位用戶指定密碼。需要註意的是,Samba用戶的密碼與系統用戶的密碼沒有任何關系。

# smbpasswd -a zhangsan
# smbpasswd -a lisi
# smbpasswd -a wangwu
# smbpasswd -a maliu

最後,可以通過執行“pdbedit -L”命令列表顯示目前系統中已經存在的所有Samba用戶。

# pdbedit -L
zhangsan:1009:
lisi:1010:
wangwu:1011:
maliu:1012:

至此,Samba的常規配置就完成了,執行“systemctl restart smb”命令重啟服務,使配置生效。然後可以在Windows或Linux客戶端進行訪問測試,用戶zhangsan、lisi、wangwu都可以訪問共享,並上傳文件,但用戶maliu沒有訪問共享的權限。具體測試過程從略。

3. 權限設置

下面再來完成第4、5、6項要求,這也是在這整個任務需求中最復雜的部分。將這三項需求進行歸納,核心問題主要有兩個:是否允許刪除別人的文件,是否允許讀取別人的文件。下面分別來解決這兩個問題。

3.1 限制刪除別人的文件

要完成這個任務,首先需要明確一個問題:在Linux系統中,用戶需要具有哪種權限,才可以將一個文件刪除。
Linux系統規定,用戶只要對某個目錄具備“寫入(w)”權限,那麽便可以修改或刪除該目錄中的任何文件,而不論這個文件的權限是什麽。
也就是說,用戶能否刪除一個文件,取決於用戶對文件所在的目錄是否具有寫入權限。由於我們將共享目錄/share/archive的系統權限設為了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權限,還有一條規則是:對於目錄的所有者,可以不受sbit權限的限制,他可以刪除該目錄中所有用戶的文件。
只要明白了該規則,問題自然就迎刃而解,我們只需將共享目錄的所有者更改為zhangsan即可。

# chown zhangsan /share/archive/
# ll -d /share/archive/
drwxrwxrwt. 2 zhangsan root 26 4月  28 20:32 /share/archive/

至此,關於能否刪除文件的需求就全部解決了。

3.2 限制讀取別人的文件

同之前一樣,要完成這個任務首先需要明確,用戶具有哪種權限才可以讀取文件。這個問題相對比較簡單,在Linux系統中,用戶只要對文件本身具有“讀取(r)”權限,那麽便可以查看文件中的內容。
綜合任務4、5、6這三項需求,用戶zhangsan和lisi可以讀取所有人的文件,而用戶wangwu則只能讀取自己的文件。下面是具體的實現過程。
首先在Samba的配置文件“/etc/samba/smb.conf”中定義用戶上傳文件的默認權限,這裏需要用到“create mask”設置項,將用戶上傳文件的默認權限設置為0640,也就是說只有文件的所有者以及所屬組用戶才具有讀取權限。相關設置項如圖2所示。
技術分享圖片
設置完成後,同樣需要執行“systemctl restart smb”命令重啟服務生效。
接下來我們只需使得zhangsan和lisi能夠成為每個上傳文件的所屬組的成員即可,但是默認情況下,用戶所上傳文件的所屬組都是與該用戶同名的私有組,如果要使得所有用戶上傳文件的所屬組都能夠是同一個指定的用戶組,那麽就需要為共享目錄設置SGID權限。
SGID權限的作用是:如果針對目錄設置SGID,則在該目錄內所建立的文件或子目錄的所屬組,將統一被自動設置成此目錄的所屬組。
比如我們在系統中創建一個名為admin的用戶組,並將其設為共享目錄/share/archive/的所屬組,然後再對/share/archive/目錄設置SGID權限,這樣用戶在共享目錄中上傳的所有文件,其默認的用戶組都統一被設置成了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系統中的絕大多數服務,用戶在使用這些服務時的最終權限基本都是由兩個因素綜合決定的:一個因素是在服務配置文件中所做的相關設置,另一個因素則是系統權限。因而作為系統運維人員,必須要熟知服務配置和系統權限,這樣方能更好地滿足各種不同的實際工作需求。

Samba服務權限配置案例