setuid and getuid
获取某个用户的UID
id -u <username>
setuid
If the user is root or the pro‐gram is set-user-ID-root, spe‐cial care must be taken:setuid() checks the effective user ID of the caller and if it is the superuser, all process-related user ID's are set to uid. After this has occurred,it is impossible for the program to regain root privileges.
setuid会检查调用者的euid,如果是superuser所有的进程相关的uid都会被设置,
在这之后进程不能再获取root特权
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#define hemmy_id 1001
void ChangeId(uid_t id)
{
setuid(id);
}
void ShowIdInfo()
{
printf("-----------------show user info----------------\n");
uid_t uid=getuid();
gid_t gid=getgid();
uid_t euid=geteuid();
gid_t egid=getegid();
printf("uid=%d\n",uid);
printf("gid=%d\n",gid);
printf("euid=%d\n",euid);
printf("egid=%d\n",egid);
printf("-----------------------end----------------------\n\n");
}
int main(int argc, char** argv,char** envr)
{
ShowIdInfo();
setuid(1001);
ShowIdInfo();
setuid(0);
ShowIdInfo();
}
➜ linux_kernel_api sudo ./g
-----------------show user info----------------
uid=0
gid=0
euid=0
egid=0
-----------------------end----------------------
-----------------show user info----------------
uid=1001
gid=0
euid=1001
egid=0
-----------------------end----------------------
-----------------show user info----------------
uid=1001
gid=0
euid=1001
egid=0
-----------------------end----------------------
网友评论