ユーザー、グループそしてパーミッション(WordPressのセキュリティ)

parmission
プロにとっては当たり前のことでも、一般には馴染みの薄いことというのはよくある。
ファイルのユーザー(所有者=オーナー)、グループ、およびパーミッションという概念もその一つだろう。こんなことは通常、プロが知っておけばよいのだが、ホームページを運営していて自分でも少しはいじっているという人にとっては、必須の知識だ。
先般も、プロであるはずのレンタルサーバー会社が、ファイルのパーミッションの設定不備により、大規模なサイトの改ざんを招いてしまうという事件があった。つまり、セキュリティに関わる問題なので、必須の知識というわけだ。
(2013.10.20追記)これが目茶苦茶わかりやすかった、最後に宣伝付きですが。(2017.11.1追記)以下の記事中のスライドにリンクを張っていましたが,現在リンク切れになっています。
https://firegoby.jp/archives/5103/

WordPress更新時やテーマ更新時にFTP情報入力画面が表示されるのは、なぜ?

WordPressの場合、ブラウザの管理画面から、テーマやプラグインの更新、画像のアップロードなどが行えるようになっているのだが、これがまれにうまくいかないことがある。なぜこういうことが起こるのかというと、ファイルの所有者とプログラム(PHP)の実行ユーザーのチェックを行う仕組みがあるからだ。
つまり、セキュリティの観点から自分のファイルじゃないものをアップロードしたりできない仕組みが備わっているわけだ。
この場合、どういう対策をとるべきかだが、「WordPress更新時にFTP情報入力画面が表示される場合の対処方法」などと検索してみると問題がありそうな対策法がたくさん出てくる。
つまり、チェックの仕組みがあるから、アップロードや更新ができないのだったら、このチェックの仕組みを無効にしてしまえ、というものだ。なんとも乱暴な話だ。果ては、アップロードディレクトリ、アップグレードディレクトリ、およびテーマディレクトリのパーミッションを誰でも書き込み可能に変更せよというものまである。
こんなことをすれば、セキュリティレベルとしては大変な問題である。目先の問題は回避できるかもしれないが、もっと深刻な問題を引き起こしている。

セキュリティを犠牲にした対策は危険だ

このチェックの仕組みは、webサーバーの実行ユーザーとphpの実行ユーザーが一致しているいうのが前提になっている。つまり、ファイルの所有者もwebサーバーの実行ユーザーでなければ、うまくいかないことになって、ややこしい話になる。

対策として一番よさそうなのは、phpの設定を変更して、任意の(つまり自分がアップロードしたいファイルの)所有者が、phpの実行ユーザーになるようにすることだ。つまり、webサーバーの実行ユーザーにファイルの所有者を合わせるのではなく、ファイルの所有者をphpの実行ユーザーにしてしまう。こうすると、むしろデフォルト状態よりセキュリティとしては高まると思われる。
ただし、これは共用サーバーの場合は、phpの設定はいじれないので、できない。VPSや専用サーバ、自宅サーバ、クラウドの仮想サーバ向けの対策になる。
本記事は、以下の記事を参考にさせて頂きました。
Nginx + php-fpm の時に php の実行ユーザーを固定する
AWSで試験運用しているサイトにて、php-fpm の設定ファイルを編集して、windowsクライアントで使用しているユーザーのファイルを使用できるように変更した。