Permissão negada quando o Nginx tenta gravar um arquivo de imagem

1

Estou usando o Nginx para um servidor Linux e tenho essa pasta /usr/local/openresty/nginx/webfolder/img , onde desejo que o nginx salve meus arquivos de imagem enviados.

Então, foi o que eu fiz:

1) Alterei o proprietário do diretório para www-data user em www-data group:

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

2) Então eu atualizei as permissões do diretório:

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

Lua faz upload da parte errada (onde eu registro o erro):

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

Neste momento, meu log de erros ainda mostra Permission Denied quando tento fazer o upload do arquivo.

Eu assumo que www-data é o usuário que o nginx usa certo? Então, por que não consigo escrever o arquivo?

    
por Joshua Rajandiran 05.06.2018 / 04:13

2 respostas

2

Você deu ao diretório as permissões erradas. 0600 dará permissões de leitura e gravação ao diretório. Mas, para acessar um diretório, você também precisa da permissão executar . Aqui está um exemplo:

[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
    
por 05.06.2018 / 07:48
0

Procure a diretiva user em /etc/nginx/nginx.conf, que é o arquivo de configuração principal.

Se isso não estiver presente, você poderá inspecionar o processo em execução com um comando como ps -fwwC nginx . O ID do usuário provavelmente será a coluna mais à esquerda.

Em seguida, você pode saber se esse usuário tem um privilégio específico para um tipo de arquivo específico, como sudo -u nginx test -w /usr/local/openresty/nginx/webfolder/img && { echo YUP; } || { echo NOPE; } , que retornará errexit > 0 (NOPE), a menos que o usuário "nginx" tenha privilégios de gravação nesse diretório.

Se não, você provavelmente precisará adicionar o usuário ao grupo de permissões que possui esse diretório e alterar o tipo de arquivo do diretório para permitir a gravação em grupo como sudo useradd -aG www-data nginx; sudo chmod g+w -c /usr/local/openresty/nginx/webfolder/img .

    
por 05.06.2018 / 06:16