1. 程式人生 > >Linux進程的實際用戶ID和有效用戶ID

Linux進程的實際用戶ID和有效用戶ID

gid 生成 www sgi suid unix環境 http ls命令 可能

轉自: http://www.cnblogs.com/kunhu/p/3699883.html

在Unix進程中涉及多個用戶ID和用戶組ID,包括如下:

1、實際用戶ID和實際用戶組ID:標識我是誰。也就是登錄用戶的uid和gid,比如我的Linux以simon登錄,在Linux運行的所有的命令的實際用戶ID都是simon的uid,實際用戶組ID都是simon的gid(可以用id命令查看)。

2、有效用戶ID和有效用戶組ID:進程用來決定我們對資源的訪問權限。一般情況下,有效用戶ID等於實際用戶ID,有效用戶組ID等於實際用戶組ID。當設置-用戶-ID(SUID)位設置,則有效用戶ID等於文件的所有者的uid,而不是實際用戶ID;同樣,如果設置了設置-用戶組-ID(SGID)位,則有效用戶組ID等於文件所有者的gid,而不是實際用戶組ID。

以上來自:APUE(《高級UNIX環境編程》)

Unix系統通過進程的有效用戶ID和有效用戶組ID來決定進程對系統資源的訪問權限。

以上這些概念還是比較的抽象,那麽下面寫一個小的測試程序:

技術分享

這個程序非常簡單沒有什麽好說的。我們編譯這個程序生成test 程序

技術分享

通過id命令看到當前登錄用戶為root,uid=0,gid=0。通過ls命令我們可以看出test程序沒有設置SUID和SGID,所有者是root,所有組也是root。執行test我們發現有效用戶ID等於實際用戶ID(0),有效用戶組ID等於實際用戶組ID(0)。

你可能註意到test的所有者root,組也是root,和實際用戶,實際用戶組是一樣的。下一步我們修改一下test所有者和組,再看結果。

技術分享

發現結果和上面一樣,test進程的有效用戶ID等於實際用戶ID(0),有效用戶組ID等於實際用戶組ID(0)。

下面我們給test程序設置SUID

技術分享

發現設置test程序的SUID位之後,test進程的有效用戶ID等於文件所有者的UID(gkh的uid為500),有效用戶組ID還是等於實際用戶組ID(0)。這樣程序就可以訪問只有gkh才能訪問的資源了。

Linux進程的實際用戶ID和有效用戶ID