Python 拒绝在目录中写入的Supervisor/Unix权限
当我运行程序并尝试创建文件时,出现以下错误:Python 拒绝在目录中写入的Supervisor/Unix权限,python,unix,file-permissions,supervisord,Python,Unix,File Permissions,Supervisord,当我运行程序并尝试创建文件时,出现以下错误: 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.
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
我认为这个错误
是指新用户的权限
,所以我将新用户
添加到组
giri26
运行groups newuser
会导致:
newuser : giri26
ls-ld couponmonk\u项目的结果是:
drwxrwxr-x 3 giri26 giri26 4096 Jun 27 22:34 couponmonk_project/
我认为,由于newuser
是组giri26
的一部分,group
具有rwx
权限,那么我将能够写入并在couponmonk\u项目
文件夹中创建文件
我看得对吗
谢谢你的帮助
注意
上面的文件夹具有以下权限
:
drwxr-xr-x 10 giri26 giri26 4096 Jun 27 22:52 ../
这是否需要改变
更新
正如下面所建议的,我使用curl
运行strace
,但是output
不包含eaces
的任何实例。输出
文件中有400多行,因此无法在此处全部发布。还有什么我可以注意的吗?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, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\0\0\0\0\0\0"..., 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更改为其他组之一。不幸的是,newuser现在可能看起来像:
$ id
uid=22(newuser) gid=22(newuser) groups=22(newuser), 455(giri26) …
而且由于newuser可能永远不会登录shell,甚至没有密码,所以没有运行newgrp的好地方
要修复它,您应该通过修改/etc/passwd
newuser:x:22:22: …
变成:
newuser:x:22:455: …
这可能会影响新用户的其他文件和目录,请小心。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更改为其他组之一。不幸的是,newuser现在可能看起来像:
$ id
uid=22(newuser) gid=22(newuser) groups=22(newuser), 455(giri26) …
而且由于newuser可能永远不会登录shell,甚至没有密码,所以没有运行newgrp的好地方
要修复它,您应该通过修改/etc/passwd
newuser:x:22:22: …
变成:
newuser:x:22:455: …
这可能会影响新用户的其他文件和目录,请小心。在更改文件权限后,应尝试重新启动实际计算机
如果在远程服务器上运行此操作,请通过web主机控制面板发出命令以重新启动实际计算机
这有望解决问题 在更改文件权限后,应尝试重新启动实际计算机
如果在远程服务器上运行此操作,请通过web主机控制面板发出命令以重新启动实际计算机
这有望解决问题 完成组更改后是否重新启动了supervisor?他们将不适用于美元之前。是的,我试过了,但仍然有相同的问题。文件已经存在吗?如果是,其权限是什么?@AndrewHenle文件不存在。当错误发生时,它即将被创建。@Giri-你的操作系统是什么?如果是Linux,请尝试在strace-f-o/your/output/file/name-your-command
下运行该进程,并查找返回EACCESS
的系统调用。这将告诉您失败的确切系统调用,这比您现在拥有的数据要多。在进行组更改后是否重新启动了supervisor?他们将不适用于美元之前。是的,我试过了,但仍然有相同的问题。文件已经存在吗?如果是,其权限是什么?@AndrewHenle文件不存在。当错误发生时,它即将被创建。@Giri-你的操作系统是什么?如果是Linux,请尝试在strace-f-o/your/output/file/name-your-command
下运行该进程,并查找返回EACCESS
的系统调用。这将告诉你失败的确切系统调用,这比你现在拥有的数据要多。谢谢@msw。我在您的回复中运行了这些命令,并为newuser
获得了以下信息:uid=1001(newuser)gid=1000(giri26)groups=1000(giri26)
。谢谢@msw。我在您的响应中运行了这些命令,并为newuser
获得了以下信息:uid=1001(newuser)gid=1000(giri26)groups=1000(giri26)
。