web-dev-qa-db-ja.com

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-dataはnginxが正しく使用するユーザーだと思いますか?では、なぜまだファイルを書き込めないのですか?

1

ディレクトリに間違った権限を与えました。 0600は、ディレクトリへの読み取りおよび書き込み権限を付与します。ただし、ディレクトリにアクセスするには、execute権限も必要です。次に例を示します。

[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
Jenny D

メインの構成ファイルである/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のようなグループ書き込みを許可する必要があります。

0
qrkourier