我需要编写一些代码,这些代码可以获得根优先级并执行系统级操作。下面是我所写的(这不是实际的代码,只是为了测试我做的事情是否正确):
#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我将所有者更改为根并相应地设置粘性位:
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。我做错了什么?
发布于 2015-02-08 16:00:14
代码没有问题,只需检查正确的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万一你(或未来的读者)需要这样的指南:什么是SUID以及如何在Linux/Unix中设置SUID?
关于eCryptfs的问题:这里有一篇文章可以帮助您:https://wiki.archlinux.org/index.php/ECryptfs
发布于 2015-02-08 15:59:19
粘性位具有完全不同的功能。在一个文件上,现在它基本上是未定义的,而在一个目录上,它阻止非所有者(除了根)删除目录中的文件,而不管目录权限如何。
您正在寻找设置UID位:
chown root setuid
chmod +s setuid显然,您必须是root用户才能为根拥有的文件设置SUID权限。但是,由于存在setUID位,我怀疑您可能会做出不需要的努力。
发布于 2015-02-08 15:55:54
变化
chown root.root setuid至
chown root setuid或
chown root.tarun setuidhttps://stackoverflow.com/questions/28395862
复制相似问题