运行 使用 SUID 作为 root 执行程序

Run program as root using SUID

不要告诉我这是重复的,因为我已经读过像 how to execute a command as root 这样的问题,但我就是不能让它对我有用。

这是我的C程序whoami.c:

#include <stdio.h>
#include <stdlib.h>

int main() {
    system("whoami");
}

这正是我所做的:

user@ubuntu:~/Desktop/test$ ls
whoami.c
user@ubuntu:~/Desktop/test$ gcc whoami.c 
user@ubuntu:~/Desktop/test$ sudo chown root:root a.out 
[sudo] password for user: 
user@ubuntu:~/Desktop/test$ sudo chmod 4711 a.out 
user@ubuntu:~/Desktop/test$ ls -l
total 24
-rws--x--x 1 root    root    16816 Nov 13 13:03 a.out
-rw-rw-r-- 1 user    user    75    Nov 13 13:03 whoami.c
user@ubuntu:~/Desktop/test$ ./a.out 
user
user@ubuntu:~/Desktop/test$ sudo ./a.out 
root
user@ubuntu:~/Desktop/test$

我认为执行位中的 s 意味着无论谁启动这个程序,它都会 运行 作为 root 所以我的问题是为什么这不起作用?

如果无法做到这一点,我如何才能让任何用户 运行 作为根用户使用特定程序?

这对我有用:在 运行ning de 命令之前添加 setuid(geteuid());

要使用 setuid()geteuid(),您需要导入 unistd.h

工作程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    setuid(geteuid());
    system("whoami");
}

如果您使用与问题相同的命令设置 SUID,无论哪个用户 运行 这个程序,您总是 root 作为输出。

您可以使用任何其他命令代替 whoami,如果它需要 root 权限。

我在 YouTube video

中看到了这个设置