Flo*_*ian 11 c linux security setuid root
我正在尝试做安全的事情,并且有一个程序需要以root身份运行才能在不需要它时删除它的权限.如果我chmod的SUID位是二进制,并且它属于root,那么这很有效,因为现在我有UID =某个用户,而EUID = root,所以我可以使用seteuid(0)和seteuid(getuid())分别提升和删除管理员权限.
但是,如果我使用sudo而不是设置SUID,那么UID == EUID == 0,因此调用seteuid(getuid())不会有任何影响.而且我不能仅仅UID从一些随机用户那里改变一些价值,因为setuid()手册页明确指出,如果从以root身份运行的程序调用它,那么就会失去权利,没有希望让他们回来.
那么,如何让我的程序在运行时暂时失去其权限sudo?
Aid*_*lly 10
seteuid(some random uid)seteuid(0)在运行时删除权限,让它们恢复root.
似乎seteuid(x)应该努力放弃并重新提升私人......
$ cat > t12.c
#include <stdio.h>
#include <unistd.h>
void p(void) { printf("euid=%4d uid=%4d\n", geteuid(), getuid()); }
int main(void) { p(); seteuid(100); p(); seteuid(0); p(); return 0; }
$ cc -Wall t12.c
$ sudo chown root a.out && sudo chmod 4555 a.out
$ sudo ./a.out
euid=   0 uid=   0
euid= 100 uid=   0
euid=   0 uid=   0
$ ./a.out
euid=   0 uid= 501
euid= 100 uid= 501
euid=   0 uid= 501
$ 
| 归档时间: | 
 | 
| 查看次数: | 9456 次 | 
| 最近记录: |