WordPressのファイルのパーミッションはどうすべきなのか(WordPress the Right Way)


WEBサーバーにワードプレスを上げる際に、ファイルのパーミッションはどうすれば良いのか明確な答えが無かったのでいろいろと探してみたら、CentOS 6 LAMP permissions – the right wayに完璧ではないかと思われる答えがあったので、重要な部分を引用・翻訳し、加筆し解説したいと思います。

なお今回の記事ではVPSや専用サーバーのように、root権限を持つことができSSHでログインできる環境を想定しています。またLinuxのディストリビューションはCentOS6、httpサーバーにはApacheを利用するものとします。

rootログインせず新たにユーザーを作成する

VPSを契約するメリットの一つとしてroot権限が与えられることが挙げられます。これにより自分好みにサーバーをチューニングすることが可能となります。

しかしだからと言って、rootのままで作業するのは危険が伴います。うっかりと操作ミスをしてしまい、重要なファイルを破壊してしまった…何ていう事態にもなりかねません。ですのでrootとは別途にユーザーを作成し、そのユーザーでログインするようにします。root権限が必要な作業は、その都度sudoを使いrootに昇格するようにします。

詳しくは後述しますが新規にユーザーを作成する際に、wheelグループとApacheグループに所属させます。

#useradd -G wheel,apache USER_NAME

もうすでにユーザーは作ってあるよ…という方は以下のコマンドでwheelグループとApacheグループに所属させます。

#usermod -aG wheel,apache USER_NAME

作成したユーザーにroot権限を与える

wheelグループに所属させたユーザーは全てのコマンドが実行できるようにします。まずは以下のコマンドで設定ファイルを編集できるようにします。

#visudo

以下の部分を#を外してコメントアウトします。

# %wheel        ALL=(ALL)       ALL

またパスワードを入力しなくともroot権限を実行できるようにするには、以下の文をコメントアウトします。

# %wheel        ALL=(ALL)       NOPASSWD: ALL

いったんログアウトし、新規に作成したユーザー名でサーバーにSSHログインします。以下のコマンドを試しに実行してみて、無事にrootに昇格できれば上手く行っている証拠です。

$sudo su

成功したら

#exit

で元のユーザーに戻っておいて下さい。

ファイルとディレクトリの所有者は誰にすべきなのか

The actual /srv/www directory should be owned by someone else (e.g. root). This provides a barrier so that if one of your sites is compromised, the other may remain protected.

/srv/wwwディレクトリそのものの所有者はrootなどであるべきです。これにより誰かにサイトを乗っ取られたとしても、他のファイルは依然として守られます。

Web files and directories under /srv/www will be owned by apache and be in the apache group. This is most important if you’re running WordPress because some of the key functions actually check ownership rather than just permissions and fail if apache doesn’t own them (e.g. wp-admin/plugin-install.php).

それ以下のディレクトリとファイルはapacheが所有すべきでしょう。これは特にワードプレスを動かす際に重要で、いくつかの機能はパーミッションよりもファイルのオーナーが誰であるかをチェックするからです。もしもApacheになっていなければ、プラグインのインストールなどで不具合が生じます。(管理人注:Apache以外の所有者にしていると、プラグインをダウンロードする際にFTPサーバーのパスワードを問われることが過去にありました。WordPress以外のPHPプログラムでしたらApacheにしなくても正常に動作すると思います)

ファイルとディレクトリのパーミッションはどうすべきなのか

File permissions will be 664. You’ll see lots of recommendations to use 644, but this means you’re constantly wrestling with apache everything you want to edit a file. The only draw back is that all members of the apache group will also have write access, but in almost all configurations, those users should have write permissions and the only members are apache and you!

ファイルのパーミッションは664とするのが良いでしょう。時々644とすべきとする記事を見かけますが、そうしてしまうと、ファイルを編集するときに毎回苦しむ羽目になります。apacheグループに所属しているメンバーは書き込み権限を持つべきなのです。そしてその権限を持つのはあなたとapacheだけで十分なのです。

Directory permissions will be 775. Same explanation as above except everyone also needs execute permissions so that they may change into the directory (cd).

ディレクトリのパーミッションは775とするのが良いでしょう。ユーザーがcdコマンドでディレクトリに移動できるように、execute permissionは必要なのです。

実際に所有者とパーミッションを変更する

Make apache the owner of /srv/www. The -R makes the ownership changes recursive

/srv/wwwの所有者をapacheにしましょう。-Rにより再帰的に所有者を変更できます。

sudo chown -R apache:apache /srv/www

次にApacheユーザーとApacheグループにwrite permissionを与えます。

sudo find /srv/www/ -type f -exec chmod 664 {} \;
sudo find /srv/www/ -type d -exec chmod 775 {} \;

上記のコマンドは複雑ですが、ファイルに対して664、ディレクトリに対して775のパーミッションを設定しています。

Now resecure /srv/www by giving it back to root or the user you created earlier.

それでは/srv/wwwにroot権限もしくは最初にあなたが作ったユーザーにすることで、よりセキュアにします(管理人注:今回は-Rオプションはつけていない点に注目して下さい)。

sudo chown root:root /srv/www

以上になります。ツッコミありましたらコメントください。


  1. sudo chown root:root /srv/www のところは
    sudo chown root:root /var/www になるような気がします。
    ちなみに {} \; ってのはなんなんでしょうか?よく見かけるんですが意味がわかりませんでした。

コメントを残す