我想在具有受限权限的 UNIX 上运行脚本。具体来说,我想运行我收到的代码而不让它发送数据。我目前的解决方案是:
- 创建一个虚拟用户。
- 用于
iptables
阻止虚拟用户的所有传出流量。 - 以虚拟用户身份运行目标程序,使用
su - dummy -c 'command'
.
我实现上述第 2 步的方式如本页所述。具体来说,我使用以下命令添加新规则:
sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP
当我现在尝试通过切换到虚拟帐户来 ping 一个网址时,ping 确实失败了,因为我将规则添加到了 iptables。这是该命令:
> su - dummy -c 'ping www.google.com'
ping: unknown host www.google.com
尝试使用traceroute
. 但是,当我尝试使用类似的方式发送电子邮件时mutt
,它会成功:
su - dummy -c 'echo "test" | mutt -s test [emailaddress]'
为什么该规则不阻止这一点,更一般地说,我如何确保阻止我正在运行的程序的所有传出流量?