文件共享是在企業辦公網絡中常常用到的一項功能,如何設置並使用文件共享在技術上並不複雜,其中的問題主要集中在權限配置方面。
本文以世界技能大賽網絡系統管理賽項中的一道題目做爲案例,詳細分析瞭如何利用Samba服務結合系統權限來完成各類複雜的權限設置,本文所採用的系統版本爲CentOS7。服務器
將/share/archive目錄建立爲samba共享,並完成下列要求:
① 共享名爲archive;
② zhangsan,lisi,wangwu用戶都能經過輸入用戶名和密碼(Skills39)登陸並上傳文件;
③ 其餘人不能訪問共享目錄;
④ zhangsan可以查看和刪除全部人的文件;
⑤ lisi可以查看全部人的文件,但不能刪除別人的文件;
⑥ wangwu只能查看和刪除本身的文件,不能查看和刪除別人的文件;
在這6項需求中,第一、二、3項需求屬於Samba服務的常規配置,實現起來較爲簡單;第四、五、6項需求主要是針對不一樣用戶的權限設置,須要結合系統權限完成配置,實現起來較爲複雜。下面就從這兩個方面分別進行分析。網絡
在CentOS7系統中所提供的Samba版本爲4.6.2,軟件默認沒有安裝,首先執行下列命令安裝、啓動服務,並將之設爲開機自動運行。運維
# yum install samba # systemctl start smb # systemctl enable smb
Samba的配置文件爲「/etc/samba/smb.conf」,下面在配置文件中定義共享,相關設置項如圖1所示。ide
對設置項的解釋:
[archive]:指定共享名,也就是客戶端在訪問時所看到的共享目錄名字。
path:指定共享目錄在服務器中對應的實際路徑,要求必須使用絕對路徑。
valid users:只容許指定的Samba用戶訪問該共享。
writable:共享目錄是否容許Samba用戶寫入。這裏雖然設置了全部Samba用戶均可以寫入,但因爲「valid users」設置項限制了只有指定的三個用戶能夠訪問共享,於是實際上也只有這三個用戶能夠寫入。
配置完成後,保存退出。
下面建立共享目錄,並將其權限設爲777。測試
# mkdir -p /share/archive # chmod 777 /share/archive
接下來再建立Samba用戶。因爲Samba用戶要以系統用戶爲基礎,於是須要先建立出系統用戶以後,再將其添加爲Samba用戶。這裏爲了進行測試,額外再建立一個Samba用戶maliu。rest
# useradd -s /sbin/nologin zhangsan # useradd -s /sbin/nologin lisi # useradd -s /sbin/nologin wangwu # useradd -s /sbin/nologin maliu
下面將這些系統用戶添加爲Samba用戶,同時須要爲每位用戶指定密碼。須要注意的是,Samba用戶的密碼與系統用戶的密碼沒有任何關係。code
# smbpasswd -a zhangsan # smbpasswd -a lisi # smbpasswd -a wangwu # smbpasswd -a maliu
最後,能夠經過執行「pdbedit -L」命令列表顯示目前系統中已經存在的全部Samba用戶。blog
# pdbedit -L zhangsan:1009: lisi:1010: wangwu:1011: maliu:1012:
至此,Samba的常規配置就完成了,執行「systemctl restart smb」命令重啓服務,使配置生效。而後能夠在Windows或Linux客戶端進行訪問測試,用戶zhangsan、lisi、wangwu均可以訪問共享,並上傳文件,但用戶maliu沒有訪問共享的權限。具體測試過程從略。it
下面再來完成第四、五、6項要求,這也是在這整個任務需求中最複雜的部分。將這三項需求進行概括,核心問題主要有兩個:是否容許刪除別人的文件,是否容許讀取別人的文件。下面分別來解決這兩個問題。table
要完成這個任務,首先須要明確一個問題:在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/
至此,關於可否刪除文件的需求就所有解決了。
同以前同樣,要完成這個任務首先須要明確,用戶具備哪一種權限才能夠讀取文件。這個問題相對比較簡單,在Linux系統中,用戶只要對文件自己具備「讀取(r)」權限,那麼即可以查看文件中的內容。
綜合任務四、五、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系統中的絕大多數服務,用戶在使用這些服務時的最終權限基本都是由兩個因素綜合決定的:一個因素是在服務配置文件中所作的相關設置,另外一個因素則是系統權限。於是做爲系統運維人員,必需要熟知服務配置和系統權限,這樣方能更好地知足各類不一樣的實際工做需求。