如何让用户执行 root 拥有的脚本?Setuid 似乎不再起作用

Cho*_*per 5 c ubuntu setuid permissions chmod

我有一些与用户“root”一起使用的 bash 脚本来管理 iptable 规则。

问题是我同时想要这些东西:

  • 脚本必须由 root 拥有
  • 权限必须为 700
  • 我想要一个特定用户可以执行的可执行二进制文件。此可执行文件将以 root 身份运行上述脚本。

这曾经有效,并且仍然是我在旧发行版中使用的:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid(0);
   system("/root/iptables/my-iptables-script.sh");

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我编译这个然后使用sudo chown rootand sudo chmod 4777。通过这种方式,用户现在可以执行二进制文件并运行 root 拥有的脚本。

但是现在我安装了 Ubuntu 13.10,当我运行那个二进制文件时,我得到了脚本的“权限被拒绝”。

自 12.04 以来,这方面是否有可能发生变化?

我能做什么?

mic*_*has 6

最简单、最干净的解决方案可能是使用sudo.

您可以将其配置为允许给定的 unix 组以 root 身份运行此脚本。

%iptablegroup ALL = (root) NOPASSWD: /path/to/script 
Run Code Online (Sandbox Code Playgroud)

然后您所要做的就是将所需的用户添加到该组,一切都应该没问题。