Nginx 尝试写入图像文件时权限被拒绝

Nginx 尝试写入图像文件时权限被拒绝

我在 Linux 服务器上使用 Nginx,并且我有一个文件夹/usr/local/openresty/nginx/webfolder/img,我想让 nginx 保存我上传的图像文件。

所以,这就是我所做的:

1)我将目录的所有者更改为组www-data中的用户:www-data

chown -R www-data:www-data /usr/local/openresty/nginx/webfolder/img

2)然后我更新了目录的权限:

sudo chmod 0600 /usr/local/openresty/nginx/webfolder/img

Lua 上传错误部分(我记录错误的地方):

fileToSave, errMessage = io.open(savefiletarget, "w+b")
                        if not fileToSave then
                            --ngx.say("failed to open file ", savefiletarget)
                            ngx.log(ngx.NOTICE,'failed to save file : '..savefiletarget..' reason: '..errMessage);
                            ngx.say('{"filename" : "'..filenametosave..'","status" : 0 ,"message":"failed to open file"}')
                            return
                        end

现在,Permission Denied当我尝试上传文件时,仍然显示错误日志。

我假设www-datanginx 使用的用户正确吗?那么为什么我仍然无法写入文件?

答案1

您授予了目录错误的权限。0600将给予目录的权限。但要访问目录,您还需要执行权限。以下是示例:

[jenny@temeraire sf] $ mkdir test1
[jenny@temeraire sf] $ chmod 0600 test1
[jenny@temeraire sf] $ touch test1/foo
touch: test1/foo: Permission denied
[jenny@temeraire sf] $ chmod 0700 test1
[jenny@temeraire sf] $ touch test1/foo
[jenny@temeraire sf] $ ls -ld test1/foo
-rw-r--r--  1 jenny  staff  0 Jun  5 07:46 test1/foo

答案2

在 /etc/nginx/nginx.conf 中查找user指令,它是主配置文件。

如果不存在,那么您可以使用以下命令检查正在运行的进程ps -fwwC nginx。用户 ID 可能是最左边的列。

然后,您可以确定该用户是否对特定文件模式具有特定权限,sudo -u nginx test -w /usr/local/openresty/nginx/webfolder/img && { echo YUP; } || { echo NOPE; }除非用户“nginx”在该目录中具有写权限,否则将返回 errexit > 0(NOPE)。

如果没有,那么您可能需要将用户添加到拥有该目录的权限组,并更改目录的文件模式以允许组写入sudo useradd -aG www-data nginx; sudo chmod g+w -c /usr/local/openresty/nginx/webfolder/img

相关内容