WordPress yêu cầu thông tin đăng nhập FTP của tôi để cài đặt plugin


117

Tôi đã cài đặt một blog WordPress trong hệ thống cục bộ của mình. Nhưng khi tôi cố gắng thêm plugin từ quản trị viên, nó yêu cầu quyền truy cập FTP. Tôi cần cấu hình những gì cho WordPress để có thể tải lên mà không cần FTP?

Câu trả lời:


301

Cố gắng thêm mã vào wp-config.php:

define('FS_METHOD', 'direct');

29
Tôi tiếp tục tình cờ gặp câu trả lời này trong khi truy cập Google, vì vậy tôi đăng một ghi chú ở đây cho bản thân và những người khác: Mã có trong wp-admin / include / file.php: get_filesystem_method. Wordpress cố gắng tạo tệp 'wp-content / temp-write-test -'. Time (). Nếu điều này không thành công, nó giả định rằng bạn chỉ có thể sử dụng FTP. Nhưng điều này có thể không đúng, nếu bản thân wp-content không thể ghi được, nhưng ví dụ: wp-content / plugins thì có. Sau đó, buộc FS_METHOD hoạt động.
Sebastian Schmid

3
nó hoạt động nhưng vấn đề bây giờ là sau khi giải nén gói, lỗi cho biết: "Không thể tạo thư mục."
Andrew

3
Điều này đã giúp tôi, nhưng chỉ vì nó tiết lộ thêm thông tin về sự thất bại. Vấn đề cốt lõi là có quyền ghi cho tài khoản người dùng đang thực hiện cập nhật. Đối với mọi loại hệ thống, điều này có thể khác nhau. (lưu ý rằng một số câu trả lời bên dưới yêu cầu bạn đặt quyền ghi cho daemon, hoặc httpd, hoặc apache ...) Điều này đã giúp tôi xem đoạn mã PHP từ một bình luận bên dưới (<? php echo (execute ("whoami")); ?>) để tôi có thể biết người dùng nào đang chạy bản cập nhật. Thực hiện thay đổi được đề xuất ở đây dường như chỉ đơn giản là loại bỏ thử thách thông tin xác thực FTP để tôi có thể thấy thông báo lỗi.
agentv

Tôi đang sử dụng nginx chứ không phải Apache. Đó là khá rõ ràng rằng PHP-FPM không sử dụng sự kết hợp đúng người dùng / nhóm (sử dụng lừa được mô tả bởi @Aboozar Rajabi); tuy nhiên, vì một số lý do, kiểm tra WP không thành công (mặc dù không có lỗi trên các bản ghi). Sử dụng cài đặt này cho phép tôi nâng cấp lên 4.7 một cách hoàn hảo!
Gwyneth Llewelyn

1
Tôi đã từng làm devops trong các lĩnh vực khác trước khi có WordPress, dự đoán tốt nhất của tôi FS_METHODlà viết tắt FILESYSTEM_METHOD. Khi bạn xác định chỉ directsửa đổi các tệp - hay còn gọi là không sử dụng FTP, thì bạn đang buộc WordPress thử và thay đổi trực tiếp các tệp trên trang web.
Dylan Pierce

39

Nếu bạn đang sử dụng Ubuntu.

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER

7
-1 ý tưởng tồi để làm điều này, chỉ nên sở hữu nội dung wp bằng cách www-dataxem tại đây: codex.wordpress.org/Hardening_WordPress hoặc tại đây: stackoverflow.com/questions/18352682/…
timhc22

Câu trả lời này cũng sửa lỗi "Cài đặt không thành công: Không thể định vị thư mục nội dung WordPress (wp-content)." khi cố gắng cài đặt một plugin từ Trang tổng quan.
WindChimes

25

"Bất cứ khi nào bạn sử dụng bảng điều khiển WordPress để tự động cài đặt, nâng cấp hoặc xóa các plugin, WordPress phải thực hiện các thay đổi đối với tệp trên hệ thống tệp.

Trước khi thực hiện bất kỳ thay đổi nào, trước tiên WordPress sẽ kiểm tra xem liệu nó có quyền truy cập để thao tác trực tiếp hệ thống tệp hay không.

Nếu WordPress không có quyền cần thiết để sửa đổi hệ thống tệp trực tiếp, bạn sẽ được yêu cầu cung cấp thông tin xác thực FTP để WordPress có thể cố gắng thực hiện những gì nó cần thông qua FTP. "

Giải pháp: Để tìm ra người dùng phiên bản apache của bạn đang chạy, hãy tạo một tập lệnh thử nghiệm với nội dung sau:

<?php echo(exec("whoami")); ?>

Đối với tôi, đó là daemon chứ không phải www-data. Sau đó, sửa quyền bằng cách:

sudo chown -R daemon /path/to/your/local/www/folder

3
Đừng quên vô hiệu hóa hàm execute () hoặc các hàm nhạy cảm tương tự. trong sản xuất.
Arda

