我們這次要來了解Unix SUID/SGID的知識。有時,沒有被授權的用戶需要完成某項任務。一個例子是passwd程序,它允許用戶改變口令,這就要求改變/etc/passwd文件的口令域。然而系統管理員決不允許普通用戶擁有直接改變這個文件的權利,因為這絕對不是一個好主意。
為了解決這個問題,Unix SUID/SGID便應運而生。Unix允許程序被授權,當程序被執行的時候,擁有超級用戶的權限,完成時又回到普通用戶的權限。這個主意很好,所以AT&T對它申請了專利。
Unix下的一些名詞簡介
1.文件權限。確定用戶讀取、修改或執行文件的權力。
r -- 讀訪問
w -- 寫訪問
x -- 執行許可
s -- SUID/SGID
t -- sticky位
2.進程。進程是程序運行一次的過程,以完成預定的任務,它不同於程序。每個進程都有一個唯一的進程ID。此外,每個進程還有一些其他標識符:實際用戶ID、實際組ID、有效用戶ID、有效組ID。超級用戶進程的實際用戶ID和有效用戶ID為0。
3.超級用戶root。超級用戶擁有系統的完全控制權。
Unix SUID/SGID的思路
SUID的程序在運行時,將有效用戶ID改變為該程序的所有者ID,使得進程在很大程度上擁有了該程序的所有者的特權。如果被設置為SUID root,那麼這個進程將擁有超級用戶的特權(當然,一些較新版本的Unix系統加強了這一方面的安全檢測,一定程度上降低了安全隱患)。當進程結束時,又恢復為原來的狀態。
執行時的Real Uid可以通過函數setuid()改變。Unix SUID/SGID我們就大概的了解了。