Linux的特殊權限

3.文件管理
本章同步視頻:https://edu.51cto.com/sd/e4874
3.3 特殊權限
3.3.1 默認權限 umask
1.默認權限
◆ 若使用者建立爲『檔案』則預設『沒有可執行( x )權限』,亦即只有 rw 這兩
個項目,也就是最大爲 666 分,預設權限如下:-rw-rw-rw-。
◆ 若用戶建立爲『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認爲
所有權限均開放,亦即爲 777 分,預設權限如下:drwxrwxrwx。
2.創建文件的默認權限
[root@localhost tmp]# touch aaa
[root@localhost tmp]# ll aaa
-rw-r--r--. 1 root root 0 Mar 13 21:05 aaa
[root@localhost tmp]# mkdir bbb
[root@localhost tmp]# ll -d bbb/
drwxr-xr-x. 2 root root 6 Mar 13 21:07 bbb/
3.查看 umask 值
[root@localhost tmp]# umask
0022
4.修改 umask 值
[root@localhost tmp]# umask 222
[root@localhost tmp]# umask
0222
[root@localhost tmp]# touch aaa.a
[root@localhost tmp]# ll aaa.a
-r--r--r--. 1 root root 0 Mar 13 21:08 aaa.a
[root@localhost tmp]# mkdir bbb.b
[root@localhost tmp]# ll -d bbb.b/
dr-xr-xr-x. 2 root root 6 Mar 13 21:08 bbb.b/
5.僞結論
創建文件的權限=默認權限-umask
6.疑問
[root@localhost tmp]# umask 033
[root@localhost tmp]# umask
0033
[root@localhost tmp]# touch aaa.033
[root@localhost tmp]# ll aaa.033
-rw-r--r--. 1 root root 0 Mar 13 21:17 aaa.033
#疑問:666-033=633 ?
or
666-033=644 ?
7.創建文件的權限的準確計算方法
◆ 將 umask 值轉換成二進制
033----->000 011 011
◆ 將二進制取反
000 011 011---->111 100 100
◆ 將反碼與默認權限的二進制數進行按位與運算
111 100 100
110 110 110
110 100 100
◆ 結果即爲創建文件的權限。
110 100 100 ---->644
8.不同用戶的 umask 默認不同
[calf@localhost ~]$ umask
0002
[root@localhost tmp]# umask
0022
3.3.2 隱藏權限
1.查看隱藏權限
(1)隱藏權限的效果
[root@localhost tmp]# ll aaa
-rw-r--r--. 1 root root 6 Mar 13 21:33 aaa
[root@localhost tmp]# echo "bbbb">aaa
-bash: aaa: Operation not permitted
#注:文件的擁有者且爲 root,明明具有寫權限,卻不能向 aaa 中寫入
數據。
(2)查看隱藏權限
[root@localhost tmp]# lsattr aaa
-----a---------- aaa
2.設置隱藏權限
(1)設置 a 屬性:不能寫入,只能追加
[root@localhost tmp]# cat aaa
aaaa
[root@localhost tmp]# chattr +a aaa
[root@localhost tmp]# echo "bbbb">aaa
-bash: aaa: Operation not permitted #寫入失敗
[root@localhost tmp]# cat aaa
aaaa #aaa 的內容未發生變化
[root@localhost tmp]# echo "bbbb">>aaa #追加內容成功
[root@localhost tmp]# cat aaa
aaaa
bbbb #aaa 的內容被追加了 bbbb
(2)取消 a 屬性
[root@localhost tmp]# chattr -a aaa
[root@localhost tmp]# cat aaa
aaaa
[root@localhost tmp]# echo "bbbb">aaa
[root@localhost tmp]# cat aaa
bbbb
(3)設定 i 屬性,不能寫入,不能追加,不能刪除
[root@localhost tmp]# chattr =i aaa
[root@localhost tmp]# cat aaa
aaaa
bbbb
[root@localhost tmp]# echo "cccc">aaa
-bash: aaa: Permission denied
[root@localhost tmp]# echo "cccc">>aaa
-bash: aaa: Permission denied
[root@localhost tmp]# rm -f aaa
rm: cannot remove ‘aaa’: Operation not permitted
3.3.3 SUID、SGID、SBIT
1.SUID
(1)SUID
⚫ SUID 權限僅對二進制程序(binary program)有效;
⚫ 執行者對於該程序需要具有 x 的可執行權限;
⚫ 本權限僅在執行該程序的過程中有效 (run-time);
⚫ 執行者將具有該程序擁有者 (owner) 的權限。
(2)無 SUID 的效果
[root@localhost tmp]# ll aaa
-rw-r-----. 1 root root 10 Mar 13 21:42 aaa
[root@localhost tmp]# su - calf
Last login: Fri Mar 13 21:26:08 CST 2020 on pts/0
[calf@localhost ~]$ cd /tmp/
[calf@localhost tmp]$ cat aaa
cat: aaa: Permission denied
#注:注意賬號切換
(3)設置 SUID
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
[root@localhost ~]# chmod 4755 /bin/cat
[root@localhost ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
注:設置 SUID 的另外一種方法:
[root@localhost tmp]# chmod u+s /bin/cat
(4)設置 SUID 後的效果
[root@localhost ~]# su - calf
Last login: Fri Mar 13 22:01:39 CST 2020 on pts/0
[calf@localhost ~]$ cd /tmp/
[calf@localhost tmp]$ cat aaa
aaaa
bbbb
#注:注意賬號切換
(5)S 與 s 的區別
[root@localhost tmp]# chmod u-x /bin/cat
[root@localhost tmp]# ll /bin/cat
-rwSr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
#注:1.S 表示文件擁有者無 x 權限,s 表示文件擁有者有 x 權限。
2.命令執行者必須具有 x 權限,不受文件擁有者是否有 x 權限的影
響。
2.SGID
(1)SGID 對文件的效果
⚫ SGID 對二進制程序有用;
⚫ 程序執行者對於該程序來說,需具備 x 的權限;
⚫ 執行者在執行的過程中將會獲得該程序羣組的支持!
#注:效果和 SUID 一樣,只是 SUID 是獲得擁有者的權限,而 SGID 是
獲得羣組的權限。
(2)SGID 對目錄的效果
⚫ 用戶若對於此目錄具有 r 與 x 的權限時,該用戶能夠進入此目錄;
⚫ 用戶在此目錄下的有效羣組(effective group)將會變成該目錄的羣組;
⚫ 若用戶在此目錄下具有 w 的權限(可以新建檔案),則使用者所建立的新
檔案,該新檔案的羣組與此目錄的羣組相同。
(3)SGID 對目錄效果測試
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 2777 dir
#設置 SGID,同時開通滿權限
[root@localhost tmp]# ll -d dir/
drwxrwsrwx. 2 root root 17 Mar 13 22:20 dir/
#注:其他用戶需要有寫權限
[root@localhost tmp]# touch dir/root
#root 賬號創建了文件 root
[root@localhost tmp]# su - calf
Last login: Fri Mar 13 22:05:04 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf
#calf 賬號創建了文件 calf
[root@localhost tmp]# ll dir
total 0
-rw-rw-r--. 1 calf root 0 Mar 13 22:26 calf
-rw-r--r--. 1 root root 0 Mar 13 22:20 root
#注:不同用戶創建的文件都屬於 root 組,即父目錄 dir 所屬的組。
(4)s 與 S 的含義
[root@localhost tmp]# chmod g-x dir/
[root@localhost tmp]# ll -d dir/
drwxrwSrwx. 2 root root 41 Mar 13 22:30 dir
#注:1.S 表示同組用戶無 x 權限,s 表示同組用戶有 x 權限。
2.文件的創建者必須對該目錄有 w 權限,與同組用戶是否具有 w
權限無關。
3.SBIT
(1)SBIT 的效果
⚫ 當用戶對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
⚫ 當用戶在該目錄下建立檔案或目錄時,僅有自己與 root 纔有權力刪除
該檔案。
(2)設置 SBIT
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 1777 dir
[root@localhost tmp]# ll -d dir
drwxrwxrwt. 2 root root 6 Mar 13 22:47 dir
#注:只加 SBIT 的命令也可以寫成:chmod o+t dir
(3)準備環境
[root@localhost tmp]# su - calf #切換到 calf
Last login: Fri Mar 13 22:37:37 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf{1,2,3} #創建 3 個文件
[root@localhost tmp]# su - stu #切換到 stu
Last login: Thu Mar 5 10:56:32 CST 2020 on pts/2
[stu@localhost ~]$ touch /tmp/dir/stu{1,2,3} #創建 3 個文件
[root@localhost tmp]# ll dir
total 0
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf1
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf2
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf3
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu1
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu2
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu3
(4)測試刪除
[calf@localhost ~]$ cd /tmp/dir/
[calf@localhost dir]$ ls
calf1 calf2 calf3 stu1 stu2 stu3
[calf@localhost dir]$ rm -f calf1 #測試刪除文件
[calf@localhost dir]$ ls
calf2 calf3 stu1 stu2 stu3 #文件確實被刪除
[calf@localhost dir]$ rm -f stu1
rm: cannot remove ‘stu1’: Operation not permitted
#但不能刪除別人的文件
#注:用戶對目錄具有 w 權限,即可刪除該目錄下的文件。但此例中,
用戶只能刪除擁有者是自己的文件,不能刪除擁有者是其他用戶的文件。
這就是 SBIT 的效果。
(5)T 和 t 的區別
[root@localhost tmp]# chmod o-x dir/
[root@localhost tmp]# ll -d dir
drwxrwxrwT. 2 root root 63 Mar 13 22:54 dir
#注:1.T 表示其他用戶不具有 x 權限,t 表示其他用戶具有 x 權限。
2.操作者需要對目錄具有 w 權限。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章