在Unix进程中涉及多个用户ID和用户组ID,包括以下:编程
一、实际用户ID和实际用户组ID:标识我是谁。也就是登陆用户的uid和gid,好比个人Linux以simon登陆,在Linux运行的全部的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(能够用id命令查看)。测试
二、有效用户ID和有效用户组ID:进程用来决定咱们对资源的访问权限。通常状况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置-用户-ID(SUID)位设置,则有效用户ID等于文件的全部者的uid,而不是实际用户ID;一样,若是设置了设置-用户组-ID(SGID)位,则有效用户组ID等于文件全部者的gid,而不是实际用户组ID。ui
以上来自:APUE(《高级UNIX环境编程》)spa
Unix系统经过进程的有效用户ID和有效用户组ID来决定进程对系统资源的访问权限。3d
以上这些概念仍是比较的抽象,那么下面写一个小的测试程序:blog
这个程序很是简单没有什么好说的。咱们编译这个程序生成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
下面咱们给test程序设置SUID
发现设置test程序的SUID位以后,test进程的有效用户ID等于文件全部者的UID(gkh的uid为500),有效用户组ID仍是等于实际用户组ID(0)。这样程序就能够访问只有gkh才能访问的资源了。