Nginx+php-fpm下でパーミッションがめちゃくちゃになってた話

やれやれ大変な目にあったぜ…

サーバーを管理していたりWordPressを導入したりするとファイルやディレクトリのパーミッション設定はセキュリティ上避けては通れない道ですが、WordPressのパーミッション設定で特に有名というか必要不可欠の設定が「wp-config.phpを外部からアクセス出来ないようにする」という設定です。
自分はこれを660にしていたんですが、ちょーっと確認してみるとアクセスできてしまったんですね。表示される内容は空白ですし、ダウンローダーにぶっ込んでも空ファイルが生成されるだけではあったのですが、これはどうにもセキュリティ上よろしくないってので、何がどうなってんのか調べてみることにしました。

所有者は誰でグループは誰でその他は一体誰なんだ

とりあえずテスト用に生贄のindex.htmlを作成。パーミッションを400にしてみるものの見れる。どういうこっちゃ
コマンド叩いて確認してみます。

所有者がNginxになっとるなこれ…
外部からのアクセスに応じてファイルを見に行ったりするのは、WebサーバープログラムであるNginxなので、こいつが所有者である場合全てのアクセスが可能になってしまいます。これはあかん。

さてこれでいいかな…
パーミッションを660とかにしてみます。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-10-20-40-13

よしよしよし。

しかし困ったことが。これではせっかく書き込みできていたはずのディレクトリなんかにphpでうごいてるWordPressもアクセスできなくなっちゃう。つまりプラグインの導入や編集やテーマ周りの編集機能がオジャンになってしまうと。

どーうしたもんか、というところで「Nginxとphpを実行してるphp-fpmの実行ユーザーは別々にできる」という話を聞いてちょっとやってみることに。


php-fpmの実行ユーザーをNginxから変える

とりあえずuseraddで適当なユーザーを作成します。

最初にphp-fpm.confを編集して、新しく作る設定ファイルを読み込んでくれるようにします。

デフォルトではコメントアウトされているincludeの設置部分を修正します。

そして、存在しない場合は新しいディレクトリと先程作ったユーザー用の設定ファイルを作成します。

設定内容は環境によって様々なので、合わせて変更して下さい。
そしてphp-fpmを再起動。

仕上げにこのままではNginxがphp-fpmのソケットにアクセスできないのでNginxの設定を編集します。

upstream部分とfastcgi_pass部分を修正。

そしてNginxを再起動して完了です。

この状態でphpinfo()を実行すると、正常に実行ユーザーが変更できていればEnvironmentの項目でUSER部分がtestと表示されます。やったね!


ただしこれでも少し注意が必要で、他のファイルはいいのですがphpファイルのパーミッションを660とかにしてもphpを実行するのはアクセス者ではなく新しく作ったtestユーザーなので実行されちゃいます。ダウンロードできるかは試してないのでなんとも言えませんが、そういったファイルにアクセス出来ないようにするにはおとなしくNginxのconfファイルにlocation = /hoge.php {deny all;}とでも書いておきましょう…

Share this:

rexent_gx

インターネットクソオタク

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください