2013-03-06 50 views
1

我想在UNIX上以受限特权运行脚本。具体来说,我想运行我收到的代码而不让它发送数据。我目前的解决方案是:如何阻止给定用户的所有流量?

  1. 创建一个虚拟用户。
  2. 使用iptables来阻止伪用户的所有传出流量。
  3. 使用su - dummy -c 'command'作为虚拟用户运行目标程序。

我实现上述第2步的方式如this page中所述。具体来说,我用下面的命令来添加新的规则:

sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP 

当我现在尝试通过切换到虚拟帐户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]' 

为什么不规则街区,以及更普遍,如何确保所有出站流量被阻挡了我正在运行的程序?

+0

这可能更适合http://superuser.com/。 – 2013-03-06 02:25:17

+0

谢谢,我不知道那个网页。我认为没有任何方法可以在那里转移这个问题,而不必重新发布。 – ask 2013-03-06 02:32:02

回答

0

这是一个设置chroot监狱的指南,它似乎是你需要的。

https://help.ubuntu.com/community/BasicChroot 

这可以让你控制什么命令可以执行,你可以限制用户访问像mutt这样的东西没有问题。您授予访问权限,您不必知道拒绝的内容。因为所有命令都被默认阻止。这使得设置更简单。

1

mutt使用邮件服务器发送电子邮件,而这很可能不会与虚拟用户身份一起运行。

+0

只有当邮件服务器是本地的_and_上面的iptables规则不适用于本地流量时,这才有意义。 (mutt仍然需要与邮件服务器进行通信。)你可能想尝试:su - dummy -c'ping 127.0.0.1'如果这样,而你的邮件服务器在本地机器上,我必须同意乔治。 – Sniggerfardimungus 2013-03-06 02:29:09

+0

Pinging localhost工作。我不知道我怎么能告诉我的邮件服务器在本地机器上(我没有以任何特殊的方式配置mutt)。 – ask 2013-03-06 02:39:07

+0

除了mutt,你必须看看你的脚本是否在使用任何其他可能运行/运行在其他虚拟的其他用户上,并且仍然可以保持互联网访问的东西。 mutt只是一个例子,但你可以有更多的交互可以通过。 – 2013-03-06 02:54:04