linux下用户设置位
1.首先,Linux下的实际用户(组)D和有效用户(组)ID理解如下:
a:实际用户(组)ID:实际用户ID和实际用户组ID:标识我是谁。也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看)
b:有效用户(组)ID:有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置-用户-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了设置-用户组-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。
2.举例说明:
a:有源代码如下:编译后为a.out 可执行程序
int main( void ){
int fd=open("abc.txt",O_RDWR);
if(fd==-1) perror("read"),exit(1);
int r=write(fd,"abc",3);
if(r==-1) perror("write"),exit(1);
}
b:上图中abc.txt的拥有者是root,并且只有root有读写权限,a.out的拥有者也是root.
(1)aa这个非root用户执行a.out 出现 open :Permission denied(即使其他用户对abc.txt有读权限).此时实际用户是aa,有效用户也是aa,但是abc.txt只有root有读写权限。
(2)设置用户设置位:
chmod u+s a.out
此时我们可以看到aa用户可以成功执行a.out,因为有效用户改为文件的拥有者(root),root对abc.txt具有读写权限。.