2,750 瀏覽數

特殊權限的設定

除了一般的 rwx 權限外,還有下列三種特殊權限
Step 0:前言
Step 1: SUID(Set user ID)
Step 2: SGID (Set Group ID)
Step3 :sTick(Set stick)

Step 0:前言
若要加上特殊權限,則要使用第四個數字來表示

  • SUID (Set user ID) : 4 —>檔案的執行,會自動轉換成檔案所有人的身分執行.
  • SGID (Set group ID) : 2 —> 和Setuid相同,不過這是會自動轉換成 Group 的身份來執行.

除了可以針對檔案做設定外,還可以對目錄設 SGID.之後目錄下所建立的檔案 Group會變的和目錄相同.

  • sTicky (t) : 1 —>只有擁有者有權限去刪除,搬移自己建立的檔案.

因為特殊權限和可執行(x)共用同一個位置,所以加上特殊權限時會有大小寫的分別,小寫 s,t  代表有特殊權限再加上可執行(x)的權限,大寫S,T 代表只有特別權限.為惟護系統安全,Linux 系統不理會 script 檔案的 SUID,GUID

Step 1: SUID(Set user ID)
ex: . SUID 測試
讓 cat 程式帶有 root 的身份去執行, root 登入,建立一個檔 test.txt ,並改變權限為 600(只有 root 能讀寫)

[root@benjr ~]# echo “ABCDEF" > test.txt
[root@benjr ~]# chmod 600 test.txt

此時除了 root 帳號本身外其他人沒有權限去看檔案內容

[root@benjr ~]# su – user1
passwd:
[root@benjr ~]# cat test.txt
cat:test.txt: Permission denied

讓 cat 程式帶有 root 的權限去開啟檔案

[root@benjr ~]# su -
passwd
 
[root@benjr ~]# ll /bin/cat
-rwxr-xr-x   1  root     root     20790  Mar  23   2002   /bin/cat
 
[root@benjr ~]# chmod 4755 /bin/cat
[root@benjr ~]# ll /bin/cat
-rwsr-xr-x   1  root     root     20790  Mar  23   2002   /bin/cat

此時其他人就可以用 cat 來看 test.txt 檔案

[root@benjr ~]# su – user1
passwd:
[root@benjr ~]# cat test.txt
ABCDEF

Step 2: SGID (Set Group ID)
ex.目錄的 SGID 測試

[root@benjr ~]# vi /etc/group
.
www:x:503:user1,user2

www 是個 group , 而他的成員有 user1 , user2 . 這是我事先設定的

[root@benjr ~]# cd /home
[root@benjr ~]# mkdir www
[root@benjr ~]# chmod g+w www
[root@benjr ~]# chown .www www
[root@benjr ~]# chmod g+s www
[root@benjr ~]# ll
drwxrwsr-x    2 root     www          4096 Nov 23 00:47 www

在 /home 目錄下建一個 www 的目錄 , 必將權限設定為 group 有權限讀,寫,執行,並設定 SGID.

[root@benjr ~]# su user1
[root@benjr ~]# touch t1

切換成 user1 ,建立一個檔叫 t1

[root@benjr ~]# su user2
[root@benjr ~]# touch t2

切換成 user2 ,建立一個檔叫 t2

[root@benjr ~]# ll
total 0
-rw-rw-r–    1 user1    www             0 Nov 23 00:53 t1
-rw-rw-r–    1 user2    www             0 Nov 23 00:54 t2

剛建立的檔案的 group owner ,都會變成 www

Step3 :sTick(Set stick)
ex. sTicky bit 測試

[root@benjr ~]# ls -dl /tmp
drwxrwxrwt    7 root     root         4096 Nov 23 00:19 /tmp

/tmp 目錄下就是很好的範例

[root@benjr ~]# su user1
[root@benjr ~]# touch t1
[root@benjr ~]# chmod 777 t1

切換成 user1 ,建立一個檔叫 t1 ,並將權限全開

[root@benjr ~]# su user2
[root@benjr ~]# touch t2
[root@benjr ~]# chmod 777 t2

切換成 user2,建立一個檔叫 t2 ,並將權限全開

[root@benjr ~]# ll
-rwxrwxrwx    1 user1    user1           0 Nov 23 00:27 t1
-rwxrwxrwx    1 user2    user2           0 Nov 23 00:29 t2
[root@benjr ~]# rm t1
rm: cannot unlink `t1′: Operation not permitted

雖然 user1 將 t1 檔案權限全開,但是 user2 還是無法將 t1 刪除.這都是因為 /tmp 目錄有設 sTick bit

[root@benjr ~]# su
[root@benjr ~]# chmod o-t /tmp
[root@benjr tmp]# ll -d /tmp
drwxrwxrwx    7 root     root         4096 Nov 23 00:29 /tmp

切換成 root , 並將sTick bit 移除

[root@benjr ~]# su user2
[root@benjr ~]# rm t1

切換成 user2 , 發現此時可以移除檔案 t1 .

[root@benjr ~]# su
[root@benjr ~]# chmod o+t /tmp
[root@benjr ~]# ll -d /tmp
drwxrwxrwt    7 root     root         4096 Nov 23 00:36 /tmp

恢復sTick bit 的設定

2 個網友的想法 “特殊權限的設定

  1. 自動參照通知: Linux – File | Benjr.tw

  2. 自動參照通知: chmod / chown / chgrp – 權限修改指令 | Benjr.tw

發表迴響