运行 使用 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 权限。
中看到了这个设置
不要告诉我这是重复的,因为我已经读过像 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 权限。