Linux檔案特殊許可權 SUID/SGID/Sticky Bit (zt)
前面一直提到檔案的重要許可權,就是rwx這3個讀、寫、執行的許可權。但是,怎麼 /tmp許可權有些奇怪?還有, /usr/bin/passwd也有些奇怪,怎麼回事呢?
[root@linux ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt 5 root root 4096 Jul 20 10:00 /tmp
-r-s--x--x 1 root root 18840 Mar 7 18:06 /usr/bin/passwd
不是隻有rwx嗎?為什麼還有其他的特殊許可權呢?不要擔心,我們這裡先不談這兩個許可權,只是先介紹一下而已。因為必須要有賬號的ID概念,以及程式的程式(process)概念後,才能夠進一步瞭解這些特殊許可權所表示的意義。
Set UID
會建立s與t許可權,是為了讓一般使用者在執行某些程式的時候,能夠暫時具有該程式擁有者的許可權。舉例來說,我們知道,賬號與密碼的存放檔案其實是 /etc/passwd與 /etc/shadow.而 /etc/shadow檔案的許可權是“-r——”。它的擁有者是root.在這個許可權中,僅有root可以“強制”儲存,其他人是連看都不行的。
但是,偏偏筆者使用dmtsai這個一般身份使用者去更新自己的密碼時,使用的就是 /usr/bin/passwd程式,卻可以更新自己的密碼。也就是說,dmtsai這個一般身份使用者可以存取 /etc/shadow密碼檔案。這怎麼可能?明明 /etc/shadow就是沒有dmtsai可存取的許可權。這就是因為有s許可權的幫助。當s許可權在user的x時,也就是類似 -r-s——x——x,稱為Set UID,簡稱為SUID,這個UID表示User的ID,而User表示這個程式(/usr/bin/passwd)的擁有者(root)。那麼,我們就可以知道,當dmtsai使用者執行 /usr/bin/passwd時,它就會“暫時”得到檔案擁有者root的許可權。
SUID僅可用在“二進位制檔案(binary file)”,SUID因為是程式在執行過程中擁有檔案擁有者的許可權,因此,它僅可用於二進位制檔案,不能用在批處理檔案(shell指令碼)上。這是因為shell指令碼只是將很多二進位制執行檔案調進來執行而已。所以SUID的許可權部分,還是要看shell指令碼呼叫進來的程式設定,而不是shell指令碼本身。當然,SUID對目錄是無效的。這點要特別注意。
Set GID
進一步而言,如果s的許可權是在使用者組,那麼就是Set GID,簡稱為SGID.SGID可以用在兩個方面。
檔案:如果SGID設定在二進位制檔案上,則不論使用者是誰,在執行該程式的時候,它的有效使用者組(effective group)將會變成該程式的使用者組所有者(group id)。
目錄:如果SGID是設定在A目錄上,則在該A目錄內所建立的檔案或目錄的使用者組,將會是此A目錄的使用者組。
一般來說,SGID多用在特定的多人團隊的專案開發上,在系統中用得較少。
Sticky Bit
這個Sticky Bit當前只針對目錄有效,對檔案沒有效果。SBit對目錄的作用是:“在具有SBit的目錄下,使用者若在該目錄下具有w及x許可權,則當使用者在該目錄下建立檔案或目錄時,只有檔案擁有者與root才有權力刪除”。換句話說:當甲使用者在A目錄下擁有group或other的專案,且擁有w許可權,這表示甲使用者對該目錄內任何人建立的目錄或檔案均可進行“刪除/重新命名/移動”等操作。不過,如果將A目錄加上了Sticky bit的許可權,則甲只能夠針對自己建立的檔案或目錄進行刪除/重新命名/移動等操作。
舉例來說,/tmp本身的許可權是“drwxrwxrwt”,在這樣的許可權內容下,任何人都可以在 /tmp內新增、修改檔案,但僅有該檔案/目錄的建立者與root能夠刪除自己的目錄或檔案。這個特性也很重要。可以這樣做個簡單測試:
1. 以root登入系統,並且進入 /tmp中。
2. touch test,並且更改test許可權成為777.
3. 以一般使用者登入,並進入 /tmp.
4. 嘗試刪除test檔案。
更多關於SUID/SGID/Sticky Bit的介紹,我們會在第11章中再次提及,當前,先有簡單的概念即可。
SUID/SGID/SBIT許可權設定
前面介紹過SUID與SGID的功能,那麼,如何開啟檔案使其成為具有SUID與SGID的許可權呢?這就需要使用數字更改許可權了。現在應該知道,使用數字更改許可權的方式為“3個數字”的組合,那麼,如果在這3個數字之前再加上一個數字,最前面的數字就表示這幾個屬性了(注:通常我們使用chmod xyz filename的方式來設定filename的屬性時,則是假設沒有SUID、SGID及Sticky bit)。
4為SUID
2為SGID
1為Sticky bit
假設要將一個檔案屬性改為“-rwsr-xr-x”,由於s在使用者許可權中,所以是SUID,因此,在原先的755之前還要加上4,也就是使用“chmod 4755 filename”來設定。此外,還有大S與大T的產生。參考下面的範例(注意:下面的範例只是練習而已,所以筆者使用同一個檔案來設定,必須知道,SUID不是用在目錄上,SBIT不是用在檔案上)。
[root@linux ~]# cd /tmp
[root@linux tmp]# touch test
[root@linux tmp]# chmod 4755 test; ls -l test
-rwsr-xr-x 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 6755 test; ls -l test
-rwsr-sr-x 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 1755 test; ls -l test
-rwxr-xr-t 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 7666 test; ls -l test
-rwSrwSrwT 1 root root 0 Jul 20 11:27 test
# 這個例子要特別小心。怎麼會出現大寫的S與T呢?不都是小寫的嗎?
# 因為s與t都是取代x引數的,但是,我們是使用
# 7666.也就是說,user、group以及others都沒有x這個可執行的標誌
# (因為666)。所以,S、T表示“空的”。
# SUID是表示“該檔案在執行時,具有檔案擁有者的許可權”,但檔案
# 擁有者都無法執行了,哪裡來的許可權給其他人使用呢?當然就是空的
檔案隱藏屬性
檔案有隱藏屬性,隱藏屬性對系統有很大的幫助。尤其是在系統安全(Security)方面,非常重要。下面我們就來談一談如何設定與檢查這些隱藏的屬性。
chattr(設定檔案隱藏屬性)
[root@linux ~]# chattr [+-=][ASacdistu] 檔案或目錄名
引數:
+ : 增加某個特殊引數,其他原本存在的引數不動。
- : 刪除某個特殊引數,其他原本存在的引數不動。
= : 設定一定,且僅有後面接的引數
A : 當設定了A屬性時,這個檔案(或目錄)的存取時間atime(access)將不可被修改,可避免例如手提電腦有磁碟I/O錯誤的情況發生。
S : 這個功能有點類似sync.就是將資料同步寫入磁碟中。可以有效地避免資料流失。
a : 設定a之後,這個檔案將只能增加資料,而不能刪除,只有root才能設定這個屬性。
c : 這個屬性設定之後,將會自動將此檔案“壓縮”,在讀取的時候將會自動解壓縮,但在儲存的時候,將會先進行壓縮後再儲存(對於大檔案有用)。
d : 當執行dump(備份)程式的時候,設定d屬性將可使該檔案(或目錄)具有轉儲功效。
i : i的作用很大。它可以讓一個檔案“不能被刪除、改名、設定連線,也無法寫入或新增資料”。對於系統安全性有相當大的幫助。
j : 當使用ext3檔案系統格式時,設定j屬性將會使檔案在寫入時先記錄在journal中。但是,當檔案系統設定引數為data=journalled時,由於已經設定日誌了,所以這個屬性無效。
s : 當檔案設定了s引數時,它將會從這個硬碟空間完全刪除。
u : 與s相反,當使用u來設定檔案時,則資料內容其實還存在磁碟中,可以用來還原刪除。
注意:這個屬性設定上,比較常見的是a與i的設定值,而且很多設定值必須要root才能設定。
範例:
[root@linux ~]# cd /tmp
[root@linux tmp]# touch attrtest
[root@linux tmp]# chattr +i attrtest
[root@linux tmp]# rm attrtest
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted
# 看到了嗎?連root也沒有辦法刪除這個檔案。趕緊解除設定。
[root@linux tmp]# chattr -i attrtest
這個命令很重要,尤其是在系統的安全性方面。由於這些屬性是隱藏的,所以需要用lsattr才能看到。筆者認為,最重要的是 +i屬性,因為它可以讓一個檔案無法被更改,對於需要很高系統安全性的人來說,相當重要。還有相當多的屬性是需要root才能設定的。此外,如果是登入檔案,就更需要 +a引數,使之可以增加但不能修改與刪除原有的資料。將來提到登入檔案時,我們再來介紹如何設定它。
lsattr(顯示檔案的隱藏屬性)
[root@linux ~]# lsattr [-aR] 檔案或目錄
引數:
-a : 將隱藏檔案的屬性也顯示出來。
-R : 連同子目錄的資料也一併列出來。
範例:
[root@linux tmp]# chattr +aij attrtest
[root@linux tmp]# lsattr
----ia---j--- ./attrtest
使用chattr設定後,可以利用lsattr來檢視隱藏屬性。不過,這兩個命令在使用上必須要特別小心,否則會造成很大的困擾。例如,某天你心情好,突然將 /etc/shadow這個重要的密碼記錄檔案設定為具有i屬性,那麼,過了若干天之後,突然要新增使用者,卻一直無法新增。怎麼辦?將i的屬性去掉即可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-1003799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux檔案特殊許可權 SUID/SGID/Sticky BitLinuxUI
- Linux特殊許可權SUID、SGID、SBITLinuxUI
- Linux特殊許可權之suid、sgid、sbit許可權LinuxUI
- SUID/SGID以及sticky bitUI
- suid,sgid,sticky的三個許可權的詳細說明UI
- Linux精講——特殊許可權之stick_bitLinux
- 『學了就忘』Linux許可權管理 — 55、檔案特殊許可權Linux
- Linux/Unix中的SUID和SGID檔案許可權和在CVS專案管理中的應用 (轉)LinuxUI專案管理
- Linux 特殊許可權a,i,t,s以及查詢帶有特殊許可權的所有檔案Linux
- Linux 特殊許可權Linux
- linux系統安全-suid,sgid精耕--ztLinuxUI
- Linux 提權-SUID/SGID_1LinuxUI
- Linux 提權-SUID/SGID_2LinuxUI
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Linux檔案許可權Linux
- Linux 檔案許可權Linux
- UNIX檔案的SUID/SGID(轉)UI
- Linux 特權 SUID/SGID 的詳解LinuxUI
- Linux之檔案安全上下文及特殊許可權位Linux
- [svc]linux檔案許可權Linux
- Linux檔案基本許可權Linux
- linux 檔案許可權管理Linux
- linux許可權補充:rwt rwT rws rwS 特殊許可權Linux
- Linux的檔案存取許可權和0644許可權Linux
- linux特殊許可權s和tLinux
- Linux的檔案許可權管理Linux
- linux檔案許可權 詳解Linux
- Linux 檔案許可權總結Linux
- Linux中的檔案許可權Linux
- linux檢視檔案許可權Linux
- Linux檔案許可權詳解Linux
- linux檔案許可權問題Linux
- Linux檔案許可權管理命令Linux
- Linux中檔案的許可權Linux
- Linux SUID SGID 講解LinuxUI
- Linux中檔案的特殊許可權有幾種?分別是什麼?Linux
- 關於Linux作業系統下檔案特殊許可權的解釋Linux作業系統
- Linux 檔案許可權管理的方法Linux