2
Vẫn còn tốt hơn là để sử dụng <?php echo(exec("id")); ?>mà thậm chí sẽ cung cấp cho bạn dữ liệu nhóm ngoài user id:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn

Nếu bạn có thể sudo và chown, bạn có thể gõ whoamiđể xem thông tin tương tự:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji

11

Trên OSX, tôi đã sử dụng những thứ sau và nó hoạt động:

sudo chown -R _www:_www {path to wordpress folder}

_www là người dùng mà PHP chạy trên Mac.

(Bạn cũng có thể cần chmod một số thư mục. Tôi đã làm điều đó đầu tiên và nó không sửa được. Phải đến khi tôi thực hiện lệnh chown thì nó mới hoạt động, vì vậy tôi không chắc đó có phải là lệnh chown không một mình hoặc kết hợp chmod và chown.)


9

Tôi đã thay đổi quyền sở hữu của thư mục wordpress thành www-data một cách đệ quy và khởi động lại apache.

sudo chown -R www-data:www-data <folderpath>

Nó làm việc như một say mê!


Đây là câu trả lời chính xác cho hầu hết mọi người có lẽ. Tôi nghĩ đây là lần thứ ba tôi tạo một thư mục và quên cắt.
MrMysterious2502

7

Từ lần truy cập đầu tiên trên Google :

WordPress yêu cầu thông tin đăng nhập FTP của bạn khi nó không thể truy cập trực tiếp vào các tệp. Điều này thường do PHP chạy với tư cách người dùng apache (mod_php hoặc CGI) chứ không phải là người dùng sở hữu các tệp WordPress của bạn.

Điều này khá bình thường trong hầu hết các môi trường lưu trữ được chia sẻ - các tệp được lưu trữ với tư cách người dùng và Apache chạy với tư cách người dùng apachehoặc httpd. Đây thực sự là một biện pháp phòng ngừa bảo mật tốt vì vậy việc khai thác và tấn công không thể sửa đổi các tệp được lưu trữ. Bạn có thể phá vỡ điều này bằng cách đặt tất cả các tệp WP thành bảo mật 777, nhưng điều đó có nghĩa là không có bảo mật, vì vậy tôi thực sự khuyên bạn không nên làm như vậy. Chỉ cần sử dụng FTP, đó là cách giải quyết được khuyến nghị tự động với lý do chính đáng.


Cảm ơn vì lời giải thích. Có cách nào để định cấu hình máy chủ chia sẻ để chạy PHP với tư cách là người dùng chính xác hoặc sửa lỗi chủ sở hữu hoặc giải pháp khác không?
Maxwell sc

4

Đầu tiên hãy chuyển đến thư mục cài đặt của bạn (ví dụ)

cd /Applications/XAMPP/xamppfiles/

Bây giờ chúng tôi sẽ sửa đổi thư mục htdocs của bạn:

sudo chown -R daemon htdocs

Nhập mật khẩu gốc của bạn khi được nhắc, sau đó kết thúc bằng lệnh gọi chmod:

sudo chmod -R g+w htdocs

4

Tôi đã thực hiện cài đặt cục bộ WordPress trên Ubuntu 14.04 theo các bước được nêu ở đây và chỉ cần chạy:

sudo chown -R www-data:www-data {path_to_your_project_directory}

đã giải quyết vấn đề của tôi với việc tải xuống các plugin. Lý do duy nhất khiến tôi rời bài đăng này ở đây là vì khi tôi truy cập vấn đề của mình, đây là một trong những kết quả đầu tiên và nó dẫn tôi đến giải pháp cho vấn đề của mình.

Hy vọng điều này sẽ giúp ích cho bất cứ ai!


3

Chúng tôi đã có cùng một vấn đề như một phần của một vấn đề lớn hơn. Giải pháp đề xuất của

define('FS_METHOD', 'direct');

ẩn cửa sổ đó nhưng sau đó chúng tôi vẫn gặp sự cố khi tải chủ đề và nâng cấp, v.v. Nó liên quan đến quyền tuy nhiên trong trường hợp của chúng tôi, chúng tôi đã khắc phục sự cố bằng cách chuyển từ nhà cung cấp hệ điều hành php mod_php sang ứng dụng FastCGI của nhà cung cấp hệ điều hành php an toàn hơn .


3

Nếu trong quá trình cài đặt plugin, Wordpress hỏi tên máy chủ hoặc chi tiết FTP của bạn. Sau đó làm theo các bước sau:

Đăng nhập vào máy chủ của bạn và điều hướng đến / var / www / html / wordpress / . Mở wp-config.php và thêm dòng này sau khi xác định ('DB_COLLATE')

define('FS_METHOD', 'direct');

Nếu bạn gặp lỗi "Không thể tạo thư mục". Cấp quyền ghi vào thư mục wordpress của bạn trong đệ quy dưới dạng

chmod -R go+w wordpress

GHI CHÚ. Để bảo mật, hãy thu hồi các quyền này sau khi bạn cài đặt một plugin dưới dạng

chmod -R go-w wordpress

2

