
行程管理
|
175
在我們探討如何完成此事之前,我們需要先瞭解複雜的用戶與群組識別碼。
真實、有效以及被暫存的用戶和群組識別碼
下面的討論會把重點擺在用戶識別碼,因為群組識別碼的情況並無不同。
事實上,與行程有關的用戶識別碼(user ID,常簡寫為 uid),不是一個,而是四個,
分別是:真實的、有效的、暫存的以及檔案系統的用戶識別碼。
真實用戶識別碼
(
real
user ID
)是指啟動行程之用戶的 uid。它會被設定成該行程之父行程的真實用戶識別
碼,而且在 exec 呼叫執行期間不會有所變動。通常,登入行程(login process)會把用
戶之 login shell 的真實用戶識別碼設定成該用戶的識別碼,而且該用戶的所有行程都會
被設定成此用戶識別碼。超級用戶(root)可以把真實用戶識別碼變更成任何值,但是
其他用戶均無法變更此值。
有效用戶識別碼
(
effective user ID
)是指正在運行之行程的用戶識別碼。進行使用權限
的確認時,通常會檢查此值。最初,有效識別碼會等於真實用戶識別碼,因為當一個行
程進行派生時,父行程的有效用戶識別碼會被子行程所繼承。此外,如果行程發出 exec
叫用,有效用戶識別碼通常不會有所變動。但是在 exec 呼叫執行期間,卻可以看出真實
與有效識別碼之間的主要差異:經由執行
setuid
(
suid
)二元檔,行程可以變更它的有效
用戶識別碼。確切地說,有效用戶識別碼會被設定成程式檔之擁有者的用戶識別碼。例
如,因為
/usr/bin/passwd
是一個 setuid ...