使用 Linux 中的 setuid 位
Using the setuid bit in Linux
我有这个 C
文件:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("%s\n", getlogin());
printf("%i\n", getuid());
}
我编译它,将 UID 和 GID 都设置为 root
并设置 setuid 位,这样它看起来像这样:
-rwsrwsr-x 1 root root 8735 Apr 8 19:51 a.out
然而,当我调用 $ ./a.out
时,我仍然得到:
user
1000
我做错了什么?
真实用户ID仍然是调用程序的用户,但有效用户ID是root。在 setuid 程序中,它们是不一样的。
要获取有效用户 ID,请调用 geteuid()
。您还可以使用 cuserid()
获取与有效用户 ID 关联的名称。
您的程序只有更改其 uid 的权限。要实际切换到 root,您必须在其中调用 setuid(0)
。
请看here
我有这个 C
文件:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("%s\n", getlogin());
printf("%i\n", getuid());
}
我编译它,将 UID 和 GID 都设置为 root
并设置 setuid 位,这样它看起来像这样:
-rwsrwsr-x 1 root root 8735 Apr 8 19:51 a.out
然而,当我调用 $ ./a.out
时,我仍然得到:
user
1000
我做错了什么?
真实用户ID仍然是调用程序的用户,但有效用户ID是root。在 setuid 程序中,它们是不一样的。
要获取有效用户 ID,请调用 geteuid()
。您还可以使用 cuserid()
获取与有效用户 ID 关联的名称。
您的程序只有更改其 uid 的权限。要实际切换到 root,您必须在其中调用 setuid(0)
。
请看here