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
指的是 newuser
的 permissions
,所以我将 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
权限,那么我可以 write
和 couponmonk_project
文件夹中的 create
个文件。
我看对了吗?
感谢您的帮助。
注意
上面的文件夹有以下permissions
:
drwxr-xr-x 10 giri26 giri26 4096 Jun 27 22:52 ../
这是否需要更改?
更新
如下所示,我 运行 strace
和 curl
但 output
不包含 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: …
这可能会影响新用户的其他文件和目录,请小心。
您应该在更改文件权限后尝试重新启动实际机器。
如果您在远程服务器上 运行,请通过虚拟主机控制面板发出命令以重新启动实际机器。
这应该有望解决问题。
当我 运行 我的程序并尝试创建文件时,出现以下错误:
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
指的是 newuser
的 permissions
,所以我将 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
权限,那么我可以 write
和 couponmonk_project
文件夹中的 create
个文件。
我看对了吗?
感谢您的帮助。
注意
上面的文件夹有以下permissions
:
drwxr-xr-x 10 giri26 giri26 4096 Jun 27 22:52 ../
这是否需要更改?
更新
如下所示,我 运行 strace
和 curl
但 output
不包含 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
newuser:x:22:22: …
变为:
newuser:x:22:455: …
这可能会影响新用户的其他文件和目录,请小心。
您应该在更改文件权限后尝试重新启动实际机器。
如果您在远程服务器上 运行,请通过虚拟主机控制面板发出命令以重新启动实际机器。
这应该有望解决问题。