web-dev-qa-db-ja.com

Wordpress 4.0をアップグレードするとFTPパスワードが要求される

私はローカルマシン上でWordpress 4.0をアップグレードすることができました、そしてまた私はプロダクションマシン上でいくつかのプラグインを更新しました、しかし私がプロダクションマシン上でWordpress 4.0を更新しようとすると、それは私のFTP資格を求めています。それが以前にそれらを必要としなかったとき、なぜそれはこれらを求めていますか?

CloudFlareはそれと関係がありますか?

私はこれを見つけました http://codex.wordpress.org/Dashboard_Updates_Screen#Trouble

私はWordpressのインストールでchown -R Apache:apache *を使おうとしましたが、それでもまだFTP資格情報を要求します。 FTPサーバーを設定したくありません。フェッチしているときになぜFTPサーバーが必要なのでしょうか。

2
Chloe

ルートWebディレクトリの所有者も変更する必要がありました。

chown Apache:apache .   # or chown Apache:apache /var/www/html

オットーによる編集:クロエ、あなたが私が合理的にコメントを入れることができるより多くの情報を求めたので、私はあなたの答えにこれを付け加えます。大丈夫だと思います。そうでない場合は、それを元に戻すか、または私に知らせてください。

これがセキュリティ上の問題であると私がコメントした理由は、ファイルの所有権と許可の制限およびアクセスの制限に関係しています。

Unixライクなシステムは "所有者"と "許可"の概念を含んでいます。ファイルはいくつかのユーザーアカウントによって所有され、それらが他のアカウントによって読み取り、書き込み、または実行可能かどうかを制御する権限を持ちます。これは本質的にセキュリティ機能であり、他のアカウントがあなたのファイルに書き込めないようにしたり、おそらく他のアカウントがそうすることを許可したりします。

実行中のプログラムには「所有者」もあります。これらのプログラムは、その所有者の許可機能を継承しています。あなたがプログラムを実行するなら、それはあなたができることは何でもすることができますが、それはあなたのユーザアカウントによって「所有される」ので、あなたがすることができないことをすることから防がれます。

それがWebサーバーになると、あなたは本質的に外の世界があなたのコンピュータ上でプログラムを実行することを許可しています。このため、所有権が重要であり、ほとんどのWebサーバーは「www」ユーザーとして、またはApache Webサーバーの一般的な場合は「Apache」ユーザーとして実行されます。

誰かがあなたのウェブサイト上で走っているプログラムを通して侵入することができるならば、彼らはそのプログラムを制御するでしょうが、それでもそのプログラムの能力によって制限されるでしょう。彼らが「Apache」によって実行されるプロセスをハックした場合、そのユーザは「Apache」になり、「Apache」ユーザアカウントとしてのアクセス権のみが与えられます。

したがって、あなたのファイルを "Apache"が所有することはセキュリティ問題です。なぜなら、あなたは本質的に世界中の誰かがこれらのファイルの所有者であると言っているからです。たまたまそのドアを通って入ってきた人は誰でもそれらを見たり編集したり修正したりすることができます。

一方、ファイルを所有していたユーザーアカウントが "user"と "Apache"で、ファイルを読み取る許可を持っていて書き込みができていない場合、Webサーバーはその仕事を完了することができます。それはファイルを読むことができ、PHPスクリプトを実行し、それがすることになっているすべてのことをします...しかしファイルを修正しません。

これがWordPressがFTP認証情報を要求する理由です。自己更新しているときは、WPファイルは "user"が所有していますが、WordPressは実際には "Apache"として実行されています。したがって、所有者を変更せずに正しく更新することはできません。 「Apache」ユーザーは、「user」が所有するファイルを書き込めません。この許可はありません。さらに言えば、WordPressは新しいファイルを作成し、古いファイルも削除する必要があります。そのため、 "Apache"として実行している場合は、新しいファイルは "Apache"が所有し、 "user"が所有する必要があります。正しい所有権でファイルを作成できないため、その時点で意図的に更新を中止します。

FTPを要求することはそれに2番目のアプローチを与えます。それはFTPを介してそれ自身のサーバーに接続し、それらの資格情報を使用して、正しいユーザーとしてファイルを書き込むことができます。切断した後、資格情報は忘れられます。あちこちに安全です。

