fstat()是一个安全(沙盒)操作吗?

时间:2011-07-04 21:24:50

标签: python sandbox stat pypy

我目前正在使用沙盒PyPy编写Python沙箱。基本上,沙箱的工作原理是提供一个“控制器”,将系统库调用映射到指定的函数。按照codespeak上的说明(完成设置过程)后,我意识到默认控制器不包含os.fstat()的替换,因此在我调用open()时崩溃。具体而言,所包含的pypy/translator/sandbox/sandlib.py不包含do_ll_os__ll_os_fstat的定义。

到目前为止,我已将其实施为:

def do_ll_os__ll_os_fstat(self, fd):
    return os.fstat(fd)

似乎工作正常。这样安全吗?这会在沙箱中形成一个洞吗?

2 个答案:

答案 0 :(得分:4)

fstat呼叫可以揭示您可能或可能不想保密的某些信息。除其他外:

  • 两个文件描述符是否在同一个文件系统上
  • 底层文件系统的块大小
  • 文件所有者的数字UID / GID
  • 文件的修改/访问时间

但是,它不会修改任何东西,所以如果你不介意这个(相对较小的)信息泄露,没问题。您还可以更改某些结果以屏蔽要隐藏的信息(例如,将所有者UID / GID设置为0)

答案 1 :(得分:3)

bdonlan的答案很好,但既然这里有赏金,那到底是什么: - )

通过阅读POSIX spec for struct stat,您可以准确地了解fstat提供的信息。

这绝对是一种“只读”操作。通常,Unix文件描述符仅提供对它们引用的单个对象的访问。例如,引用目录的(可读)文件描述符将允许您列出目录中的文件,但它不允许您访问目录中的文件;为此,您需要open()该文件,该文件将执行权限检查。

请注意,可以在目录或套接字等非文件上调用fstat。但是,在这里,它只会提供您在struct stat中看到的信息,并且不会修改任何内容。 (对于套接字,大多数字段都没有意义。)