今天我們來講解Unix操作系統中SUID/SGID,為什麼要單獨把他們從文件權限中分出來講呢?因為,這是Unix操作系統網絡入侵者非常愛用的入侵入口。SUID表示"設置用戶ID",SGID表示"設置組ID"。
當用戶執行一個SUID文件時,用戶ID在程序運行過程中被置為文件擁有者的用戶ID。如果文件屬於root,那用戶就成為超級用戶。同樣,當一個用戶執行SGID文件時,用戶的組被置為文件的組。
例如,PS命令以SUID root運行,他從系統內存中讀取,這是一般用戶不能做的。Unix操作系統SUID程序代表了重要的安全漏洞,特別是SUID設為root的程序。
Unix操作系統實際上有兩種類型的用戶ID。"real user ID"是在登錄過程中建立的用戶ID。 "effective user ID"是在登錄後的會話過程中通過SUID和SGID位來修改。
當一個用戶運行一條命令時,進程繼承了用戶登錄Shell的權限,這時"real user ID"和"effective user ID"是相同的。當SUID位被設置時,進程繼承了命令擁有者的權限。
例如普通用戶運行passwd命令時,他能夠修改/etc/passwd文件,盡管文件是屬於root的。這成為可能是因為passwd命令以root的SUID權限運行。那麼如何識別SUID程序呢?
我們檢查文件的權限模式,在它的第四位如果不是"x",而是"s",就是一個SUID程序。例如,ls -l /bin/su命令顯示: -rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su* 表明su是一個SUID程序。
Unix操作系統安全的一種典型攻擊就是創建一個SUID是root的shell拷貝,然後把他隱藏。通過調用後門,攻擊者就獲得了root的權利。例如,某個系統管理員忘了關閉某個root的Shell,一個壞人經過運行如下命令:
cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman現在就有了一個bash的SUID root拷貝任其處理。他就有完整的root權限了。因此,Unix操作系統管理員應該定期察看系統中有哪些SUID和SGID文件。用下面的命令可以實現:find / -type f \( -perm -4000 -o -perm -2000 \) -ls
當然,攻擊者可以通過修改find命令來逃避檢測,所以要運行專門的檢測軟件(如Tripwire)來進行檢查。 好了,關於Unix操作系統中SUID/SGID的知識,我們就介紹到這裡了。