言い換えれば、あなたがFTP情報を入力するとき、あなたはそのファイルを一度に変更できるようにするためにWordPressセキュリティ資格情報を与えています。代わりに "Apache"が所有するファイルを作成することで、WordPressに追加の認証情報なしでファイルを常に変更できるようになります。ここでセキュリティ機能を迂回しました。以前のように、WordPressはログイン情報がないとファイルを変更できませんでしたが、今は可能です。それは問題だ。

さて、多分あなたは通常FTPサービスを実行していません。たぶんあなたはSSHだけを使うでしょう。それも大丈夫です。その場合は、サーバのPHP設定にPHP SSH2拡張子を追加してください。 WordPressがFTPだけでなくそれを発見した場合は、SSH接続を使用してファイルを認証およびコピーするSFTPのオプションもあります。同じ原則が適用されます、それはセキュリティ問題を防ぐために彼らのために正しい所有権でファイルを書くことを試みています。

セキュリティは二者択一的なものではなく、層を持っています。誰かが不正アクセスを受けた場合、物事を正しく設定することは彼らが与えることができる可能な損害の量を制限するのを助けることができます。ファイルとプロセスの所有権は、UNIXタイプのシステムではかなり低いレベルのセキュリティですが、それでも重要なものです。

4
Chloe

次の手順を試してみてください。そうすれば、おそらくすべてを更新することができるでしょう。

  1. wp-config.php を開いて `を追加

define('FS_METHOD','direct');

  1. 最後のステップは、すでに行ったディレクトリの owner:group を変更することです。ちょっと注意してください。Apache2を使用している場合、このグループはApacheではなくwww-dataです。だからそれはこのようになります

Sudo chown -R <user>:www-data <WordPress-directory>

うまくいくことを願っています。

1
negletios

パスワードをまったく使用しないWordpressの設定には、さらに安全な方法があります。SFTPを使用します。

基本的に、あなたはいくつかのセットアップをする必要があるでしょう、そしてあなたはWordpressのftpユーザーとしてそしてそのホームディレクトリにログインする必要があるでしょう。

PKI鍵ペアを作成することから始めます(keygen-sshはプロセスを促します。この例ではすべてのデフォルト値を使用していると仮定しています)。

keygen-ssh

必要な場所に新しいキーを配置します。

cat ip_rsa.pub >> .ssh/authorized_keys
mv ip_rsa* .ssh/

保護を変更する(Wordpressがこれを必要とする理由は明らかではないが、それはしている):

chmod 700 .ssh/
chmod 600 .ssh/*

あなたのwp-config.phpに次の行を追加してください:

define('FTP_Host', 'localhost');
define('FTP_USER', '«your user name goes here»');
define('FTP_PUBKEY', '«full path to user's home directory»/.ssh/wp_rsa.pub');
define('FTP_PRIKEY', '«full path to user's home directory»/.ssh/wp_rsa');

Apacheがwp-content /ディレクトリにアクセスできることを確認してください。

chmod 775 «full path to WordPress directory»/wp-content

私は で私のブログへの投稿 で全体のプロセスを詳細に概説しました - /。

1

「CloudFlareはそれと関係がありますか?」

CloudFlareはftpトラフィックをプロキシしません。これは実際にはホスティングプロバイダに対処するためのものになるでしょう。

0
damoncloudflare

問題は、あなたのサーバーがWordPressで使われているものとは異なるPHPプロトコルを実行しているということです。あなたが実行しているPHPプロトコルをチェックすることができます行SERVER APIのためにphpinfo()を調べることによって。またはあなたがあなたのホスティングにcPanelを持っているなら、あなたは cPanelでsuPHPを有効にする方法 を見ることができます。

あなたは、wp-config.phpの中でFTPの詳細を使って次のように対処する:

define('FTP_USER', 'username');
define('FTP_PASS', 'password');
define('FTP_Host', 'ftp.example.org:21');

必要に応じて、FTP_SSL、FTP_BASE、FTP_CONTENT_DIR、FS_METHODも定義できます。

0
Mladen Petrovic