私はフォローしています ファイルアクセス権の変更"WordPress Codexplugin
やtheme
からwp-admin
を更新またはインストールしようとすると、次のようになります。
要求されたアクションを実行するために、WordPressはあなたのウェブサーバーにアクセスする必要があります。続行するには、FTP認証情報を入力してください。認証情報を覚えていない場合は、Webホストに連絡してください。
ファイルシステムレベルから:
# ls -ld wp-content/ wp-content/plugins/ wp-content/themes/
drwxrwxr-x. 6 root Apache 4096 Jun 2 12:01 wp-content/
drwxrwxr-x. 28 root Apache 4096 Jun 2 00:00 wp-content/plugins/
drwxrwxr-x. 11 root Apache 4096 May 11 16:34 wp-content/themes/
#
httpd
はApache
として実行されます。
$ ps auxw | grep httpd
root 20158 0.0 0.1 533080 26192 ? Ss 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20233 0.0 0.2 612608 34908 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20234 0.0 0.2 538772 46904 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20235 0.0 0.1 536832 24268 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20236 0.0 0.2 626272 35640 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20237 0.0 0.0 535296 9592 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20322 0.0 0.1 537088 26620 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20380 0.0 0.2 626060 33816 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20429 0.0 0.1 538216 29184 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20447 0.0 0.2 629380 43180 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20448 0.0 0.2 626172 35224 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
alexus 24073 0.0 0.0 112652 972 pts/9 R+ 15:13 0:00 grep --color=auto httpd
$
/wp-admin
without FTP資格情報を使って、要求されたアクション(install
やupdate
)を実行できるようにしたいです。
どうやってやるの?
以下をwp-config.phpに追加してください。
define( 'FS_METHOD', 'direct' );
それがあなたにとってどのように機能するのか教えてください。
これはWordPressがそれがインストールされたフォルダに変更を加えるための限られた許可を持っていることを意味します。
これを修正するために、あなたがする必要があるのは同じのために必要な許可を与えることだけです。
SSH経由でサーバーに接続した後、ターミナル/ PuTTY /コマンドラインプロンプトで次のコマンドを実行します。
Sudo chown -R Apache:apache /var/www/html
チェックアウト この記事 詳細については/。
所有権がroot:Apache
であり、権限が775であり、httpdがApache
として実行することは完全に正しいことですが、Wordpressはこれを好みません。 wp-admin/includes/file.php
に従って、所有者をApache
にしたい:
// Attempt to determine the file owner of the WordPress files, and that of newly created files
$wp_file_owner = $temp_file_owner = false;
if ( function_exists('fileowner') ) {
$wp_file_owner = @fileowner( __FILE__ );
$temp_file_owner = @fileowner( $temp_file_name );
}
あなたのものになります:
wp_file_owner = root
temp_file_owner = Apache
if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
// WordPress is creating files as the same owner as the WordPress files,
// this means it's safe to modify & create new files via PHP.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
} elseif ( $allow_relaxed_file_ownership ) {
// The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files
// safely in this directory. This mode doesn't create new files, only alter existing ones.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
}
$ wp_file_ownerが$ temp_file_ownerと同じ場合は、続行してください。コメントは、削除/作成を許可せず、更新のみを許可するelseifに引っかかることになります(Wordpress内からプラグインのコードを更新することでこれを確認し、機能しました)。
注:コード全体を詳しく調べたわけではないことに注意してください。これは単に私の簡単な解釈です。同じ問題が発生し、httpdユーザーがファイル所有者でもあるようにuser:groupを切り替えると、FTP資格情報の入力を求めなくなりました。
直接的な答えではありませんが、おそらく言わなければならないでしょう - これはあなたがローカル開発について話しているのでなければ解決しないべき1つの問題です。
その理由は、Webサーバがあなたのコードを上書きすることができれば、その上で実行されている悪意のあるコードもそれを実行できるようになるからです。このリスクは、ftp認証情報を入力しなくても数秒節約できるという利便性よりもはるかに大きいものです。
私の場合は、GITからFTPモードに戻すことでこれを解決しました。
これ以上警告はありません。
おそらくそれは他の誰かにも役立つでしょう。
問題はもうそれほど新しいものではありませんが、私はこの問題についても2セント追加したいと思います。
多くのpplが彼らのVPSサーバ上にCentos(7)を持っていて、以下のコード行が彼らの問題を解決することができました。
Imhoは、WordPressが望んだように仕事をするのを差し控えるSELinuxとすべて関係があります。 SELinux が何であるか、そしてそれが何をするのかを説明するのは遠くなります。参考までに、はじめに
Security-Enhanced Linux(SELinux)は、カーネルに実装されている必須のアクセス制御(MAC)セキュリティメカニズムです。
フォローするのはたった3ステップ:
chcon -R -t httpd_sys_content_t /var/www/html/wordpress
chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress
サーバーから再起動する必要も、デーモンから再起動する必要もありません。
私はそれがすべての人を助けるとは言いませんが、SELinuxを無効にしなかった人たちにとっては安心です。
乾杯
注:自分のニーズに合わせて調整してください(WordPressへのパスを意味します)
edit:wp-config.php
で使用されていた行はdefine("FS_METHOD", "direct");
を削除するようにしてください。これは、上記のコード行が必要に応じて実行される場合には絶対に不可能だからです。