Linux的權限系統既簡單又複雜,簡單在于隻有讀寫執行三種權限,隻有擁有者、組使用者和其他使用者三種身份。複雜則在于實際使用的時候又不會了,與自己了解的不一樣了。
權限可以用rwx表示也可以用數字表示,r=4,w=2,x=1。是以rwx=7,rw-=6,r-x=5,r--=4,-wx=3,-w-=2,--x=1,---=0。
權限對于目錄和普通檔案的作用有所不同。我們建立這樣一個目錄結構來探究權限的作用。
1、目錄權限
目錄的讀權限表示使用者是否可以檢視該目錄下的内容,沒有讀權限像ls這種指令就沒權執行。
目錄的寫權限表示使用者是否可以修改該目錄下的内容,沒有寫權限像mkdir這種指令就沒權執行。
目錄的執行權限表示使用者是否可以在該目錄下執行指令,沒有執行權限像cd這種指令就沒權執行。
由于大部分操作都是通過指令,沒有執行權限,對該目錄内幾乎就無法進行任何操作了。由于讀和寫都依賴指令,是以沒有執行權限會影響到對目錄讀和寫的權限。(這裡不知道有沒有例外,歡迎大家補充指正)
父目錄不可讀不影響子目錄和檔案的讀權限。
父目錄不可寫不影響其子目錄和檔案的寫權限。
2、檔案權限
檔案的讀權限表示是否可以檢視檔案的内容。
檔案的寫權限表示是否可以修改檔案的内容。
檔案的執行權限表示該檔案是否可以作為可執行程式執行。
其實目錄也可以看作是特殊的檔案,目錄的内容就是目錄和檔案的索引。
了解了以上内容,對于不同使用者的權限也就好了解了,這裡pi是主使用者,grp是同組成員,other是其他成員。
目前test對于組成員有讀和執行權限,是以grp使用者可以進入和檢視test,但是無法建立檔案夾。
test對于其他成員隻有執行權限,是以可以進入目錄,但是無法檢視内容,不能建立檔案。
對于想要保護目錄下所有檔案内容的情況,設定目錄的讀寫權限是沒用的,必須将執行權限去掉才安全。最妥當的方式是直接設定想要保護的檔案的權限,從根源上保護檔案。
除了基本的權限,Linux還提供了三種其他特殊的權限,下面随權限的指令一并簡要介紹。
3、改變權限的指令
chmod:這是核心指令,可以修改所有檔案的所有權限,執行需要管理者權限。
setuid:設定指令的owner權限的執行位為s,表示有執行權限的其他使用者以該指令owner的權限執行指令。比如passwd指令。
小寫s和大寫S的差別是前者檔案的owner有執行權限,後者表示檔案的擁有者沒有執行權限。
setgid:設定指令的組權限的執行位為s,表示有執行權限的其他使用者以該指令所在組的權限執行指令。比如crontab指令。
這裡大S小s的含義跟user一樣,小寫s表示組使用者有執行權限,大寫S表示組使用者沒有執行權限。
是以,這兩個權限位使用有一定的危險性,尤其使用者或組是root,會讓其他有執行權限的使用者擁有root權限,so設定時要格外小心。
還有一種叫限制删除标志或粘性位,設定其他使用者的執行位為t,表示目錄内的檔案隻有其所有者或root可以删除移動,多用于共享目錄。比如/tmp目錄。
以下是man手冊給出的解釋:
受限删除标志或粘性位是單個位,其解釋取決于檔案類型。對于目錄,除非使用者擁有檔案或目錄,否則它可以防止非特權使用者删除或重命名目錄中的檔案, 這稱為目錄的受限删除标志,通常在全局可寫目錄(例如/ tmp)中找到。對于某些較舊系統上的正常檔案,該位将程式的文本圖像儲存在交換裝置上,是以在運作時将更快地加載, 這就是所謂的粘性位。
umask權限掩碼
建立目錄的預設權限是777和umask異或的結果;
建立檔案的預設權限是777與umask異或的結果再去掉所有的執行權限。
以上就是目前我所了解的Linux權限,限于個人水準,肯定有錯誤和遺漏,歡迎大家指正補充。