1

不要告诉我这是重复的,因为我已经阅读了诸如如何以 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 身份运行,所以我的问题是为什么这不起作用?

如果这样做是不可能的,我怎么能让任何用户以 root 身份运行特定程序?

4

1 回答 1

1

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

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

工作方案:

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

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

如果您使用与问题相同的命令设置 SUID,则root无论哪个用户运行此程序,您都将始终作为输出。

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

我在YouTube 视频中看到了这个设置

于 2020-11-14T10:56:18.423 回答