Unix 如何阻止给定用户的所有流量?

Unix 如何阻止给定用户的所有流量?,unix,iptables,su,mutt,Unix,Iptables,Su,Mutt,我想在UNIX上以受限权限运行脚本。具体来说,我希望运行我收到的代码,而不让它发送数据。我目前的解决办法是: 创建一个虚拟用户 使用iptables阻止虚拟用户的所有传出流量 使用su-dummy-c'command'以虚拟用户身份运行目标程序 实现上述步骤2的方法如中所述。具体而言,我使用以下命令添加新规则: sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP 当我现在尝试通过切换到虚拟帐户ping一个web地址时,ping确

我想在UNIX上以受限权限运行脚本。具体来说,我希望运行我收到的代码,而不让它发送数据。我目前的解决办法是:

  • 创建一个虚拟用户
  • 使用
    iptables
    阻止虚拟用户的所有传出流量
  • 使用
    su-dummy-c'command'
    以虚拟用户身份运行目标程序
  • 实现上述步骤2的方法如中所述。具体而言,我使用以下命令添加新规则:

    sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP
    
    当我现在尝试通过切换到虚拟帐户ping一个web地址时,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]'
    

    为什么规则不阻止这一点,更一般地说,我如何确保我正在运行的程序的所有传出流量都被阻止?

    mutt使用邮件服务器发送电子邮件,而这很可能不是使用dummy的uid运行。

    mutt使用邮件服务器发送电子邮件,这很可能不是使用dummy的uid运行的。

    这里有一个设置chroot监狱的指南,您似乎需要它

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

    这允许您控制可以执行的命令,您可以毫无问题地限制用户访问mutt之类的东西。如果您授予访问权限,则不必考虑拒绝什么。因为所有命令都是默认阻止的。这使得设置更加简单。

    这里有一个设置chroot监狱的指南,您似乎需要它

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

    这允许您控制可以执行的命令,您可以毫无问题地限制用户访问mutt之类的东西。如果您授予访问权限,则不必考虑拒绝什么。因为所有命令都是默认阻止的。这使得设置更加简单。

    这可能更适合。谢谢,我不知道那个网页。我想如果不重新发布,就无法将这个问题转移到那里。这可能更适合你。谢谢,我不知道那个网页。我假设如果不重新发布,就无法将这个问题转移到那里。只有当邮件服务器是本地的并且上面的iptables规则不适用于本地流量时,这才有意义。(mutt仍然需要与邮件服务器通信。)您可能需要尝试:su-dummy-c'ping 127.0.0.1'如果这样做有效,并且您的邮件服务器位于本地计算机上,我必须同意Jorge的说法。ping localhost有效。我不确定如何判断我的邮件服务器是否在本地计算机上(我没有以任何特定方式配置mutt)。除了mutt之外,您还必须查看您的脚本是否正在使用任何其他可能在该虚拟机的uid上运行/运行的内容,并且可能仍然保持internet访问。mutt只是一个例子,但是你可以有更多的交互可以通过。因为我无法控制脚本可能使用的其他程序,我想用这种方式实现沙箱是不可能的。你考虑过chroot监狱吗?只有当邮件服务器是本地的并且上面的iptables规则不适用于本地流量时,这才有意义。(mutt仍然需要与邮件服务器通信。)您可能需要尝试:su-dummy-c'ping 127.0.0.1'如果这样做有效,并且您的邮件服务器位于本地计算机上,我必须同意Jorge的说法。ping localhost有效。我不确定如何判断我的邮件服务器是否在本地计算机上(我没有以任何特定方式配置mutt)。除了mutt之外,您还必须查看您的脚本是否正在使用任何其他可能在该虚拟机的uid上运行/运行的内容,并且可能仍然保持internet访问。mutt只是一个例子,但是你可以有更多的交互可以通过。因为我无法控制脚本可能使用的其他程序,我想用这种方式实现沙箱是不可能的。你考虑过chroot监狱吗?这样,您就可以控制沙箱将允许哪些命令。