C setuid和seteuid函数之间的差异 程序1:setuid()的示例 程序2:seteuid()示例
两个程序的输出相同。那么,这两个函数之间有什么区别呢?根据参考(手册页),这两个函数都用于设置流程的有效用户ID。这两个程序的功能有什么不同?很清楚这两个程序的区别: 如果用户是root用户或程序设置为user ID root,则必须特别小心。setuid()函数检查调用方的有效用户ID,如果是超级用户,则所有与进程相关的用户ID都设置为uid。发生这种情况后,程序不可能重新获得根权限 因此,一个设置用户ID的根程序,如果希望暂时放弃根权限,使用一个没有权限的用户的身份,然后重新获得根权限,就不能使用setuid()。您可以使用seteuid来实现这一点C setuid和seteuid函数之间的差异 程序1:setuid()的示例 程序2:seteuid()示例,c,linux,unix,C,Linux,Unix,两个程序的输出相同。那么,这两个函数之间有什么区别呢?根据参考(手册页),这两个函数都用于设置流程的有效用户ID。这两个程序的功能有什么不同?很清楚这两个程序的区别: 如果用户是root用户或程序设置为user ID root,则必须特别小心。setuid()函数检查调用方的有效用户ID,如果是超级用户,则所有与进程相关的用户ID都设置为uid。发生这种情况后,程序不可能重新获得根权限 因此,一个设置用户ID的根程序,如果希望暂时放弃根权限,使用一个没有权限的用户的身份,然后重新获得根权限,就不
你有任何例子来验证这一点吗?没有,我不是在*nix机器上。我对上面的手册页参考有疑问。使用setuid,我们可以设置进程的有效用户id。例如:setuid(getuid());执行此语句后,进程的有效用户ID将更改为当前用户。因此,为了重新获得root权限,我只需使用setuid(0);但是为什么手册页引用后面显示的
不能使用setuid()。您可以使用seteuid(2)
来完成这一点。可能的
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
void main()
{
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
setuid(1000);
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
setuid(1014);
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
}
guest $ ./a.out
Real user id = 1000, Effective User id = 1014
Real user id = 1000, Effective User id = 1000
Real user id = 1000, Effective User id = 1014
guest $
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
void main()
{
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
seteuid(1000);
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
seteuid(1014);
printf("Real user id = %d, Effective User id = %d\n",getuid(),geteuid());
}
guest $ ./a.out
Real user id = 1000, Effective User id = 1014
Real user id = 1000, Effective User id = 1000
Real user id = 1000, Effective User id = 1014
guest $