在Unix進程中涉及多個用戶ID和用戶組ID,包括如下:
1、實際用戶ID和實際用戶組ID:標識我是誰。也就是登錄用戶的uid和gid,比如我的Linux以simon登錄,在Linux運行的所有的命令的實際用戶ID都是simon的uid,實際用戶組ID都是simon的gid(可以用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才能訪問的資源了。