我正在尝试使用 setuid 位设置一个 python 脚本可执行文件。该程序属于用户“bgmc”,必须在目录“/home/bgmc”中创建一些文件,但被另一个用户“client”调用。实际上,我不希望用户“客户端”更改程序创建的文件。我使用 c-wrapper 来调用程序(请参阅shell 脚本上的 setuid):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/home/bgmc/myprogram.sh");
return 0;
}
我设置了程序的 setuid 位。当c编译的程序属于root时,程序运行良好,并创建了预期的文件。那么 c 编译程序的属性是:
8 -rws--x--x 1 root root 4657 Mar 2 16:25 myprogram
但是,当我将 myprogram 的用户组更改为 bgmc:bgmc 时,程序无法再创建文件:“权限被拒绝”。我试图改变这一行:
setuid(0);
和:
setuid(1002);
因为 1002 是“bgmc”的用户 ID(我为此使用了命令“id -u bgmc”),但这没有帮助。
我宁愿不授予对该程序的 root 访问权限。有没有办法防止这种情况?