setfsuid()和python 2.5.4

时间:2010-05-03 12:33:57

标签: python operating-system

我正在尝试将setfsuid()与python 2.5.4和RHEL 5.4一起使用。 因为它没有包含在os模块中,所以我将它包装在我自己的C模块中,并使用distutils将其安装为python扩展模块。

然而,当我尝试使用它时,我没有得到预期的结果。 setfsuid()返回表示成功的值(从超级用户更改),但是我无法访问只有新设置的用户应该具有用户访问权限的文件(使用open()),表示fsuid没有真正更改。

我尝试通过使用相同的用户输入连续运行两次来验证setfsuid()是否正常工作 结果就好像什么都没有改变一样,并且在每次调用时返回的值都是旧用户id与新用户ID不同。我还从模块调用了getpid(),并从python脚本中返回了相同的id。所以这不是问题。

如果它很重要,我应该注意到我在Apache守护进程(WSGI)中做了所有这些。

任何人都可以提供解释吗? 谢谢

1 个答案:

答案 0 :(得分:2)

更改FSUID的能力仅限于具有CAP_SETFCAP功能的根或非根进程。现在,运行具有root权限的Web服务器通常被认为是不好的做法,因此,您很可能需要在文件服务器上设置功能(有关详细信息,请参阅man capabilities)。请注意,这样做可能严重会影响整个系统的安全性。我建议考虑生成一个以root身份运行的小后端进程,并通过本地UNIX套接字与您的WSGI应用程序进行交互,然后再破坏像Apache这样的高端目标的安全性。