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是我自己編寫的測試程序,只是一個無限循環代碼如下:

1 #include <stdio.h>
2 
3 int main(){
4         while(1){
5                 ;       //空語句用於實現無限循環  
6         }
7         return 0;
8 }

  用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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM