web-dev-qa-db-ja.com

「ディレクトリを作成できませんでした」というエラーのため、新しいプラグインをインストールできません

教員は、インストラクション用のワードプレスインストールで問題があります。個々の許可の問題を解決することは当たり前のことであり、多年にわたる痛みとなっているので、ここで尋ねます。 WPをJust Workにするには何ができますか?彼らが得るエラーの種類:

プラグインのインストール:Lightbox 2 2.9.2 http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.Zip …からインストールパッケージをダウンロードしています…ディレクトリを作成できませんでした。 /home/CIM140/public_html/wordpress/wp-content/upgrade/lightbox-2.tmp

Www-data(ApacheがUbuntuのように動作する)としてsuを実行すると、そのディレクトリを問題なく作成できます。私のテストのwpインスタンスはこのプラグインをうまくインストールしているので、なぜ失敗したのでしょうか。

4
jldugger

@pwnguin、

私はWordPressでmod_phpを実行するのと同じ問題を抱えていて、ついにそれを考え出しました。

# chown www-data:www-data  /home/CIM140/public_html/wordpress/ -R

あなたがボックスを制御する限り、これはセキュリティ上の問題を引き起こすことはありません。


編集:

また、あなたのumaskを022に変更して、WordPressによって作成された新しいディレクトリが755の許可を持ち、ファイルが644の許可を持つようにする必要があるかもしれません。

他のオプションはwp-config.phpのデフォルトのファイルパーミッションを上書きすることです:

define('FS_CHMOD_DIR', (0755 & ~ umask()));
define('FS_CHMOD_FILE', (0644 & ~ umask()));

更新のためにファイルシステムメソッドを強制することもできます。

  • (主な設定) "Direct"は、PHP内からのDirect File I/Oリクエストを使うことを強制します。これは設定が適切でないホスト上でセキュリティの問題を引き起こすことで満たされます。
  • (二次的な好み) "ssh"はSSH PHP拡張の使用を強制することです。
  • (第3の設定) "ftpext"はFTPアクセスのためのFTP PHP拡張の使用を強制することであり、そして最後に
  • (第4優先) "ftpsockets"はFTPアクセスにPHP Sockets Classを利用します。

これらはwp-config.phpで以下のように定義することができます。define('FS_METHOD', 'ftpext');

Phpでprint_r(@get_defined_constants());コマンドを実行すると、現在定義されているすべての定数を取得できます。

5
Chris_O

私にとって(Ubuntuでは)、Wordpressが755の代わりに775の許可でプラグイン/画像をアップロードするためにumask 002/etc/Apache2/envvarsに追加しなければなりませんでした(すなわち、アップロードされたファイルを変更すること

0
willbradley

なぜあなたがこれらの問題を抱えているのかを理解するために、あなたは所有権の根本的な概念を理解する必要があります。

基本的に、あなたはApacheがwww-dataユーザーとして動いていることを知っています。 WordPressは自分自身のファイルを所有するユーザーとしてファイルを作成できることを検証しているため、そのユーザーが所有するものすべてを設定することが有効なのはこのためです。だから、あなたがしているのは、ファイルを所有するユーザーが所有するすべてのものを作ることです。

あなたが完全かつ完全に機械を制御している場合、これは問題ありません。一方、それが共有ホスティングサーバーであるならば、あなたはセキュリティホールを作成しました。

通常、Webサーバーは(www-dataのような)あるユーザーとして実行され、それが他のユーザー(私のユーザーアカウントの「otto」のような)によってコードを実行されます。このような状況では、Webサーバーは "otto"としてファイルを作成することができず、したがって私のアカウントとしてファイルを正しく作成することができません。したがって、 shared webserverユーザーが my ファイルを所有していると、正しく所有されているファイルを作成し、プラグインをインストールしたりファイルを更新したりできるというWordPressによるチェックは失敗します。セキュリティ上のリスクがあります。

そのような場合、WordPressは正しくFTP資格情報、またはそのために何かのために私にプロンプ​​トを出すべきです。これらは、ファイルを書き込むべきユーザーとして認証してから、それらをそのユーザーとして書き込むことによって、ユーザーアカウントの問題を回避する方法です。

さて、あなたはウェブサーバがファイルを書くのと同じアカウントによって所有されるようにすべてのWordPressファイルを変更することによってこの問題を解決しようとしています。これに対するより一般的なアプローチは、Webサーバーがファイルを書き込む方法を変更して、PHPプロセスがファイルを実行しているユーザーアカウントによって「所有」されるようにすることです。

これに対する一般的な答えは "suphp"です。このバージョンのPHPは、PHPプロセスが実行されるユーザーを、それが実行されているPHPファイルの所有者と同じユーザーに設定します。共有Webサーバーによって実行されているPHPプロセスがPHPファイルの所有者として実行され、他のユーザーが読み取れないことが保証されるため、これは共有ホスティング設定でより安全です。アカウントなど。

Ubuntuでは、これが一般的な方法だと思います。

Suphpをインストールしてください。

$ Sudo apt-get install libapache2-mod-suphp

古いmod_phpを無効にする

$ Sudo a2dismod php5 

Apacheを再起動します

$ Sudo /etc/init.d/Apache2 restart

そして、やあ。さて、あなたのWordPress PHPファイルを Normal 所有者に所有させてください。特別なトリック、変更の許可、所有権、またはそのようなことはありません。 PHPプロセスはそれらのファイルの所有者として実行されるので、その所有者としてそれらに書き込むことができます。ディレクトリは755、ファイルは644である必要があります(ファイルがグループによって書き込み可能な場合はsuphpは好きではないので、755/644が正しいアクセス権セットです)。

0
Otto