当前位置: 首页 > Linux

Linux-variousuids

时间:2023-04-06 02:22:32 Linux

Linux-variousUIDs1.UIDUID是系统中用来表示用户的标识符。启动进程的uid是当前登录用户的uid。可以使用id-u查看用户uid命令,需要注意的是在查看权限的时候查看的是euid。通常,进程的euid与uid相同。2.EUIDeuid是effectiveuserid,有效用户ID。euid函数用于文件访问检查,euid和决定进程是否有访问文件的能力。例如,编写如下代码:/*testeuid.c*/#include#include#includeintmain(intargc,char*argv[]){if(argc!=2)返回0;printf("uid:%d\teuid:%d\n",getuid(),geteuid());printf("试图打开%s\n",argv[1]);intfd=open(argv[1],O_RDONLY);如果(fd<0)错误(“打开”);否则printf("成功\n");return0;}编译运行上面的执行过程,a.fileowner修改为root,访问权限修改为root只读后,我eureka用户无法访问该文件。3.SUID看了APUE,发现对suid了解不多。查了资料,我明白了。记录如下。参考文章:什么是suid上面链接里的文章说的很准确。SUID(SetOwnerUserIDuponexecution)在执行时设置为所有者ID。一个例子是可执行文件/usr/bin/passwd。$ls/usr/bin/passwd-rwsr-xr-x1rootroot54256May172017/usr/bin/passwd从上面passwd的属性可以看到permission位里面有个s,就是suid.passwd命令用于修改密码,密码文件为/etc/shadow,可以看到密码文件的属主是root,root可以读写,用户组可以读。/tmp$ls-l/etc/shadow│-rw-r-----1rootshadow1711Mar3017:00/etc/shadow既然这个文件是root可读写的,那非root用户应该怎么改他们的密码?该怎么办?这个时候我们就来说说suid。当非root用户调用passwd修改密码时,此时的euid就会成为passwd的owner用户,即root用户,这样就可以修改密码了。与其说suid是一个id,不如说它是文件的一个标志,它标志着可执行文件的euid在执行时会被修改为其所有者的uid。下面的编程实验:/*testsuid.c*/#include#include#includeintmain(void){printf("uid:%deuid:%d",getuid(),geteuid());}编译后执行上面的chmodu+s给文件加上usid标志,从上面的结果可以看出进程的uid和euid可以不同的。