ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于LINUX中的权限位S(设置用户ID)(有效用户ID)(实际用户ID)

关于LINUX中的权限位S(设置用户ID)(有效用户ID)(实际用户ID)

原创 Linux操作系统 作者:gaopengtttt 时间:2016-02-16 17:10:04 0 删除 编辑


getuid() 实际用户ID为 执行程序的实际用户ID
geteuid()
 有效用户ID与设置用户ID有关,及权限中的S位

如果权限为rws 那么s位代表其他用户执行程序时改变为主用户权限。不安全
如:
  8 #include<stdio.h>
  9 #include<stdlib.h>
 10 #include <unistd.h>
 11 #include <sys/types.h>
 12 #include <sys/stat.h>
 13 #include <fcntl.h>
 14 
 15 int main(void)
 16 {
 17 
 18     int fd;
 19 
 20     fd = open("abc", O_CREAT | O_RDWR | O_EXCL, 0777);
 21     if(fd==-1)
 22     {
 23         perror("error:");
 24     }
 25     printf("uid %ld,euid %ld\n",getuid(),geteuid());
 26 
 27 
 28 }


程序放到root用户下,
-rwxr-xr-x   1 root root  8762 Feb 16 05:16 a.out
当前gaopeng用户
如果在gaopeng用户下执行这个程序正常情况下报错
gaopeng@bogon:/$ ./a.out 
error:: Permission denied
uid 1000,euid 1000


如果设置了 设置用户ID 如下:
chmod 4755 a.out 
-rwsr-xr-x   1 root root     8762 Feb 16 05:16 a.out
再次执行
gaopeng@bogon:/$ ./a.out 
uid 1000,euid 0


可以看到设置用户ID为0即位超级用户,并且没有任何报错文件建立完成


设置这个位过后不需要SUDO就可以或者切换到root用户下就能执行程序。不安全


如果是sudo
gaopeng@bogon:/$ sudo ./a.out 
uid 0,euid 0
可以看到
实际用户ID和有效用户ID都是 0


那么总结一下:
实际用户ID实际上是发起执行这个程序的用户ID
有效用户ID实际上是执行程序过程中,程序自身的用户ID,
如果没有设置S位实际上他是和实际用户ID一样的。
当然还有效用户组ID 组权限位也可以设置为S,和用户一样,执行时可以切换到其他组(如root组)用户权限下。


设置4***这里的4是设置用户s
设置2***这里的2设置组s
当然还有1为黏住位已经淘汰无用。
chmod 2755 a.out
-rwxr-sr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 4755 a.out
-rwsr-xr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 6755 a.out
-rwsr-sr-x 1 root root 8762 Feb 16 05:16 a.out

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-1989671/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
wxh gp_22389860

注册时间:2008-10-13

  • 博文量
    640
  • 访问量
    2819246