允许用户仅运行具有 root 权限/特权的特定二进制文件

iTa*_*ayb 7 permissions sudo shell-script

我想允许特定用户只能使用 sudo /sbin/iptables

我有一个配置 iptables 的 bash 脚本。问题是配置/sbin/iptables为 sudoable 是不够的 - 脚本本身也必须是 sudoable。

问题是该文件可以由用户编辑(他可能会更改那里的配置),使他能够以 root 身份运行任何命令。

解决这个问题的正确方法是什么?

Sté*_*nez 6

我可以看到两种方法:

  1. 允许用户使用/sbin/iptables通过sudo没有任何限制(这是危险的东西,这意味着你信任的用户以某种方式),并与用户的权限运行该脚本。该脚本将在sudo每次/sbin/iptables需要时调用。这是假设脚本执行速度很快,因为最终将需要定期输入一些密码¹。

    • 优点:您不需要对脚本有任何信任。
    • 缺点:如前所述,允许用户/sbin/iptables不受限制地使用是危险的。
  2. 允许用户仅通过 调用脚本sudo

    • 优点:使用/sbin/iptables受脚本限制。
    • 缺点:脚本必须完美无缺。

关于你提到的问题:如果脚本是由我们拥有的,root并且具有通常的权限:rwxr-xr-x,其他用户无法修改它,他们只能执行它(最终通过sudo获得更多权限)。

对于解决方案 2,对于 shell 脚本(与更强大的二进制文件/程序相比),请注意环境变量和可以修改脚本执行的几个外部因素。检查您的 sudo 配置是否正确重置了每个潜在有害变量的定义。


1. 其实sudo可以根据需要配置NOPASSWD

  • 如果你走 shell 脚本路线,推荐阅读:[如何安全地将变量传递给启用 root 的脚本?](http://unix.stackexchange.com/questions/17567/how-to-safely-pass-variables-to -root-enabled-scripts)。 (2认同)