【问题标题】:Django - Permission Error when opening pipe to writeDjango - 打开管道写入时出现权限错误
【发布时间】: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


    【解决方案1】:

    我在我的/etc/rc.local 脚本中更改了uwsgi 命令中的--gid 参数,该脚本负责在启动时启动服务器:

    /usr/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid gate
    

    现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2020-01-07
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多