Supervisor / Unix 权限被拒绝写入目录

Supervisor / Unix Permission Denied to write in directory

当我 运行 我的程序并尝试创建文件时,出现以下错误:

IOError: [Errno 13] Permission denied: '/home/giri26/couponmonk_project/user_15_qr.png'

我 运行 我的程序使用 supervisor 这是 config 文件:

[program:gunicorn-couponmonk]
directory = /home/giri26/couponmonk_project
command = /home/giri26/venv/py2.7/bin/python /home/giri26/venv/py2.7/bin/gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker __init__:app 
stdout_logfile = /var/log/gunicorn/couponmonk-std.log
stderr_logfile = /var/log/gunicorn/couponmonk-err.log
user = newuser

我认为 error 指的是 newuserpermissions,所以我将 newuser 添加到 group giri26

运行 groups newuser 结果:

newuser : giri26

ls -ld couponmonk_project/的结果是:

drwxrwxr-x 3 giri26 giri26 4096 Jun 27 22:34 couponmonk_project/

我认为 newuser 是组 giri26 的一部分,并且 group 具有 rwx 权限,那么我可以 writecouponmonk_project 文件夹中的 create 个文件。

我看对了吗?

感谢您的帮助。

注意

上面的文件夹有以下permissions:

drwxr-xr-x 10 giri26 giri26 4096 Jun 27 22:52 ../

这是否需要更改?

更新

如下所示,我 运行 stracecurloutput 不包含 EACESS 的任何实例。 output 文件中有 400 多行,所以不能 post 全部放在这里。还有什么我可能需要注意的吗? ATM,我真的不知道什么是相关的。

这些行出现很多:

762   access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
762   open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY) = 3
762   read(3, "7ELF[=15=][=15=][=15=][=15=][=15=][=15=][=15=][=15=][=15=][=15=]>[=15=][=15=][=15=][=15=]0\r[=15=][=15=][=15=][=15=][=15=][=15=]"..., 832) = 832
762   fstat(3, {st_mode=S_IFREG|0644, st_size=14768, ...}) = 0
762   mmap(NULL, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa0d731f000
762   mprotect(0x7fa0d7321000, 2097152, PROT_NONE) = 0
762   mmap(0x7fa0d7521000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fa0d7521000
762   close(3) 

这也出现在输出的末尾:

recvfrom(3, "HTTP/1.1 500 INTERNAL SERVER ERR"..., 16384, 0, NULL, NULL) = 10510

你的 gunicorn 配置文件中的行

user = newuser

似乎确实是核心问题。正如

所示
$ id
uid=1001(msw) gid=1001(msw) groups=1001(msw),4(adm),8(mail) …

一个用户有一个uid和一个gid。列出的所有其他组都是您所属的组,但不是您的 gid。要更改 gid,您必须明确要求将其切换为:

$ newgrp mail
$ id
uid=1001(msw) gid=8(mail) groups=1001(msw),4(adm),8(mail) …

确实将我的 gid 更改为我的其他组之一。不幸的是,新用户现在可能看起来像:

 $ id
 uid=22(newuser) gid=22(newuser) groups=22(newuser), 455(giri26) …

并且由于新用户可能永远不会登录到 shell 甚至没有密码,所以没有 运行 newgrp 的好地方。

要修复它,您应该通过修改 /etc/passwd

使 giri26 成为新用户的 gid
newuser:x:22:22: …

变为:

newuser:x:22:455: …

这可能会影响新用户的其他文件和目录,请小心。

您应该在更改文件权限后尝试重新启动实际机器。

如果您在远程服务器上 运行,请通过虚拟主机控制面板发出命令以重新启动实际机器。

这应该有望解决问题。