在上一篇文章中,你瞭解到文件有三個不一樣的權限集。擁有該文件的用戶有一個集合,擁有該文件的組的成員有一個集合,而後最終一個集合適用於其餘全部人。在長列表(ls -l)中這些權限使用符號模式顯示在屏幕上。html
每一個集合都有 r、w 和 x 條目,表示特定用戶(全部者、組成員或其餘)是否能夠讀取、寫入或執行該文件。可是還有另外一種表達這些權限的方法:八進制模式。linux
你已經習慣了十進制編號系統,它有十個不一樣的值(0 到 9)。另外一方面,八進制系統有八個不一樣的值(0 到 7)。在表示權限時,八進制用做速記來顯示 r、w 和 x 字段的值。將每一個字段視爲具備以下值:ide
r = 4 w = 2 x = 1
如今,你可使用單個八進制值表達任何組合。例如,讀取和寫入權限(但沒有執行權限)的值爲 6。讀取和執行權限的值僅爲 5。文件的 rwxr-xr-x 符號權限的八進制值爲 755。ui
與符號值相似,你可使用八進制值使用 chmod 命令設置文件權限。如下兩個命令對文件設置相同的權限:spa
chmod u=rw,g=r,o=r myfile1 chmod 644 myfile1
特殊權限位.net
文件上還有幾個特殊權限位。這些被稱爲 setuid(或 suid)、setgid(或 sgid),以及粘滯位sticky bit(或阻止刪除位delete inhibit)。 將此視爲另外一組八進制值:orm
setuid = 4 setgid = 2 sticky = 1 除非該文件是可執行的,不然 setuid 位是被忽略的。若是是可執行的這種狀況,則該文件(多是應用程序或腳本)的運行就像擁有該文件的用戶啓動的同樣。setuid 的一個很好的例子是 /bin/passwd 實用程序,它容許用戶設置或更改密碼。此實用程序必須可以寫入到不容許普通用戶更改的文件中(LCTT 譯註:此處是指 /etc/passwd 和 /etc/shadow)。所以它須要精心編寫,由 root 用戶擁有,並具備 setuid 位,以便它能夠更改密碼相關文件。
setgid 位對於可執行文件的工做方式相似。該文件將使用擁有它的組的權限運行。可是,setgid 對於目錄還有一個額外的用途。若是在具備 setgid 權限的目錄中建立文件,則該文件的組全部者將設置爲該目錄的組全部者。htm
最後,雖然文件粘滯位沒有意義會被忽略,但它對目錄頗有用。在目錄上設置的粘滯位將阻止用戶刪除其餘用戶擁有的該目錄中的文件。get
在八進制模式下使用 chmod 設置這些位的方法是添加一個值前綴,例如 4755,能夠將 setuid 添加到可執行文件中。在符號模式下,u 和 g 也可用於設置或刪除 setuid 和 setgid,例如 u+s,g+s。粘滯位使用 o+t 設置。(其餘的組合,如 o+s 或 u+t,是沒有意義的,會被忽略。)it
http://www.51cto.com/it/news/2019/1014/15367.html
https://article.pchome.net/content-2101735.html
http://www.pcpop.com/article/6067769.shtml
共享與特殊權限
回想一下前一篇文章中關於須要共享文件的財務團隊的示例。能夠想象,特殊權限位有助於更有效地解決問題。原來的解決方案只是建立了一個整個組能夠寫入的目錄:
drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance 此目錄的一個問題是,finance 組成員的用戶 dwayne 和 jill 能夠刪除彼此的文件。這對於共享空間來講不是最佳選擇。它在某些狀況下可能有用,但在處理財務記錄時可能不會!
另外一個問題是此目錄中的文件可能沒法真正共享,由於它們將由 dwayne 和 jill 的默認組擁有 - 極可能用戶私有組也命名爲 dwayne 和 jill,而不是 finance。
解決此問題的更好方法是在文件夾上設置 setgid 和粘滯位。這將作兩件事:使文件夾中建立的文件自動歸 finance 組全部,並防止 dwayne 和 jill 刪除彼此的文件。下面這些命令中的任何一個均可以工做:
sudo chmod 3770 finance sudo chmod u+rwx,g+rwxs,o+t finance 該文件的長列表如今顯示了所應用的新特殊權限。粘滯位顯示爲 T 而不是 t,由於 finance 組以外的用戶沒法搜索該文件夾。
drwxrws--T. 2 root finance 4096 Jul 6 15:35 finance