linux下進程的實際用戶ID(有效組)和有效用戶ID(有效組ID)

實際用戶ID(實際組ID):標識當前用戶(所屬組)是誰,當用戶登陸時取自口令文件。

  有效用戶ID(有效組ID):用來決定我們(當前進程)對文件的訪問權(即實際該進程的是以那個用戶運行的)。

  一般情況下,進程的有效用戶ID等於進程的實際用戶ID,進程的有效用戶組ID等於進程的實際用戶組ID。

  但是當可執行程序文件的文件模式(st_mode)中設置了“設置-用戶-ID(set_user_id)位”時,進程的有效用戶ID等於該可執行文件的擁有者ID。

  同樣的如果可執行文件的文件模式(st_mode)中設置了“設置-組-ID(set-group-d)位”時,進程的有效用戶組ID等於該可執行文件的擁有組ID例如:

  現在有兩個可執行文件test,passwd,其中passwd是linux系統自帶的修改密碼程序(linux下在/usr/bin目錄下),test是我自己編寫的測試程序,只是一個無限循環代碼如下:

#include <stdio.h>

int main(){
        while(1){
                ;       //空語句用於實現無限循環  
        }
        return 0;
}

 

用ls -l查看這兩個文件的詳細信息如下:

  

 

  從圖中可以看到test文件的擁有ID和組ID都爲zzg(我的登陸賬號),passwd文件的擁有者ID和組ID都爲root,且由命令提示符可以看出現在我是以zzg用戶登陸的,或者用命令id來查看shell下當前用戶的用戶ID和組ID:

  

  即當前的實際用戶ID和實際用戶組ID都爲zzg。

  現在分別運行test程序和passwd程序,然後在另一個終端下用ps命令查看test的有效ID和有效ID,如下:

  運行程序

    

  ps輸出

  

  由圖可知

  test實際是以用戶ID:zzg,組ID:zzg來運行的,即對PID=8442的進程來說:

    它的實際用戶ID爲zzg

    它的有效用戶ID爲zzg   

    它的實際用戶組ID爲zzg

    它的有效用戶組ID爲zzg

  passwd實際是以用戶ID:root,組ID:zzg來運行的,即對PID=8444的進程來說:

    它的實際用戶ID爲zzg(由於是當前用戶是zzg)

    它的有效用戶ID爲root

    它的實際用戶組ID爲zzg

    它的有效用戶組ID爲zzg

  下面讓我們再來看這兩個文件的詳細信息  

  

  從圖中可以看出passwd的設置了“設置-用戶-id”位(第四位上的‘s’,爲設置該爲的標誌),但是沒有設置“設置-組-id”位,

所以會出現以上的情況,即對PID=8444的進程來說,有效用戶ID等於passwd的擁有者ID(root),有效用戶組ID等於運行該程序的實際用戶組ID(zzg)。

  同樣可以看出test的"設置-用戶-ID"位,"設置-組-ID"位都沒有設置,所以對PID=8442的進程來說,有效用戶ID和有效用戶組ID分別等於運行該程序的實際用戶ID,實際用戶組ID。

轉載至:linux下進程的實際用戶ID(有效組)和有效用戶ID(有效組ID)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章