Cách dễ nhất để giải quyết vấn đề này là thêm thông tin FTP sau vào wp-config.php

define('FS_METHOD', 'direct');
define('FTP_BASE', '/usr/home/username/public_html/my-site.example.com/wordpress/');
define('FTP_CONTENT_DIR', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/');
define('FTP_PLUGIN_DIR ', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/plugins/');

FTP_BASE là đường dẫn đầy đủ đến thư mục "cơ sở" (ABSPATH) của cài đặt WordPress FTP_CONTENT_DIR là đường dẫn đầy đủ đến thư mục wp-content của cài đặt WordPress. FTP_PLUGIN_DIR là đường dẫn đầy đủ đến thư mục plugin của cài đặt WordPress.


FTP không an toàn và do đó chúng tôi vô hiệu hóa nó, vì vậy nó không phải là một giải pháp. Chúng tôi sử dụng SFTP để thay thế.
Laurence Cope

1

Như đã đề cập bởi Niels, điều này xảy ra do người dùng quy trình máy chủ không thể ghi vào thư mục Wordpress.

Nhưng đây là điều mà nhiều bài báo không giải thích. Đó là chủ sở hữu của quy trình php, không phải quy trình nginx. Nếu bạn cố gắng thay đổi chủ sở hữu nginx, nó sẽ không giải quyết được điều này.

Để giải quyết nó, hãy thử chạy ps auxđể xem người dùng nào sở hữu quy trình php-fpm. Sau đó, kiểm tra xem người dùng đó có phải là người dùng giống như chủ sở hữu của thư mục wordpress hay ít nhất có thể ghi vào đó. Nếu người dùng không thể ghi vào nó, bạn sẽ cần thay đổi quyền và / hoặc quyền sở hữu thư mục; hoặc đặt hai người dùng (chủ sở hữu máy chủ và chủ sở hữu thư mục wordpress) vào một nhóm chung có thể ghi vào thư mục; hoặc thay đổi thuộc tính "người dùng" php.ini thành người dùng có thể ghi vào thư mục.


1

Có rất nhiều câu trả lời tương tự cho câu hỏi này, nhưng không câu trả lời nào trong số đó hoàn toàn giải đáp được nguyên nhân gốc rễ. Nhận xét của Sebastian Schmid về bài viết gốc chạm vào nó nhưng không đầy đủ. Đây là hoạt động của tôi kể từ ngày 11 tháng 11 năm 2018:

Nguyên nhân gốc rễ

Khi bạn cố gắng tải lên một plugin thông qua giao diện quản trị WordPress, WordPress sẽ thực hiện cuộc gọi đến một hàm có tên là "get_filesystem_method ()" (ref: /wp-admin/includes/file.php:1549 ). Quy trình này sẽ cố gắng ghi một tệp vào vị trí được đề cập (trong trường hợp này là thư mục plugin). Tất nhiên, nó có thể thất bại ngay lập tức nếu quyền đối với tệp không được thiết lập phù hợp để cho phép người dùng WordPress (nghĩ rằng danh tính người dùng thực thi php) ghi tệp vào vị trí được đề cập.

Nếu tệp có thể được tạo, hàm này sau đó sẽ phát hiện chủ sở hữu tệp của tệp tạm thời, cùng với chủ sở hữu tệp của tệp hiện tại của hàm (ref: /wp-admin/includes/file.php:1572 ) và so sánh hai. Nếu chúng khớp thì theo cách nói của WordPress, "WordPress đang tạo tệp với cùng một chủ sở hữu với tệp WordPress, điều này có nghĩa là có thể sửa đổi và tạo tệp mới thông qua PHP" và plugin của bạn được tải lên thành công mà không có lời nhắc FTP Credentials. Nếu chúng không khớp, bạn sẽ nhận được lời nhắc FTP Credentials.

Sửa lỗi

  1. Đảm bảo thư mục plugin có thể ghi được bởi danh tính đang chạy quy trình php của bạn.
  2. Đảm bảo danh tính đang chạy quy trình php của bạn là chủ sở hữu tệp cho một trong hai:

    a) Tất cả các tệp ứng dụng WordPress, hoặc ...
    b) Ít nhất là tệp /wp-admin/includes/file.php

Nhận xét cuối cùng

Tôi không quá quan tâm đến việc áp dụng cụ thể quyền sở hữu tệp cho file.php để giải quyết vấn đề này (ít nhất là cảm thấy hơi khó hiểu!). Đối với tôi tại thời điểm này, có vẻ như cơ sở mã WordPress đang nghiêng về việc chúng tôi thực thi quy trình PHP dưới cùng một người dùng chính như chủ sở hữu tệp cho các tệp ứng dụng WordPress. Tôi rất hoan nghênh một số ý kiến ​​từ cộng đồng về điều này.


1

Tôi đã phải đối mặt với cùng một vấn đề! Tôi đã thêm đoạn mã bên dưới vào tệp wp-config.php (ở bất kỳ dòng nào) và nó đang hoạt động!

define('FS_METHOD', 'direct');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.