修改文件的所有者权限
进程在创建的时候,会生成与进程相关的进程属性,包括进程的权限、进程的有效用户(组)、真实用户(组)。
实验:修改suid
文件的所有者权限为root,即有效用户修改为root
。
- 创建
suid.c
文件
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main(void){
printf("real uid: %d, real gid: %d\n",getuid(),getgid());
printf("effective uid: %d, effective gid: %d\n",geteuid(),getegid());
exit(0);
}
然后按照以下步骤执行观察可执行文件suid
权限的改变:
修改用户的密码
为什么用户可以修改自己的密码呢?
用户是通过执行passwd命令,修该密码。在执行该命令的时候,该进程的有效id不等于真实用户,而是文件所有者root。
Linux根据进程的有效用户进行权限检查,有效用户等于日root,则允许执行任何操作。(包括对/etc/shadow的读写操作)
如果清除掉/usr/bin/passwd的setuid
的权限位,则普通用户不能修改密码。