トピック
このページ「ファイルパーミッションの変更」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています。
コンピュータのファイルシステムでは、ディレクトリやファイルの一つ一つにパーミッションが設定されており、その読み込み、編集、アクセスを誰に (何に) 許可するかが指定されています。これは、WordPress が特定の関数を有効化するために wp-content
ディレクトリ内のファイルに書き込むためのアクセスが必要になる場合があるので、重要です。
パーミッションモード
7 5 5 user group world r+w+x r+x r+x 4+2+1 4+0+1 4+0+1 = 755
パーミッションモードは、以下の値を所有者 (user)、グループ (group)、他のユ―ザ (other) に割り当てて算出します。 算出は、以下の図のように行えます。
- Read 4 – 読み込みを許可
- Write 2 – ファイルの書き込み / 変更の許可
- eXecute1 – 読み込み / 書き込み / 削除 / 変更 / ディレクトリ
7 4 4 user group world r+w+x r r 4+2+1 4+0+0 4+0+0 = 744
パーミッションモードの例
値 | 文字列 | 説明 |
---|---|---|
0477 | -r–rwxrwx | 所有者に read (4)、グループと他のユーザに read、write、execute (7) を許可 |
0677 | -rw-rwxrwx | 所有者に read、write (6)、グループと他のユーザに read、write、execute (7) を許可 |
0444 | -r–r–r– | 所有者、グループ、他のユーザに read (4) を許可 |
0666 | -rw-rw-rw- | 所有者、グループ、他のユーザに read、write (6) を許可 |
0400 | -r——– | 所有者に read (4) を許可、グループと他のユーザは権限なし (0) |
0600 | -rw——- | 所有者に read、write (6) を許可、グループと他のユーザは権限なし (0) |
0470 | -r–rwx— | 所有者に read (4)、グループに read、write、execute (7) を許可、他のユーザは権限なし (0) |
0407 | -r—–rwx | 所有者に read (4) を許可、グループは権限なし (0)、他のユーザに read、write、execute (7) を許可 |
0670 | -rw-rwx— | 所有者に read、write (6)、グループに read、write、execute (7)を許可、他のユーザは権限なし (0) |
0607 | -rw—-rwx | 所有者に read、write (6) を許可、グループは権限なし (0)、他のユーザに read、write、execute (7) を許可 |
WordPress のパーミッションスキーム
パーミッションはホストごとに異なるため、このガイドでは一般的な原則のみを詳しく説明します。 すべてのケースをカバーできるわけではありません。 このガイドは、標準な設定で稼働しているサーバーに適用されます(「suexec」メソッドを使用した共有ホスティングについては、以下を参照してください)。
一般的に、すべてのファイルの所有権はWebサーバー上のユーザー(ftp)アカウントに設定され、またそのアカウントから書き込み可能である必要があります。 共有ホストでは、ファイルの所有権をWebサーバープロセス自体にすべきではありません(所有権がwww、apache、nobodyユーザーなどにはならないということです)。
WordPressからの書き込みアクセスが必要なファイルは、WordPressが使用するユーザーアカウント(サーバーアカウントとは異なる場合があります)が所有またはグループ所有する必要があります。 たとえば、サーバーとファイルをFTPでやり取りできるユーザーアカウントを持っている場合でも、サーバー自体はdhapacheやnobodyなどの別のユーザーグループ内の別のユーザーを使用して実行できます。 WordPressがFTPアカウントとして実行されている場合、そのアカウントには書き込みアクセス権が必要です。つまり、ファイルの所有者であるか、書き込みアクセス権のあるグループに属している必要があります。 後者の場合、アクセス許可はデフォルトよりも寛容に設定されます(たとえば、フォルダーの場合は755ではなく775、644の代わりに664)。
WordPress でのパーミッションは、基本的にほぼすべてのユーザで共通の設定になりますが、使用するサーバ、ユーザの行うインストールのタイプ、およびインストール時のシステム全体の umask 値などにより異なる場合があります。
注記: 経験豊富なユーザーが WordPress をインストールしてくれた場合、ファイルのパーミッションを変更する必要はないでしょう。パーミッションエラーの問題が発生しない限り、あるいはそうしたい場合を除き、おそらくこれをいじる必要はありません。
注記: WordPress を自分でインストールした場合、ファイルのパーミッションを変更する必要がある場合があります。いくつかのファイルやディレクトリは、より厳しいパーミッションで「強化」されるべきです。特に、wp-config.php ファイルはそうです。このファイルは初期状態では644のパーミッションで作成されており、このままにしておくのは危険です。Security and Hardening を参照してください。
一般的に、WordPress のすべてのコアファイルは、あなたのユーザーアカウント (または異なる場合は httpd アカウント) だけが書き込み可能であるべきです。(時には、インストールを管理するために複数の ftp アカウントが使用され、すべての ftp ユーザーが知られていて信頼できる場合、すなわち、共有ホストではない場合、group writable を割り当てることが適切かもしれません。詳しくはサーバー管理者に聞いてください)。ただし、mod_rewrite Permalinks やその他の .htaccess 機能を利用する場合は、WordPress が /.htaccess ファイルにも書き込めることを確認する必要があります。
組み込みのテーマ エディターを使用する場合は、すべてのファイルをグループで書き込み可能にする必要があります。 ファイルパーミッションを変更する前に、この機能を使用してみてください。動作するはずです。 (これは、異なるユーザーが WordPress パッケージとプラグインまたはテーマをアップロードした場合に当てはまります。これは、管理者によってインストールされたプラグインとテーマの問題ではありません。異なる ftp ユーザーグループでファイルをアップロードする場合、書き込み可能なグループが必要です。共有ホスティングでは、 グループが信頼できるユーザー専用であることを確認してください… apache ユーザーはグループに含まれるべきではなく、ファイルを所有するべきではありません。)
一部のプラグインでは /wp-content/ フォルダーを書き込み可能にする必要がありますが、そのような場合はインストール中に通知されます。 場合によっては、755 のアクセス許可を割り当てる必要があります。/wp-content/cache/
およびおそらく /wp-content/uploads/
( MultiSite /wp-content/blogs.dir/
についてもこれを行う必要がある場合があります)
/wp-content/ の下の追加のディレクトリは、それらを必要とするプラグイン / テーマごとに文書化する必要があります。 パーミッションは異なります。
/ |- index.php |- wp-admin | `- wp-admin.css |- wp-blog-header.php |- wp-comments-post.php |- wp-commentsrss2.php |- wp-config.php |- wp-content | |- cache | |- plugins | |- themes | `- uploads |- wp-cron.php |- wp-includes `- xmlrpc.php
suexec で共有ホスティング
上記は、PHP バイナリの実行に「suexec」アプローチを使用する共有ホスティング システムには適用されない場合があります。 これは、多くの ウェブホストで使用される一般的なアプローチです。 これらのシステムでは、php プロセスが php ファイル自体の所有者として実行されるため、共有ホスティングの特定のケースに対して、よりシンプルな構成とより安全な環境が可能になります。
注: suexec メソッドは、単一サイト サーバー構成では絶対に使用しないでください。共有ホスティングの特定のケースでのみ、より安全です。
このような suexec 構成では、正しいパーミッションスキームは簡単に理解できます。
- すべてのファイルは、httpd プロセスに使用されるユーザー アカウントではなく、実際のユーザーのアカウントによって所有されている必要があります。
- ウェブサーバープロセスの権限チェックに特定のグループ要件がある場合を除き、グループ所有権は関係ありません。通常、このようなケースはありません。
- すべてのディレクトリは 755 または 750 である必要があります。
- すべてのファイルは644または640であるべきです。例外: wp-config.php は、サーバー上の他のユーザーが読むのを防ぐために、440または400にする必要があります。
- アップロードディレクトリも含めて、どのディレクトリにも777を与えてはいけません。php プロセスはファイルの所有者として実行されているため、所有者権限を取得し、755のディレクトリにも書き込むことができます。
この特定のタイプのセットアップでは、WordPress は適切な所有権を持つファイルを直接作成できることを検出するため、プラグインのアップグレードまたはインストール時に FTP 資格情報を要求しません。
このセットアップのためにシステム管理者が使用する一般的な方法は次のとおりです。
- suPHP, php-cgiを通して実行される、2013年から現在未整備。
- mod_ruid2, apache モジュール、シンプルだが効果的。
- mpm-itk, apache モジュール。
- mod_fcgid, Apache モジュールで、より広範な設定を持つ FastCGI サーバー。
- PHP-FPM, Apache と Nginx で使用する、共有 OPCode を持つ代替 FastCGI サーバー。
FTP クライアントの使用
FTP programs (“クライアント”) を使用すると、リモート ホスト上のファイルとディレクトリのアクセス許可を設定できます。この機能は、プログラムメニューで chmod
または パーミッションの設定
と呼ばれることがよくあります。
In WordPress install, おそらく変更したくなる2つのファイルは、インデックスページと、レイアウトを制御する css です。ここでは、index.phpを変更する方法を説明します – プロセスはどのファイルでも同じです。
下のスクリーンショットで、最後の列をご覧ください – これはパーミッションを示しています。少しわかりにくいですが、とりあえず文字の並びを確認してください。

「index.php」を右クリックし、「ファイルのパーミッション」を選択します
ポップアップ画面が表示されます。

チェックボックスは気にしないでください。「Numeric value:」を削除して、必要な数字(この場合は「666」)を入力するだけです。そして、「OK」をクリックします。

Don’t worry about the check boxes. Just delete the ‘Numeric value:’ and enter the number you need – in this case it’s 666. Then click OK.

これで、ファイルのパーミッションが変更されたことが確認できます。
隠しファイルの表示
デフォルトでは、ほとんどの FTP クライアント, (FileZilla を含む)がファイル名がピリオド (.) で始まるファイルを非表示にしています。しかし、パーミッションを変更するために隠しファイルを表示する必要があるかもしれません。例えば、パーマリンクを制御するファイルである「.htaccess」ファイルを作成する必要がある場合は、書き込み可能な状態にする必要があります。
FileZilla では、隠しファイルを表示する場合、メニューバーから [サーバ] → [強制的に隠しファイルを表示] にチェックを入れる必要があります。画面表示が更新され、常に隠しファイルが表示されるようになります。
To get FileZilla to always show hidden files – under Edit, Settings, Remote File List, check the Always show hidden files box.
In the latest version of Filezilla, the ‘Show hidden files’ option was moved to the ‘Server’ tab. Select ‘Force show hidden files.’
コマンドラインによるパーミッションの変更
shell/SSH でサーバにアクセスする権限を持っているのであれば、chmod
コマンドを使用してパーミッションを変更することができます。chmod
コマンドを使用する前に、Unix Permissions や Apple Chmod Reference などのチュートリアルを読み、このコマンドについて必ず理解しておいてください。パーミッションを間違えて設定すると、Web サイトはオフラインになります。時間をかけて正確に行ってください。
chmod
コマンドは、UNIX で使用されるコマンドで、任意のファイルのパーミッションを変更 (change mode) することを意味します。以下に 2 の例を挙げて、その手順を示します。
ここではまず、wp-content
ディレクトリ内のすべてのファイルを、すべてのグループとユーザに対して書き込み可能にしてみましょう。コマンドに -R
オプションを追加することで、wp-content
内のすべてのディレクトリおよびファイルに変更を適用するよう指定します。設定するパーミッションは 766 です。この場合 WordPress およびすべてのグループとユーザがディレクトリに読み込み、書き込みを行えるようになります。コマンドの最後に記述されるのは、変更対象となるディレクトリ名 wp-content
です。766 でうまくいかない場合は、777 を設定してみてください。その場合、すべてのユーザ、グループ、プロセスが、すべてのディレクトリとファイルに読み込み、書き込み、実行を行えるようになります。
以下の 2 つのステップで wp-content
ディレクトリ内のすべてのファイルを、すべてのグループとユーザに対して書き込み可能にできます :
1. コマンドラインで次の行を入力して WordPress のメインディレクトリに移動
cd wordpress/
2. コマンドラインで次の行を入力して該当ディレクトリ内のすべてのファイルのパーミッションを変更
chmod -R 777 wp-content
この手順を使って、今度は .htaccess
ファイルを、すべてのグループとユーザに対して書き込み可能にしてみましょう。 mod_rewrite
によるパーマリンクを使用する場合、WordPress が .htaccess
ファイルを更新できるようにパーミッションを以下のように設定する必要があります :
1. コマンドラインで次の行を入力して WordPress のメインディレクトリに移動します。
cd wordpress/
2. コマンドラインで次の行を入力して、該当ファイルのパーミッションを変更します。
chmod 666 .htaccess
wp-content
ディレクトリ内などですべてのファイルを書き込み可能にする前に、最初はディレクトリのみを書き込み可能にするなど、より安全な方法を試してみてください。下記のコマンドを利用できます。
chmod 746 -v DIR
chmod 747 -v DIR
chmod 756 -v DIR
chmod 757 -v DIR
chmod 764 -v DIR
chmod 765 -v DIR
chmod 766 -v DIR
chmod 767 -v DIR
うまくいかない場合は、recursive
オプションを追加して、ディレクトリとその配下のパーミッションを再帰的に変更してみてください。上記コマンドの -v
を –R
に置き換えて実行します。 また、recursive
オプションでは、ユーザが作成したディレクトリやファイルに対しても変更を行えます。 DIR
を任意のファイル名に置き換えてください。ファイルを指定してパーミッションを変更できます。
これらの設定を行っても書き込みできない場合には、777 を試してください。
- 注記 :セキュリティの観点から、パーミッションを 777 (すべてのユーザが書き込み可能)に設定することは避け、最低限でも良いのでアクセス制限をかけてください。まずは744 などの限定的なパーミッション設定から始め、動作が確認できるまで順番に変更していきましょう。必要な際にのみ 777 を使い、できることならば短時間の使用にとどめてください。
777の危険性
このパーミッションの問題の核心は、サーバーがどのように設定されているかにあります。FTP や SSH でサーバーにアクセスするときに使うユーザー名は、サーバーアプリケーション自体がページを提供するときに使うユーザー名ではないことがほとんどです。
7 7 7 user group world r+w+x r+w+x r+w+x 4+2+1 4+2+1 4+2+1 = 777
多くの場合、Apacheサーバーは www-data, dhapache あるいは nobody のユーザーアカウントによって「所有」されています。これらのアカウントは、サーバー上のファイルへのアクセスが制限されていますが、これには十分な理由があります。ユーザーアカウントが所有する個人的なファイルやフォルダをWorld-Writableに設定することで、文字通り World Writable にすることができるのです。これで、www-data、dhapache、nobody の各ユーザーは、サーバーの運営、ページの提供、php インタプリタの実行など、ユーザーアカウントのファイルへのフルアクセスを持つことになります。
これは、サーバー上の基本的にどのプロセスでも乗っ取ることによって、誰かがあなたのファイルにアクセスできるようにする手段を提供するものであり、これにはマシン上の他のユーザーも含まれます。ですから、自分のマシンのパーミッションを変更する際には、慎重に考える必要があります。私はこれまで767以上のパーミッションが必要なものに出会ったことはありません。
最悪の結果
フォルダまたはファイルに777の許可を使用することで起こりうる最悪の事態は、悪意のあるクラッカーやエンティティが悪質なファイルをアップロードしたり、現在のファイルを改変してコードを実行できる場合、彼らがあなたのブログを完全に制御でき、データベース情報やパスワードを含むあらゆる情報にアクセスできることです。
回避策
WordPress プラグインを使うことで、比較的簡単にセキュリティの強化を行い、リスクを回避することできます。プラグイン製作者、またはサーバのサポートサービスにコンタクトを取り、回避策を講じてください。
適切なファイル・パーミッション設定
.htaccess
ファイルは、サーバプロセスの所有者がアクセスするファイルのひとつです。パーミッションを制限しすぎた場合、サーバがファイルにアクセスできなくなり、エラーの原因となります。しかし適切なパーミッション設定を得るときには、まず限定的な設定から始め、動作が確認できるレベルまで開放していく手順を踏みます。
パーミッション設定例
パーミッションの設定例を説明します。cgi-bin
ディレクトリ内に PHP スクリプトの実行のための php.cgi
と php.ini
ファイル、そしてアクセス制御のための .htaccess
が設置されている場合、パーミッションは以下のようになります。
- デフォルト設定 (umask 022)
644 -rw-r--r-- /home/user/wp-config.php 644 -rw-r--r-- /home/user/cgi-bin/.htaccess 644 -rw-r--r-- /home/user/cgi-bin/php.ini 755 -rwxr-xr-x /home/user/cgi-bin/php.cgi 755 -rwxr-xr-x /home/user/cgi-bin/php5.cgi
- 適切な設定
600 -rw------- /home/user/wp-config.php 604 -rw----r-- /home/user/cgi-bin/.htaccess 600 -rw------- /home/user/cgi-bin/php.ini 711 -rwx--x--x /home/user/cgi-bin/php.cgi 100 ---x------ /home/user/cgi-bin/php5.cgi
.htaccess のパーミッション設定
644 > 604 グループから .htaccess
の読み込み権限を取り除きます。通常は 644 が推奨設定です。
php.ini のパーミッション設定
644 > 600 パーミッション 644 では、すべてのグループとユーザに php.ini
に対する読み込み権限が与えられおり、Web サイトから容易にアクセスされる可能性があります。設定変更に際して留意する点は、php.ini
にアクセスするファイルは php.cgi
のみであるため、最低限 php.cgi
のプロセスに権限が与えられていれば動作に問題はないということです。パーミッション 600 では、php.cgi
がファイル所有者の権限で動作しながら、グループや他のユーザからのアクセスを制限することができます。
php.cgi のパーミッション設定
755 > 711 ここでは、プロバイダから標準で提供される vanilla PHP や mod_php の代わりに、カスタムコンパイルされた php.cgi
バイナリを使用しています。通常は 755 が設定されています。
php5.cgi のパーミッション設定
755 > 100 php5.cgi
を実行するプロセスはファイル所有者の権限で動作するため、グループや他のユーザに対してアクセス権限を与える必要はなく、ファイル所有者の実行権限を残してすべて削除しても問題ありません。ファイル所有者からも、ファイルの読み込み、書き込み権限が取り除かれますが、PHP スクリプトを実行するための権限は維持されます。また、パーミッション設定を元に戻すことも、ファイル所有者の権限でいつでも可能です。
/* 755 > 100 – Because of the setup where the user account is the owner of the process running the php cgi, no other user or group needs access, so we disable all access except execution access. This is interesting because it really works. You can try reading the file, writing to the file, etc.. but the only access you have to this file is to run php scripts. And as the owner of the file you can always change the permission modes back again.
*/ $ cat: php5.cgi: Permission denied ./php5.cgi: Welcome
関連ページ
- サポートフォーラムスレッド
- htaccess for subdirectories /en
- [wp-config.php_の編集#デフォルトファイルパーミッションの上書き WordPress フォルトファイルパーミッションの上書き]
この記事は役に立ちましたか ? どうすればさらに改善できますか ?
フィードバックを送信するにはログインする必要があります。