【问题标题】:Socket permissions when running Django with FastCGI使用 FastCGI 运行 Django 时的套接字权限
【发布时间】:2010-08-07 15:47:44
【问题描述】:

我正在使用标准行运行 Django fcgi:

exec setuidgid $USERID $VENVBIN/python $WEBAPP/manage.py runfcgi daemonize=false socket=$FCGISOCKET

问题是 fastcgi 进程和网络服务器之间只有组共享,而不是用户 - 但是默认情况下组没有写入权限(修补程序正在手动运行 chmod g+w)。

如何强制进程在 0770 模式下创建套接字?

【问题讨论】:

    标签: python django deployment fastcgi


    【解决方案1】:

    ./manage.py runfcgi help 说:

    umask=UMASK 守护进程时使用的 umask(默认 022)。

    所以你只需要运行:

    ./manage.py runfcgi socket=$FCGISOCKET umask=007
    

    然后将创建一个模式为 0770 的套接字。请注意,仅当 daemonize 设置为 true(这是默认设置)时才设置 umask。

    【讨论】:

    • 我尝试了各种 umask 设置,但它们都为我创建了 srwxr-xr-x 权限:-/
    • 您确定您没有尝试使用daemonize=false 运行它吗?
    • 你说得对,我无法正确阅读。但是,daemonize=true 阻止我使用 daemontools 来监督进程...有什么办法可以使用 umask 吗?
    • 似乎没有办法做到这一点。代码仅在守护进程时设置 umask。它可以在 django.core.servers.fastcgi 中的一行代码中修复。但这将是另一种不太好的方法。我真的很想知道为什么 django 开发人员在没有守护进程的情况下使 umask 无法使用
    【解决方案2】:

    找不到使用 fastcgi 的方法,在我的 settings.py 末尾添加了一个 os.fchmod,这似乎使它工作。仍然是一个可怕的黑客,他们应该允许你在调用服务时设置它。

    【讨论】:

    • 是的,使用类似的 hack,但我真的很想避免它:]
    【解决方案3】:

    umask= 在与daemonize=false 一起运行时不起作用。在这种情况下,它只会使用你当前的 os umask,所以在你的脚本之前运行umask 0007

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 2012-09-28
      • 2012-04-19
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      相关资源
      最近更新 更多