【发布时间】:2016-11-04 20:27:00
【问题描述】:
我的 Django 应用程序与我的命名管道的守护进程通信时遇到问题:
Django 应用程序 ->garage_gate_pipe -> python 守护进程
守护进程由gate 用户使用,我假设www-data 负责运行我的Django 应用程序(应用程序由uwsgi 驱动),所以我将www-data 添加到gate 组:
$ sudo -u www-data groups
gate www-data
并且我已授予garage_gate_pipe 的适当访问权限:
prw-rw---- 1 gate gate 0 Jul 2 17:55 garage_gate_pipe
不幸的是因为权限错误,它没有工作:
[Errno 13] 权限被拒绝:'/path/to/garage_gate_pipe'
这是错误行:
pipeout = open(settings.PIPE_NAME, 'w')
这很奇怪,因为在命令行中一切正常:
echo -n 'Open' | sudo -u www-data tee ./garage_gate_pipe
我决定检查哪个用户负责管理 Django 应用,所以我更改了管道的权限:
sudo chmod 666 garage_gate_pipe
并决定从 shell 调用 whoami 命令并将其发送到我的命名管道并在我的 python 守护程序中打印:
os.system("whoami > /home/gate/garage_gate/gate_gpio/garage_gate_pipe")
pipeout = open(settings.PIPE_NAME, 'w')
一切正常……
我的守护进程的输出是:
'www-数据
'
很奇怪,因为我的 uwsgi Django 应用似乎是由www-data 用户运行的。
我的命名管道 garage_gate_pipe 具有良好的访问权限,因此我可以从命令行对其进行写入,但从 django 应用程序中它不起作用,除非我为 others 添加写入权限...
知道我可以更改什么以使此解决方案使用660 权限garage_gate_pipe?
【问题讨论】:
标签: python django permissions uwsgi named-pipes