在Unix進程中涉及多個用戶ID和用戶組ID,包括以下:編程
一、實際用戶ID和實際用戶組ID:標識我是誰。也就是登陸用戶的uid和gid,好比個人Linux以simon登陸,在Linux運行的全部的命令的實際用戶ID都是simon的uid,實際用戶組ID都是simon的gid(能夠用id命令查看)。測試
二、有效用戶ID和有效用戶組ID:進程用來決定咱們對資源的訪問權限。通常狀況下,有效用戶ID等於實際用戶ID,有效用戶組ID等於實際用戶組ID。當設置-用戶-ID(SUID)位設置,則有效用戶ID等於文件的全部者的uid,而不是實際用戶ID;一樣,若是設置了設置-用戶組-ID(SGID)位,則有效用戶組ID等於文件全部者的gid,而不是實際用戶組ID。ui
以上來自:APUE(《高級UNIX環境編程》)spa
Unix系統經過進程的有效用戶ID和有效用戶組ID來決定進程對系統資源的訪問權限。3d
以上這些概念仍是比較的抽象,那麼下面寫一個小的測試程序:blog
這個程序很是簡單沒有什麼好說的。咱們編譯這個程序生成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
下面咱們給test程序設置SUID
發現設置test程序的SUID位以後,test進程的有效用戶ID等於文件全部者的UID(gkh的uid爲500),有效用戶組ID仍是等於實際用戶組ID(0)。這樣程序就能夠訪問只有gkh才能訪問的資源了。