gpt4 book ai didi

c - setuid(0) 无法为 root 拥有的程序执行

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:47 26 4
gpt4 key购买 nike

我需要编写一些代码来获取 root 权限并执行系统级操作。这是我写的(这不是实际的代码,只是为了测试我是否正确地做事):

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int current_uid = getuid();
printf("My UID is: %d. My GID is: %d\n", current_uid, getgid());
system("/usr/bin/id");
if (setuid(0))
{
perror("setuid");
return 1;
}
//I am now root!
printf("My UID is: %d. My GID is: %d\n", getuid(), getgid());
system("/usr/bin/id");
//Time to drop back to regular user privileges
setuid(current_uid);
printf("My UID is: %d. My GID is: %d\n", getuid(), getgid());
system("/usr/bin/id");
return 0;
}

完成 gcc -o setuid setuid.c 后,我对此运行 ls -al 以获得以下结果:

tarun@staging:~$ ls -al setuid
-rwxr-xr-x 1 tarun tarun 9792 2009-10-03 18:09 setuid
adam@staging:~$

尝试运行应用程序会导致:

tarun@staging:~$ ./setuid
My UID is: 1000. My GID is: 1000
uid=1000(tarun) gid=1000(tarun) groups=1000(tarun),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),125(sambashare),999(bumblebee)
setuid: Operation not permitted

我将所有者更改为 root 并相应地设置粘滞位:

tarun@staging:~$ su - root
Password:
staging:~# cd /home/tarun
staging:/home/tarun# chown root.root setuid
staging:/home/tarun# chmod +s setuid
staging:/home/tarun# ls -al setuid
-rwsr-sr-x 1 root root 9792 2009-10-03 18:09 setuid
staging:/home/tarun# exit
logout
tarun@staging:~$

现在执行程序给出:

adam@staging:~$ ./setuid
My UID is: 1000. My GID is: 1000
uid=1000(tarun) gid=1000(tarun) groups=1000(tarun),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),125(sambashare),999(bumblebee)
setuid: Operation not permitted

虽然理想情况下它应该完全执行并将我的 uid 更改为 0。我做错了什么?

最佳答案

您的代码没有问题,只需检查正确的 setuid/'sgid' 序列:

sudo chmod 6775 setuid
sudo chown root:root setuid

您必须至少设置 SUID、SGID 和执行权限(6555 掩码)。在这种情况下,设置用户/组写入(6775 掩码)也很常见。当然,为了安全起见,您可以将此限制为用户写入掩码 (6755)。

请确保您在重新编译期间不会放弃权限:

$ ls -al
-rwsrwsr-x 1 root root 8772 Feb 8 17:52 setuid

以防万一您(或 future 的读者)需要这样的指南: What is SUID and how to set SUID in Linux/Unix?

关于 eCryptfs 的问题:这篇文章应该对您有所帮助:https://wiki.archlinux.org/index.php/ECryptfs

关于c - setuid(0) 无法为 root 拥有的程序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com