【发布时间】:2020-11-13 12:21:53
【问题描述】:
不要告诉我这是重复的,因为我已经阅读了诸如 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 身份运行,所以我的问题是为什么这不起作用?
如果无法做到这一点,我如何让任何用户以 root 身份运行特定程序?
【问题讨论】:
-
阅读:Unix / Linux: Difference between Real User ID, Effective User ID and Saved User ID 然后阅读
whoami手册页... -
同时检查你的卷是否没有被
-nosuid挂载。 -
只是为了清楚
whoami只是一个例子我不能使用同样的方法来获取根受保护的文件,但我可以添加sudo当然这是正常行为, SUID 接缝完全没用。 -
@Tommimon SUID 接缝完全没用。 你认为
sudo是如何工作的? -
不,相反。你正在改变真实,你需要有效。要更改有效的 uid,请致电
setuid()(请参阅man 2 setuid)。只有当真正的 uid 是 root 时,你才能这样做。