NGINXユーザーを変更するにはどうすればよいですか?


37

ディレクトリを作成し、ディレクトリに画像を出力するPHPスクリプトがあります。これはApacheの下ではうまく機能していましたが、最近、限られたRAMをさらに活用するためにNGINXに切り替えることにしました。PHP mkdir()コマンドを使用してディレクトリを作成しています。

mkdir(dirname($path['image']['server']), 0755, true);

NGINXに切り替えた後、次の警告が表示されます。

Warning: mkdir(): Permission denied in ...

私はすでに親ディレクトリのすべての権限を確認しているので、おそらくNGINXまたはPHP-FPMの「ユーザー」を変更する必要があると判断しましたが、それを行う方法がわかりません(ユーザーを指定する必要はありませんでしたAPACHEの権限)。私はこれに関する多くの情報を見つけることができないようです。どんな助けも素晴らしいでしょう!

(注:この小さなハングアップに加えて、NGINXへの切り替えは非常にシームレスでした。初めて使用するので、NGINXを起動して実行するのに文字通り約10分しかかかりませんでした。よじれます。)


1
nginxがパッケージマネージャーによってインストールされた場合、おそらく 'ps'を使用して、nginxが実行されているユーザーを確認し、ディレクトリの所有者をそのユーザーに変更することをお勧めします。通常、セキュリティはデフォルトでパッケージによってかなり適切に設定されており、ユーザーを変更すると他の何かを混乱させる可能性があります。
ヨアヒム・イザクソン

nginx.confそしてwww.conf、デフォルトIIRCによります。
ピーハー

fastcgiを使用している場合は、phpscriptをsuexecできるかどうかを確認してください。特定のユーザーでさまざまなサイトを実行できます。いくつかのセットアップ手順がオンラインで利用できると確信しています。
-hakre

回答:


58

www:wwwとしてnginxとphp-fpmを実行します

1. Nginx

nginx.confを編集し、ユーザーwww www;

マスタープロセスがルートとして実行されている場合、nginxはsetuid()/ setgid()をUSER / GROUPに設定します。GROUPが指定されていない場合、nginxはUSERと同じ名前を使用します。デフォルトでは、nobody user and nobody or nogroup groupまたは./configureスクリプトの--user = USERおよび--group = GROUPです。

2. PHP-FPM

php-fpm.confを編集し、ユーザーとグループをに設定しますwww

user-プロセスのUnixユーザー。デフォルトの「www-data」

group-プロセスのUnixグループ。デフォルトの「www-data」


1
さて、nginx.confを変更しました(これはに設定されていましたuser www-data)。しかし、私は見ていない任意の中で定義されたユーザをphp-fpm.conf。同じ構文(user www www)を使用してトップに追加するだけですか?
デビッド

php-confの構文は、os nginx.confと同じではありません。[www]部品を見つけてuser=www、次の行と次の行に追加しgroup=wwwます。
グラビッチ

nginxのを再起動するとき、私は、次のエラーを得た:nginxの再起動します:[emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed
デビッド

次に、適切なディレクトリに対する適切な権限を持つユーザーとしてNginxとphp-fpmを実行するか、「sudo useradd -g www www」を実行してwwwという新しいユーザーを作成します。より詳細な説明が必要な場合はお知らせください。
ローマPrykhodchenko

1
@xorinzor:いいえ、持っているものを使用してください:D
glavić16年

25

Ubuntu 14.04に変更するファイルのユーザーグループの中でPHP-FPMは次のとおりです/etc/php5/fpm/pool.d/www.conf。このファイルで、これらのパラメーターを変更します。

user = www
group = www
listen.owner = www
listen.group = www

3
これは、Ubuntu 16.10にも当てはまります。
クレイマスジエン

1
これは、Ubuntu 18.04にも
当てはまります

これは、受け入れられた答えに非常に良い追加になるでしょう。
アシュカンKh。ナザリー

PHP 7.2の場合/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

あなたに答えるために、実際の問題は、単に変更することでuser、ラインをnginx.confそのように:

user    [username];

例:

user    www-data;

実際に実行するNginxの優先ユーザーは、オペレーティングシステムによって異なります。Nginxはとして実行されることになっていますwww-data。それ以外の場合は、実際にとして実行されることになっていますnobody

一部のオペレーティングシステム(Windowsなど)では、それも問題ではなく、入力したuser行をnginx.confコメント化するか、完全に除外することができます。


ユーザーディレクティブを追加してNginxサービスを再起動すると、「ユーザー」がunknwnディレクティブであるというエラーがスローされます。したがって、そのままにしておいてかまいませんか?
JoeTidee

はい。OSやNginxによっては、一部のバージョンでは明示的なユーザーディレクティブが不要です。
-rubynorails

ユーザーディレクティブを認識するには、Nginx構成ファイルの一番上にユーザーディレクティブを配置する必要がありました。
JoeTidee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.