除了一般的 rwx 權限外,還有下列三種特殊權限
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@localhost ~]# echo “ABCDEF" > test.txt [root@localhost ~]# chmod 600 test.txt
此時除了 root 帳號本身外其他人沒有權限去看檔案內容
[root@localhost ~]# su – user1 passwd: [root@localhost ~]# cat test.txt cat:test.txt: Permission denied
讓 cat 程式帶有 root 的權限去開啟檔案
[root@localhost ~]# su - passwd [root@localhost ~]# ll /bin/cat -rwxr-xr-x 1 root root 20790 Mar 23 2002 /bin/cat [root@localhost ~]# chmod 4755 /bin/cat [root@localhost ~]# ll /bin/cat -rwsr-xr-x 1 root root 20790 Mar 23 2002 /bin/cat
此時其他人就可以用 cat 來看 test.txt 檔案
[root@localhost ~]# su – user1 passwd: [root@localhost ~]# cat test.txt ABCDEF
ex: passwd 指令
Linux 系統下部分程式是被設定成為 SUID,我們可以透過 find 指令找出檔案屬性有 SUID 者 -4000(SUID) 以及 -2000 (SGID) 與 -1000 (sTicky Bit) .
[root@localhost ~]# find / -perm -4000 [root@localhost ~]# find / -perm -2000 [root@localhost ~]# find / -perm -1000
當一般使用者要更改密碼時,需要修改 /etc/passwd 與 /etc/shadow 但這些檔案都需要有 administrator (root) 的權限才有辦法改變,所以 passwd 指令 (開放部分參數給一般使用者使用) 都是透過 SUID 來完成.
[root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
可以觀察一下當使用者 Ben 在修改密碼時,使用的是誰的權限.
Ben 使用者登入
[ben@localhost ~]$ passwd 更改使用者 ben 的密碼。 正在更改 ben 的 STRESS 密碼。 (目前的)UNIX 密碼
root 使用者登入
[root@localhost ~]# ps -aux | grep -i passwd root 8198 0.0 0.3 221436 2988 pts/1 S+ 17:44 0:00 passwd root 12306 0.0 0.0 112724 992 pts/0 R+ 18:59 0:00 grep --color=auto -i passwd
透過指令 ps 來觀察, ben 更改使用者密碼時的確是使用 root 身份來更新.
Step 2: SGID (Set Group ID)
ex: 目錄的 SGID 測試
[root@localhost ~]# vi /etc/group . www:x:503:user1,user2
www 是個 group , 而他的成員有 user1 , user2 . 這是我事先設定的
[root@localhost ~]# cd /home [root@localhost ~]# mkdir www [root@localhost ~]# chmod g+w www [root@localhost ~]# chown .www www [root@localhost ~]# chmod g+s www [root@localhost ~]# ll drwxrwsr-x 2 root www 4096 Nov 23 00:47 www
在 /home 目錄下建一個 www 的目錄 , 必將權限設定為 group 有權限讀,寫,執行,並設定 SGID.
[root@localhost ~]## su user1 [root@localhost ~]# touch t1
切換成 user1 ,建立一個檔叫 t1
[root@localhost ~]# su user2 [root@localhost ~]# touch t2
切換成 user2 ,建立一個檔叫 t2
[root@localhost ~]# 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@localhost ~]# ls -dl /tmp drwxrwxrwt 7 root root 4096 Nov 23 00:19 /tmp
/tmp 目錄下就是很好的範例
[root@localhost ~]# su user1 [root@localhost ~]# touch t1 [root@localhost ~]# chmod 777 t1
切換成 user1 ,建立一個檔叫 t1 ,並將權限全開
[root@localhost ~]# su user2 [root@localhost ~]# touch t2 [root@localhost ~]# chmod 777 t2
切換成 user2,建立一個檔叫 t2 ,並將權限全開
[root@localhost ~]# ll -rwxrwxrwx 1 user1 user1 0 Nov 23 00:27 t1 -rwxrwxrwx 1 user2 user2 0 Nov 23 00:29 t2 [root@localhost ~]# rm t1 rm: cannot unlink `t1′: Operation not permitted
雖然 user1 將 t1 檔案權限全開,但是 user2 還是無法將 t1 刪除.這都是因為 /tmp 目錄有設 sTick bit
[root@localhost ~]# su [root@localhost ~]# chmod o-t /tmp [root@localhost tmp]# ll -d /tmp drwxrwxrwx 7 root root 4096 Nov 23 00:29 /tmp
切換成 root , 並將sTick bit 移除
[root@localhost ~]# su user2 [root@localhost ~]# rm t1
切換成 user2 , 發現此時可以移除檔案 t1 .
[root@localhost ~]# su [root@localhost ~]# chmod o+t /tmp [root@localhost ~]# ll -d /tmp drwxrwxrwt 7 root root 4096 Nov 23 00:36 /tmp
恢復sTick bit 的設定
2 thoughts on “Linux – 特殊權限的設定”