在使用FastCGI运行Django时的Socket权限
我正在用标准命令运行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 只有在设置为后台运行(默认就是这个设置)时才会生效。