Linux中文件權限
Linux中每個文件都有一個特定的擁有者(一般是創建它的用戶)和所屬用戶組,這是它的固有屬性。文件可以利用這兩個固有屬性來規定它的擁有者或者是所屬用戶組內的用戶是否擁有對它的訪問權利,即讀、寫和執行的權利。此外爲了提高適應性,文件還規定了其他不相關的人等的訪問權限,也就是第三個固有屬性。這三個固有屬性和三個權利合起來,就構成了文件針對系統中所有用戶的訪問控制,也就構成了Linux中的文件權限體系。
1.1 使用ls命令的-l選項查看root家目錄,結果如下
[root@localhost ~]# ll total6 lrwxrwxrwx. 1 root root 9 Apr 9 02:46 a -> test1.txt drwxr-xr-x. 2 root root 6 Apr 9 05:22 day01 rw-r--r--. 1 root root 71680 Apr 2 22:52 demo01 rwxr-xr-x. 1 root root 18 Apr 9 02:59 test1.txt
1.2 單獨拿出一行來分析,結果如下:
圖1 文件屬性結構
1.3 文件權限和類型(圖1中的第1個字段)
這些屬性當中最重要的就是前面的文件類型和權限了,那麼rwx代表什麼呢?詳見下圖:
圖2 文件類型和權限
Linux中的權限控制是當某個用戶需要訪問某個文件時,系統就讀取這個文件的屬性和權限信息與當前的UID和GID進行對比,來確定當前用戶是文件的擁有者還是其所屬組的用戶,或者是毫無關係。然後根據這些比對結果和用戶執行的動作來判斷是否滿足權限要求。這也引出了文件權限與命令的一些關係,因爲Linux系統中一個文件是否爲可執行文件是通過屬性來決定的,而不是後綴名。
首先說說“r”權限,顧名思義(read簡寫)
對目錄而言,“r”表示的是遍歷目錄中的所有文件名和子目錄名,僅僅是遍歷文件名而已,並不是實際內容。
例:
[user1@localhost demo2]$ ll total 0 [user1@localhost demo2]$ mkdir dir1 #在當前目錄中創建目錄dir1 [user1@localhost demo2]$ ll total 0 drwxrwxr-x. 2 user1 user1 6 Apr 10 00:30 dir1 #看出dir1的權限是775 [user1@localhost demo2]$ touch ./dir1/a.txt ./dir1/b.txt #在目錄dir1中創建a和b兩個文件 [user1@localhost demo2]$ ll ./dir1/ total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 04:21 a.txt #查看a和b文件 -rw-rw-r--. 1 user1 user1 0 Apr 10 04:21 b.txt [user1@localhost demo2]$ chmod -r dir1/ #去除dir1目錄的“r”權限 [user1@localhost demo2]$ ll total 0 d-wx-wx--x. 2 user1 user1 32 Apr 10 04:21 dir1 #“r”權限去除成功 [user1@localhost demo2]$ ll ./dir1/ ls: cannot open directory ./dir1/: Permission denied #再次查看dir1中的內容被拒絕 #提示權限不夠 #######這說明“r”權限在目錄中的控制作用,要查看目錄中文件列表,必須具有“r”權限
對於文件而言,“r”表示的是遍歷文件中的實際內容,文件中不管有沒有內容,擁有“r”權限,在操作的時候都會去遍歷一遍。
例:
[user1@localhost demo2]$ ll total 0 [user1@localhost demo2]$ echo "helloword" >aest.txt #創建aest.txt文件,並寫入內容 [user1@localhost demo2]$ ll total 4 -rw-rw-r--. 1 user1 user1 10 Apr 10 05:45 aest.txt #查看aest.txt文件權限664 [user1@localhost demo2]$ cat aest.txt ##查看aest.txt文件的內容 helloword [user1@localhost demo2]$ chmod -r aest.txt #去除aest.txt的“r”權限 [user1@localhost demo2]$ ll total 4 #“r”權限已被取消 --w--w----. 1 user1 user1 10 Apr 10 05:45 aest.txt [user1@localhost demo2]$ cat aest.txt #再次查看aest.txt文件內容 cat: aest.txt: Permission denied #訪問被拒絕,提示權限不夠 ######這就是“r”權限對於文件的訪問控制 ######執行者要查看文件的內容,就必須具有該文件的“r”權限
接着說說“w”權限,(write的簡寫)
對目錄而言,“w”權限就是說可以在該目錄中修改信息,什麼是修改信息呢?在目錄中信息就是各種文件的名稱,修改信息就是與該目錄下的文件名或子目錄名的變動有關的操作,注意:指的是名字。具體如下:
1)在該目錄下新建新的文件或子目錄。(就是增加文件名)
[user1@localhost demo2]$ mkdir dir2;ll #在demo2目錄中創建dir2目錄並查看其權限 total 0 drwxrwxr-x. 2 user1 user1 6 Apr 10 03:33 dir2 #當前dir2權限爲775 [user1@localhost demo2]$ touch ./dir2/a.txt;ll ./dir2/ #測試在dir2中創建a.txt文件 total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 03:34 a.txt #在dir2中成功創建a.txt文件 [user1@localhost demo2]$ chmod -w dir2/ #去掉dir2目錄的“w”權限 [user1@localhost demo2]$ ll total 0 dr-xr-xr-x. 2 user1 user1 19 Apr 10 03:34 dir2 #“w”權限去除成功 [user1@localhost demo2]$ cd dir2/ [user1@localhost dir2]$ touch b.txt #再在dir2目錄中創建b.txt文件 touch: cannot touch ‘b.txt’: Permission denied #提示創建失敗,權限不夠 #######這就是“w”權限對在目錄中添加文件的控制作用 #######要在目錄中創建文件,執行者必須擁有該目錄的“w”權限
2)刪除該目錄下已經存在的文件或子目錄(不論該文件或子目錄的權限如何),注意:這點很重要,用戶能否刪除一個文件或目錄,看的是該用戶是否具有該文件或目錄所在的目錄的w權限。
例:
[user1@localhost demo2]$ ll #查看dir2目錄的權限 total 0 drwxrwxr-x. 2 user1 user1 36 Apr 10 08:48 dir2 #當前dir2的權限是775 [user1@localhost demo2]$ ll ./dir2/ #查看dir2目錄下的文件 total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 a.txt -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt [user1@localhost demo2]$ rm -r dir2/a.txt #刪除dir2目錄中的a.txt文件 [user1@localhost demo2]$ ll dir2/ total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt #dir2中的a.txt文件刪除成功 [user1@localhost demo2]$ chmod -w dir2 #去除dir2目錄的“w”權限 [user1@localhost demo2]$ ll total 0 dr-xr-xr-x. 2 user1 user1 19 Apr 10 09:01 dir2 #dir2的“w”權限去除成功 [user1@localhost demo2]$ rm -r ./dir2/b.txt #測試是否可以刪除dir2目錄下的b.txt文件 rm: cannot remove ‘./dir2/b.txt’: Permission denied #刪除失敗,權限不夠 ######這就說明了“w”權限對刪除目錄中文件的控制作用 ######要刪除目錄中的文件,執行者必須具有該目錄的“w”權限
3)將該目錄下已經存在的文件或子目錄進行重命名。
[user1@localhost demo2]$ ll #顯示當前目錄下的dir2目錄 total 0 drwxrwxr-x. 2 user1 user1 32 Apr 10 08:45 dir2 #dir2目錄權限爲775 [user1@localhost demo2]$ ll ./dir2/ #顯示dir2目錄中的文件 total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 a.txt -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt [user1@localhost demo2]$ mv ./dir2/a.txt ./dir2/a.new.txt #修改dir2中的a.txt文件爲a.new.txt [user1@localhost demo2]$ ll ./dir2/ total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 a.new.txt #修改成功 =-rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt [user1@localhost demo2]$ chmod -w dir2/ #去除dir2目錄的“w”權限 [user1@localhost demo2]$ ll total 0 dr-xr-xr-x. 2 user1 user1 36 Apr 10 08:48 dir2 #“w”權限去除成功 [user1@localhost demo2]$ mv ./dir2/b.txt ./dir2/b.new.txt #測試現在是否可以修改dir2目錄中的b.txt文件名 mv: cannot move ‘./dir2/b.txt’ to ‘./dir2/b.new.txt’: Permission denied #結果是拒絕修改! #####這就說明“w”對目錄中文件名的控制作用,執行者要修改目錄下的文件名,必須擁有“w”權限
4)轉移該目錄內的文件或子目錄的位置。
[user1@localhost demo2]$ ll #查看dir2目錄的權限 total 0 drwxrwxr-x. 2 user1 user1 32 Apr 10 09:15 dir2 #dir2目錄的權限爲775 [user1@localhost demo2]$ ll ./dir2/ #查看dir2目錄中的文件 total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 09:15 a.txt -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt [user1@localhost demo2]$ mv ./dir2/a.txt /tmp/ #將dir2中的a.txt文件移動到/tmp中去 [user1@localhost demo2]$ ll ./dir2/ total 0 -rw-rw-r--. 1 user1 user1 0 Apr 10 08:45 b.txt #成功將a.txt文件移動到/tmp中去了 [user1@localhost demo2]$ chmod -w dir2/ #去除dir2目錄的“w”權限 [user1@localhost demo2]$ ll total 0 dr-xr-xr-x. 2 user1 user1 19 Apr 10 09:15 dir2 #權限去除成功 [user1@localhost demo2]$ mv ./dir2/b.txt /tmp/ #測試是否可以移動dir2目錄下的b.txt文件 mv: cannot remove ‘./dir2/b.txt’: Permission denied #權限不夠,不能移動 #####這就說明“w”權限對移動目錄的控制,其實就和刪除是一樣的, #####只要文件要離開這個目錄,就必須有“w”權限
對文件而言,“w”權限是對文件內容的控制,只要修改文件內容,就必須要有“w”權限,比如vim,echo等命令對文本的修改,執行者就必須有“w”權限,否則是不可以編輯文件的!
例:
[user1@localhost demo2]$ ll #查看當前目錄下的a.txt文件 total 4 -rw-rw-r--. 1 user1 user1 14 Apr 10 09:30 a.txt #權限爲664 [user1@localhost demo2]$ cat a.txt #查看a.txt文件中的內容 helloword,one [user1@localhost demo2]$ echo "wordhello,two" >>a.txt #向a.txt文件中增加內容 [user1@localhost demo2]$ cat a.txt #查看此時的a.txt文件內容 helloword,one wordhello,two #文件內容增加成功 [user1@localhost demo2]$ chmod -w a.txt #去除文件a.txt的“w”權限 [user1@localhost demo2]$ ll total 4 -r--r--r--. 1 user1 user1 28 Apr 10 09:31 a.txt #權限去除成功 [user1@localhost demo2]$ echo "wordhello,three" >>a.txt #此時增加a.txt文件內容 -bash: a.txt: Permission denied #結果增加失敗,提示權限不夠
再說說“x”權限,(exec簡寫)
對於目錄文件,“x”權限控制用戶是否能打開它,只有具備了“x”權限,才能打開目錄。而要查看目錄下的內容,就必須有“r”權限,即查看顯示的相關命令都必須具有文件的“r”權限纔可以訪問文件,比如ls命令,要顯示ls對目錄文件的執行結果,執行者必須具有該文件的x和r權限,畢竟是先打開(x),再顯示(r)嘛。
例如:
1.創建目錄文件day001,看出默認創建目錄文件權限是775 [user1@localhost demo1]$ mkdir day001 ; ll total 0 drwxrwxr-x. 2 user1 user1 6 Apr 9 23:03 day001 2.在該目錄中創建文件a.txt和b.txt,看出默認創建文件權限是:661;執行ll命令會顯示出a和b文件 [user1@localhost demo1]$ cd day001/; touch a.txt b.txt;ll total 0 -rw-rw-r--. 1 user1 user1 0 Apr 9 23:06 a.txt -rw-rw-r--. 1 user1 user1 0 Apr 9 23:06 b.txt 3.我們去掉目錄day001的“rw”權限,再執行cd命令和ll命令,看看結果: [user1@localhost day001]$ cd .. ; ll #返回上級目錄執行ll命令查看day001權限 total 0 drwxrwxr-x. 2 user1 user1 32 Apr 9 23:06 day001 #當前day001權限爲775 [user1@localhost demo1]$ chmod a-rw day001/ #修改day001權限爲111,就是去掉所有的rw權限 [user1@localhost demo1]$ ll total 0 d--x--x--x. 2 user1 user1 32 Apr 9 23:06 day001 #發現權限已經爲111了 [user1@localhost demo1]$ cd day001/ #執行cd命令,可以進入day001目錄,因爲進入目錄只需要“x”權限 [user1@localhost day001]$ ll #在day001中執行ll命令發現權限不夠,這就是沒有“r”權限的結果 ls: cannot open directory .: Permission denied #####對於目錄而言,“x”權限就是一個開關,執行者擁有這個目錄的開關“x”,才能進入該目錄
對於腳本文件,要執行就必須具有“x”權限。
[user1@localhost demo2]$ ll #查看a.txt文件的權限 total 4 -rw-rw-r--. 1 user1 user1 44 Apr 10 09:46 a.txt [user1@localhost demo2]$ echo "echo 'hello word'" >a.txt [user1@localhost demo2]$ cat a.txt #查看a.txt文件的內容 echo 'hello word' [user1@localhost demo2]$ sh a.txt #在沒有“x”權限時,嘗試sh shell執行a.txt文件 hello word [user1@localhost demo2]$ ./a.txt #嘗試.執行 -bash: ./a.txt: Permission denied #權限不夠! [user1@localhost demo2]$ chmod +x a.txt #給文件a.txt加上“x”權限 [user1@localhost demo2]$ ./a.txt #執行a.txt文件 hello word #打印出結果了,是可執行的文件
1.4 修改文件基本權限:
chmod [OPTION]... MODE[,MODE]... FILE...
數字法:r=4 w=2 o=1 [user1@localhost demo]$ ll test.txt -rw-rw-r--. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ chmod 744 test.txt [user1@localhost demo]$ ll test.txt -rwxr--r--. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ 字符法: [user1@localhost demo]$ ll test.txt -rw-r--r--. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ chmod u+x test.txt [user1@localhost demo]$ ll test.txt -rwxr--r--. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ chmod o+w test.txt [user1@localhost demo]$ ll test.txt -rwxr--rw-. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ chmod g+w test.txt [user1@localhost demo]$ ll test.txt -rwxrw-rw-. 1 user1 user1 0 Apr 9 06:34 test.txt [user1@localhost demo]$ chmod a-r test.txt [user1@localhost demo]$ ll test.txt --wx-w--w-. 1 user1 user1 0 Apr 9 06:34 test.txt
2.深入文件權限
其實Linux文件權限除了“r”、“w”、“x”外,還有“s”、“t”兩種權限。只不過“s”和“t”比較特殊,是建立在“x”權限基礎上的,它們與操作系統的賬號和系統進程相關。
“s”和“t”存在的必要條件是相應的“x”權限必須存在。“s”這個標記可以出現在文件擁有者的x權限位上,也可以出現在文件所屬組的x權限位上。那麼其他用戶位上的“x”權限位是否也可以被取代呢?答案是肯定的,只不過不再是“s”取代,而是“t”去取代,如下圖:
圖3
2.1 執行如下命令:
[user1@localhost ~]$ ls -l /bin/su -rwsr-xr-x. 1 root root 32088 Nov 5 18:27 /bin/su [user1@localhost ~]$
從上命令結果,能夠看到su這個命令的文件權限是“-rws r-x r-x”,擁有者的“x”權限位上是“s”,這就是SUID了,SUID權限擁有這樣的功能:
1).SUID僅對二進制程序有效
2).執行者對該程序有“x”權限
3).執行權限僅在執行過程中有效
4).執行者將具有該程序擁有者的權限
su這個命令,無論任何人,執行它的瞬間都將擁有root權限,因爲su命令的擁有者是root,只是這個權限僅在執行su命令時有效。這也是su命令能切換用戶的原理。
設置SUID的方法就是使用“u+s”來改變權限。SUID在Linux中是非常常見的,那些需要提供給普通用戶,但又需要root權限才能正常運行的程序,基本上都擁有SUID,比如:passwd,mount等,這也是實際用戶和有效用戶不一致的觸發條件。
2.1.1 下面顯示了一些SUID權限的命令:
[user1@localhost ~]$ ll /bin/ | grep "rws" #發現的是只要有“s”出現,任何用戶都具有“x”權限 -rwsr-xr-x. 1 root root 52960 Nov 5 14:16 at -rwsr-xr-x. 1 root root 64240 Nov 5 16:17 chage -rws--x--x. 1 root root 23960 Nov 5 18:27 chfn -rws--x--x. 1 root root 23872 Nov 5 18:27 chsh -rwsr-xr-x. 1 root root 57552 Mar 31 2016 crontab -rwsr-xr-x. 1 root root 32008 Nov 5 14:06 fusermount -rwsr-xr-x. 1 root root 78216 Nov 5 16:17 gpasswd -rwsr-xr-x. 1 root root 61328 Nov 5 21:42 ksu -rwsr-xr-x. 1 root root 44232 Nov 5 18:27 mount -rwsr-xr-x. 1 root root 41776 Nov 5 16:17 newgrp -rwsr-xr-x. 1 root root 27832 Jun 10 2014 passwd -rwsr-xr-x. 1 root root 27680 Nov 5 18:09 pkexec -rwsr-xr-x. 1 root root 32088 Nov 5 18:27 su -rwsr-xr-x. 1 root root 31968 Nov 5 18:27 umount -rwsr-xr-x. 1 root root 2409560 Nov 5 20:44 Xorg [user1@localhost ~]$
2.2 執行如下命令:
[user1@localhost ~]$ ls -l /usr/bin/locate #查看locate命令文件 -rwx--s--x. 1 root slocate 40512 Nov 5 11:07 /usr/bin/locate [user1@localhost ~]$
從上述命令結果看出,locate命令的文件權限是“rwx --s --x”,這就是SGID,擁有SGID的權限有:
1).SGID對二進制有效
2).執行者對該程序有x權限
3).執行者在執行過程中將會獲得該程序所屬用戶組的支持
SGID用在locate命令上,是期望任何用戶在執行這個命令的時候能夠讀取mlocate.db文件的內容,這個文件位於/var/lib/mlocate/mlocate.db中,它與locate命令有相同的用戶組,而且用戶組具有“r”權限,其他用戶沒有任何權限。
[root@localhost ~]# ll /usr/bin/locate -rwx--s--x. 1 root slocate 40512 Nov 5 11:07 /usr/bin/locate [root@localhost ~]# ll /var/lib/mlocate/ total 3568 -rw-r-----. 1 root slocate 3651470 Apr 10 03:07 mlocate.db #####看出locate命令和mlocate.db文件屬於相同的用戶組
SGID除了用在二進制程序上,還可以用在目錄上。當一個目錄設置了SGID權限後,它將具有如下功能:
1).用戶若對此目錄擁有“r”和“x”權限時,該用戶能夠進入此目錄查看文件名
2).該用戶在此目錄下的有效用戶組將變成該目錄的用戶組。若用戶在此目錄下具有“w”的權限,則用戶所創建的新文件的用戶組與此目錄的用戶組相同。
根據這一特性,進入這類目錄的用戶就會發生有效用戶組和實際用戶組不一致的情況。而另一種導致有效用戶組與實際用戶組不一致的情況是使用newgrp命令。而有效用戶組所起到的作用就在於其創建文件時文件的用戶組。
[user1@localhost ~]$ ll /tmp/ | grep "day" #查看/tmp中的day001文件 drwxrwxr-x. 2 user1 user1 6 Apr 12 12:46 day001 #屬組是user1 [user1@localhost ~]$ su - user2 #切換到user2用戶 [user2@localhost ~]$ cd /tmp/ [user2@localhost tmp]$ ll | grep day001 #user2用戶查看/tmp中的day001文件 drwxrwxr-x. 2 user1 user1 6 Apr 12 12:46 day001 [user2@localhost tmp]$ cd day001/; touch a.txt;ll #user2在/tmp/day001中創建文件 touch: cannot touch ‘a.txt’: Permission denied #權限不夠,原來是其他用戶沒有“w”權限 [user2@localhost day001]$ su - user1 #切換到user1用戶下,添加其他用戶的“w”權限 [user1@localhost ~]$ chmod o+w /tmp/day001/ [user1@localhost ~]$ ll /tmp/| grep day #其他用戶“w”權限添加成功 drwxrwxrwx. 2 user1 user1 6 Apr 12 12:46 day001 [user1@localhost ~]$ su - user2 #切換到user2用戶 [user2@localhost ~]$ cd /tmp/day001/ [user2@localhost day001]$ touch a.txt;ll #創建a.txt文件並查看其屬組 -rw-rw-r--. 1 user2 user2 0 Apr 12 12:51 /tmp/day001/a.txt [user2@localhost ~]$ su - user1 #切換到user1下面,設置/tmp/day001文件的SGID屬性 [user1@localhost ~]$ chmod g+s /tmp/day001/ [user1@localhost ~]$ ll /tmp/ | grep "day" #查看day001文件權限 drwxrwsrwx. 2 user1 user1 6 Apr 12 12:46 day001 [user1@localhost ~]$ su - user2 #切換到user2用戶,測試在day001中創建文件的屬組 [user2@localhost ~]$ touch /tmp/day001/a.user2.txt #user2在day001中創建b.txt [user2@localhost ~]$ ll /tmp/day001/b.txt #查看user2的b.txt文件的屬組 -rw-rw-r--. 1 user2 user1 0 Apr 12 12:51 /tmp/day001/b.txt 3#user2的b.txt文件屬組是user1 ####這就是“s”權限對於目錄的控制作用!
2.3 執行如下命令:
[user1@localhost ~]$ ll / | grep "tmp" drwxrwxrwt. 53 root root 8192 Apr 9 09:26 tmp [user1@localhost ~]$
如上命令結果看出,/tmp文件就是“rwx rwx rwt”權限,也就是SBIT。僅對目錄有效。對目錄的作用如下:
1).用戶若對此目錄有“w”和“x”的權限,即擁有寫的權限(這和普通目錄一樣)
2).當用戶在此目錄下建立了文件或目錄,僅自己或root纔有權利刪除文件(這也和普通目錄一樣)
換句話說就是:當用戶U在目錄D下建立了文件F,若D擁有SBIT權限,則僅用戶U和root可以刪除文件。
SBIT應用的典型例子就是/tmp目錄。
例:
[root@localhost ~]# mkdir /testdemo #root在/下創建一個類似tmp的目錄文件,用於多用戶共享 [root@localhost ~]# cd / [root@localhost /]# ll | grep "testdemo" #查看testdemo的權限 drwxr-xr-x. 2 root root 6 Apr 12 13:24 testdemo [root@localhost /]# chmod o+wt testdemo/ #給所有的用戶添加“wt”權限,讓其可以創建文件 [root@localhost /]# ll | grep "testdemo" #查看目前testdemo權限 drwxr-xrwt. 2 root root 6 Apr 12 13:24 testdemo #當前其他用戶權限爲“rwt” [root@localhost /]# su - user1 #切換到user1,在testdemo目錄中創建文件 [user1@localhost ~]$ cd /testdemo/ #創建兩個文件user1.a.txt和user1.b.txt [user1@localhost testdemo]$ mkdir user1.a.txt user1.b.txt [user1@localhost testdemo]$ su - user2 切換到user2用戶,同樣創建文件 [user2@localhost ~]$ cd /testdemo/ [user2@localhost testdemo]$ mkdir user2.a.txt user2.b.txt ###測試“t”查找的時候,普通用戶是否可以刪除其他用戶的文件 [user2@localhost testdemo]$ rm -r user1.a.txt/ rm: remove write-protected directory ‘user1.a.txt/’? y rm: cannot remove ‘user1.a.txt/’: Operation not permitted #權限禁止!刪不掉 [user2@localhost testdemo]$ su - #切換到root下去掉“t”權限,在測試是否可以刪其他文件 [root@localhost ~]# chmod o-t /testdemo/ [root@localhost ~]# ll / | grep "testdemo" drwxr-xrwx. 6 root root 82 Apr 12 13:26 testdemo #當前用戶權限“rwx” [root@localhost ~]# su - user2 #切換到user2,測試是否可以刪除user1的文件 [user2@localhost ~]$ cd /testdemo/ [user2@localhost testdemo]$ ll total 0 drwxrwxr-x. 2 user1 user1 6 Apr 12 13:25 user1.a.txt drwxrwxr-x. 2 user1 user1 6 Apr 12 13:25 user1.b.txt drwxrwxr-x. 2 user2 user2 6 Apr 12 13:26 user2.a.txt drwxrwxr-x. 2 user2 user2 6 Apr 12 13:26 user2.b.txt [user2@localhost testdemo]$ rm -r user1.a.txt/ #測試刪除user1的user1.a.txt文件 #rm: remove write-protected directory ‘user1.a.txt/’? y [user2@localhost testdemo]$ ll #刪除成功 total 0 drwxrwxr-x. 2 user1 user1 6 Apr 12 13:25 user1.b.txt drwxrwxr-x. 2 user2 user2 6 Apr 12 13:26 user2.a.txt drwxrwxr-x. 2 user2 user2 6 Apr 12 13:26 user2.b.txt ####這就看出了“t”權限對於刪除文件的文件限制!普通目錄只要有“wx”就可以刪文件。
修改文件s或t權限:
同樣的可以使用字符和數字來改變屬性,下面就只說說數字表示法。原來rwx是3位(744)數字表示,而現在是4位(4755)表示,其中第一位是 SUID=4、SGID=2、SBIT=1中的一個。
[user1@localhost demo]$ ll Test -rwxrwxr-x. 1 user1 user1 0 Apr 9 09:51 Test [user1@localhost demo]$ chmod 4775 Test [user1@localhost demo]$ ll Test -rwsrwxr-x. 1 user1 user1 0 Apr 9 09:51 Test [user1@localhost demo]$ chmod 2775 Test [user1@localhost demo]$ ll Test -rwxrwsr-x. 1 user1 user1 0 Apr 9 09:51 Test [user1@localhost demo]$ chmod 1775 Test [user1@localhost demo]$ ll Test -rwxrwxr-t. 1 user1 user1 0 Apr 9 09:51 Test