Linux – 特殊權限的設定

除了一般的 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 – 特殊權限的設定

  1. 自動引用通知: Linux – File | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料