在使用FastCGI运行Django时的Socket权限

3 投票
3 回答
1667 浏览
提问于 2025-04-16 02:28

我正在用标准命令运行Django的fcgi:

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

问题是,fastcgi进程和web服务器之间只共享了组权限,而不是用户权限。不过,默认情况下,组是没有写权限的(临时解决办法是手动运行chmod g+w来添加写权限)。

我该如何强制进程以0770的权限创建socket?

3 个回答

1

umask= 这个设置在 daemonize=false 的情况下不起作用。这时,它会使用你当前操作系统的 umask 值。所以在运行你的脚本之前,先执行 umask 0007

1

我找不到用fastcgi来解决这个问题的方法,于是在我的settings.py文件最后加了一个os.fchmod,这样似乎就能用了。不过这真的是个很糟糕的解决办法,他们应该在启动服务的时候就允许你设置这个。

4

./manage.py runfcgi help 说:

umask=UMASK 当程序变成后台进程时使用的umask(默认值是022)。

所以你只需要运行:

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

这样就会创建一个权限为0770的套接字。请注意,umask 只有在设置为后台运行(默认就是这个设置)时才会生效。

撰写回答