一、进程控制
1、开机后bootloader将系统的第一个进程启动了起来,bootloader是烧制在bios上的
2、第一个例子:getpid
#include"func.h"
int main(int argc,char* argv[])
{
pid_t pid,ppid;
pid=getpid();
ppid=getppid();
printf("pid=%d,ppid=%d",pid,ppid);
return 0;
}
3、一个进程有4个身份:真实用户id、真实组id;有效用户id、有效组id
(1)真实用户id:getuid()
(2)真实组id:getgid()
(3)有效用户id:geteuid()
(4)有效组id:getegid()
4、第二个例子:gid和uid的例子、euid和egid的例子
#include"func.h"
int main()
{
pid_t uid,gid,euid,egid;
uid=getuid();
gid=getgid();
euid=geteuid();
egid=getegid();
printf("uid=%d,gid=%d,euid=%d,egid=%d",uid,gid,euid,egid);
return 0;
}
5、第三个例子modify_file.c
#include <func.h>
int main(int argc,char* argv[])
{
printf("uid=%d,gid=%d,euid=%d,egid=%d\n",getuid(),getgid(),geteuid(),getegid());
int fd=open("file",O_RDWR);
ERROR_CHECK(fd,-1,"open");
write(fd,"hello",5);
close(fd);
return 0;
}
6、s是权限提升
Chmod u+s a.out 该命令可以实现权限提升
权限提升:在权限控制中,使用权限提升后,也就是设置了该属性后,用户运行a.out时,a.out进程的有效用户身份将不再是运行a.out的用户,而是a.out文件的所有者。
7、红色的命令(可以实现权限提升):sudo、su、chmod u+s
命令chmod g+s a.out 对同组用户进行权限提升
命令chmod o+t a.out 增加粘滞键,增加一些权限检查
8、如何修改真实用户id?
接口setuid,该命令只有sudo权限才可以执行
sudo实现的原理,提升euid的权限
使用命令man setuid获取更多帮助
int setuid(uid_t uid);