我正在尝试使用setuid非常简单的事情,然后在C程序中使用getuid,除非用户是c程序的所有者,否则该程序无效。除了thistuid之外,我还使用chmod 7777设置权限位。这是C程序......
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x;
printf("Setting uid to 1111\n");
x=setuid(1111);
printf("setuid returned... %d\n",x);
printf("Testing state of uid using getuid()\n");
printf("uid: %d\n",getuid());
return 0;
}
鉴于1111是C程序所有者的uid(由id -u返回)。 在gcc之后,chmod 7777就生成了二进制文件。
作为所有者的测试工作正常...
% suid
Setting uid to 1111
setuid returned... 0
Testing state of uid using getuid()
uid: 1112
并检查二进制文件的权限......
ls -l suid
-rwsrwsrwx 1 katman design 6852 Mar 1 17:56 suid
然后我成为另一个用户(同一组BTW)并再次运行“suid”可执行文件......
% suid
Setting uid to 1111
setuid returned... 0
Testing state of uid using getuid()
uid: 57849
如果所有者授予了执行此权限的权限,为什么setuid不能正常工作?
也...
问:如果我可以使用它,我听说可以执行system()调用从这样的C程序运行cshell脚本,shell脚本应该作为C程序的所有者运行。这个uid被“传递”给了孩子们。对错吗? 问:如果cshell脚本运行一个perl脚本,而脚本又运行系统调用等等......所有这些后代shell都将作为启动的父C二进制文件的所有者运行整个级联吗? IOW,是孩子们“继承”的吗?