Nginx + php-fpm の時に php の実行ユーザーを固定する

この記事は公開されてから6年経過しています。現在とは内容が異なる場合がありますのでご注意ください。
最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。

共用サーバーとかで設定ファイルのパーミッション設定によってDBのユーザー名やパスワードが漏出するというのがありました。
あれって、php がウェブサーバーの実行ユーザーで実行されるから第3者への読み取り権限をつけていたからだと思うんです。
apache + mod_php の場合だと apache ユーザーでの読み込みが必要となりますからそれに紛れて第3者がアクセスできたということみたいですね。そうしないと設定ファイルが読み取れなくてプログラムが動かなくなりますしね。

じゃぁどう対応するかっていうと第3者の読み取り権限を外してしまえばいいわけです。
そうなると apache ユーザーからも読み込みができなくなるのでプログラムが動かなくなってしまいます。
さぁ困った。

というわけで今回は php 実行時のユーザーをファイル所有者とあわせれるようにしてみます。
なお、今回は Nginx + php-fpm という環境の前提で進めます。
apache の場合? suPHP とかでググってみてください。いろいろと情報はあるようです。


まずは php-fpm の設定を変更します。

include=etc/fpm.d/*.conf というのがコメントアウトされているのでコメントインして微修正します。
include=etc/php-fpm.d/*.conf とします。

hoge ユーザー用の php-fpm の設定ファイルを作成します。

保存したら php-fpm を再起動します。

として php-fpm のプロセスが start_servers の数だけあるか確認しておきます。

続けて Nginx の設定ファイルを変更します。

すでに php-fpm を使っていれば upstream の設定があると思うのでそれをコピペ&微修正します
upstream 名は他のと被らないようにし、 server には hoge.conf に設定した listen とあわせます。

次にバーチャルホストの設定を変更します。

fastcgi_pass の設定を先ほどの php-fpm-hoge に設定します。

あとは Nginx の設定を再読み込みすればok。

試しに hoge の public ディレクトリに phpinfo でも作成して確認してみましょう。
一番下の方の Environment の項目で USER のところが hoge になっていれば hoge ユーザーで実行されています。