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

  • 相关阅读:
    location url 反向代理到来机的其它端口 gitlab
    PortSentry是入侵检测工具中配置最简单、效果最直接的工具之一
    iptables下state的4种形式
    windows  远程桌面命令 mstsc
    linux中解决SSH连接慢问题 关键点GSSAPIAuthentication
    无密码登录远程主机
    openfire 服务器名称:后面的黄色叹号
    ssh -v root@xxxxx 显示登录的细节
    mysql 只导数据不含表结构
    磁盘空间占满inode结点没用完 并删除了文件但是释放不了
  • 原文地址:https://www.cnblogs.com/wmllz/p/5040123.html
Copyright © 2020-2023  润新知