例題
同一群組microsoft下的兩個賬號justmine001和justmine002需要共同擁有目錄/microsoft/eshop
的開發(fā)權,以便進行協(xié)同工作,但是其他人不允許進入和查閱該目錄。
從例題可以分析出:
- 同一群組下的賬戶需要共同擁有目錄的使用權,且可以編輯里面的任何文件。
- 其他賬戶不擁有該目錄的任何權限。
- 需要使用root賬戶,創(chuàng)建賬戶、群組,設置目錄權限,然后搭建開發(fā)環(huán)境。
創(chuàng)建賬戶相關信息
groupadd microsoft ; 新增群組
useradd -G microsoft justmine001; 新增賬戶,并加入到群組microsoft
useradd -G microsoft justmine002; 新增賬戶,并加入到群組microsoft
查閱賬號屬性
id justmine001;
id justmine002;
搭建環(huán)境
創(chuàng)建開發(fā)目錄
mkdir -p /microsoft/eshop
查詢
ll -d /microsoft/eshop
設置傳統(tǒng)權限
從上圖可以看到,開發(fā)目錄的擁有者和群組都是root,權限為rwxr-xr-x,所以justmine001和justmine002可以查閱(ls)和進入(cd)該目錄,但是都不能在目錄中創(chuàng)建文件。
首先,設置目錄群組為microsoft,其次,其他人對該目錄沒有任何權限,所以應該設置權限為770。如果不理解,請閱讀上一篇詳解Linux文檔屬性、擁有者、群組、權限、差異
chgrp microsoft /microsoft/eshop; 分配群組
chmod 770 /microsoft/eshop; 設置權限
首先測試justmine賬號(其他人)的權限,如下:
其他人無法訪問ls
和進入cd
該目錄,已達到預期效果。
測試同群組下的justmine001和justmine002賬號,再次創(chuàng)建文件,如下:
為了淋漓盡致的展現(xiàn),我將文件創(chuàng)建權限從拒絕到許可的整個過程都截取下來了!?。?/p>
從上面可以看到,文件test和test1的擁有者和群組分別為justmine001和justmine002,雖然用戶justmine001可以刪除justmine002創(chuàng)建的文件test1(目錄權限的控制范圍),但是卻不能編輯它(文件權限的控制范圍)。那該腫么辦呢,還是無法完成協(xié)作工作啊。第一種方法是我們將文件test1權限設置為777,這樣文件對任何人都可讀、可寫、可編輯,再加上目錄權限的控制,其他人訪問不了文件test1,沒毛病。第二種方法,變更它們創(chuàng)建的文件群組為microsoft,這樣也可以實現(xiàn)協(xié)作工作,貌似這種方法才是切合現(xiàn)實的。不過,每次都要管理員去做這件事情,那豈不是太麻煩他老人家,多不好意思啊,嘿嘿。正所謂,車道山前必有路,使用Linux特殊權限SGID可以完美實現(xiàn)同一群組下的任何賬戶創(chuàng)建的文件都擁有相同的群組microsoft(詳情請閱讀:理解Linux文檔的默認安全機制、隱藏屬性、特殊權限)。
備注:Linux文檔權限是一級一級的往下控制的,所以任何讀、寫、編輯文件的前提就是要擁有能夠進入文件所屬目錄的權限。
設置特殊權限
為目錄/microsoft/eshop
設置SGID權限
chmod 2770 /microsoft/eshop
使用justmine002賬號創(chuàng)建文件,查詢文件權限:
從上圖可以看到,justmine002所屬的文件群組自動變更成microsoft,而umask默認為002,兩人同屬一個群組,自然就可以互相修改彼此的文件了?。?!
總結
Linux系統(tǒng)管理員的主要任務其實就是如何管理好系統(tǒng)的文件系統(tǒng),那么對于文檔多租戶管理,首先新建一個統(tǒng)一的群組,然后將目錄權限設置為2770,最后把需要協(xié)作工作的用戶加入這個群組,就是這么簡單。往往,結果很簡短,但是思考分析過程就如同西天取經(jīng),希望把整個過程分享給大家,不僅要知其然,更要知其所以然,這樣才能舉一反三,融匯貫通,達到靈活運用的目的。