zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    添加coreseek中文分词
    linux 常用处理命令
    rewrite nginx
    判断浏览器类型
    Cookie 读写类
    Php 异常处理 exception
    C++实验:时间和日期类
    数据结构:删除链表元素
    数据结构-循环单链表
    TOJ-5395 大于中值的边界元素
  • 原文地址:https://www.cnblogs.com/wmllz/p/5040123.html
Copyright © 2011-2022 走看看