Aby wykonać żądaną akcję, wordpress musi uzyskać dostęp do serwera WWW. wpisz swoje ftp

28

Śledzę zmiany uprawnień do plików «WordPress Codex , ale kiedy próbuję zaktualizować i / lub zainstalować plugini / lub themeprzejść wp-admin, otrzymuję następujące informacje:

Aby wykonać żądaną akcję, WordPress musi uzyskać dostęp do twojego serwera internetowego. Wprowadź dane logowania FTP, aby kontynuować. Jeśli nie pamiętasz swoich danych logowania, skontaktuj się z usługodawcą internetowym.

z poziomu systemu plików:

# 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/
# 

httpddziała jako 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
$ 

Chciałbym móc wykonać żądane działanie ( installi / lub update) /wp-admin bez poświadczeń FTP.

Jak mogę to zrobić?

Alexus
źródło
1
Czy to instalacja localhost? Jeśli tak, zobacz: wordpress.stackexchange.com/questions/19649/...
Greg McMullen
1
@GregMcMullen nie, to NIE jest instalacja localhost i odpowiedź „zaakceptowana” z linku, który komentujesz, to rekurencyjna zmiana własności katalogu wordpress na nobody- to nie zadziała dla mnie z powodu httpduruchomienia jako apache.
alexus
@alexus Wygląda na to, że twoje pliki są obecnie własnością root.apache. Czy próbowałeś apache.apache zamiast nikogo?
Tim Malone
@TimMalone ustawienie plików / katalogu jako apache.apachelub root.apachenie zrobiłoby żadnej różnicy, o ile httpddziała jako apacheiapache „s uidjest częścią apache gid” s grupie, to wszystko jedno, bo moje uprawnienia ustawione g+w.
alexus
@alexus Ok, coś jeszcze do wypróbowania - ustaw FS_METHOD na „direct” w wp-config.php ( codex.wordpress.org/… )
Tim Malone

Odpowiedzi:

52

Dodaj następujące informacje do wp-config.php:

define( 'FS_METHOD', 'direct' );

Daj mi znać czy to ci pomogło.

Narendra Solanki
źródło
pracował dla mnie, chyba że masz złe uprawnienia w systemie plików. Przy okazji dodałem go na samym szczycie wp-config.php
Toskan
Przed użyciem tej metody przeczytaj post, do którego prowadzi Alexus. Ta metoda na pewno działa (rozwiązała problem dla mnie), ale zdecydowanie nie powinieneś używać tej metody w udostępnianym środowisku hostingowym lub w innym środowisku zagrożonym, w którym możesz narazić na szwank bezpieczeństwo.
JamesHoux
16

Oznacza to, że WordPress ma ograniczone uprawnienia do wprowadzania zmian w folderze, który został zainstalowany.

Aby to naprawić, wystarczy podać niezbędne uprawnienia.

Uruchom następujące polecenie w wierszu polecenia Terminal / Putty / Commandline po połączeniu z serwerem za pośrednictwem SSH:

sudo chown -R apache:apache /var/www/html

Sprawdź ten artykuł aby uzyskać szczegółowe informacje.

Syamraj K
źródło
uprawnienia są w porządku, przeczytaj ponownie moje pytanie)
Alex
3
chown: nieprawidłowy użytkownik: „apache: apache”
numediaweb
2
Pamiętaj, że Apache może być różnymi użytkownikami w różnych wersjach systemu Linux. Możesz więc wypróbować grupy <nazwa użytkownika> i sprawdzić, czy wystąpił błąd, czy nie, ponieważ użytkownik i grupa dla Apache są zwykle takie same. Następnie użyj poprawnego użytkownika. Najczęściej występującym w Ubuntu jest „www-data: www-data” lub „www: www” do przeglądania plików Apache.
MontyThreeCard
2

Mimo że posiadanie praw własności jak w root:apacheprzypadku uprawnień 775 jest całkowicie poprawne , a httpd do działania jako apache, Wordpress nie lubi tego. Chce być właścicielem apache, zgodnie z wp-admin/includes/file.php:

    // 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 );
  }

Twój będzie:
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';
}

Jeśli $ wp_file_owner jest taki sam jak $ temp_file_owner, kontynuuj. Twój zostanie złapany w elseif, który zgodnie z komentarzem nie pozwala na usuwanie / tworzenie, ale tylko aktualizacje (zweryfikowałem to, aktualizując kod wtyczki z Wordpress i działało).

Uwaga: Nie przeglądałem dokładnie kodu, to tylko moja szybka interpretacja. Miałem ten sam problem i po zmianie użytkownika użytkownik: grupa, dzięki czemu użytkownik httpd jest także właścicielem pliku, nie pytał już o poświadczenia FTP.

w00t
źródło
Tak, zmiana właściciela, żeby www-datadla mnie pracował. Funny WordPress!
ankush981
1

Nie jest to bezpośrednia odpowiedź, ale prawdopodobnie trzeba powiedzieć - jest to jeden problem, którego należy unikać, chyba że mówisz o rozwoju lokalnym, w którym to przypadku możesz po prostu ustawić uprawnienia na 777.

Powodem jest to, że jeśli serwer WWW może zastąpić kod, to każdy działający na nim złośliwy kod będzie mógł to zrobić. Ryzyko jest o wiele większe niż wygoda zaoszczędzenia kilku sekund bez konieczności wpisywania poświadczeń ftp.

Mark Kaplun
źródło
0

Chociaż pytanie nie jest już tak nowe, chcę dodać moje dwa centy również w tej sprawie.

Wiele ppl ma Centos (7) na swoim serwerze VPS i następujące linie kodu mogą rozwiązać ich problem.

Imho ma wszystko do czynienia z SELinux, który powstrzymuje WordPressa od wykonywania swojej pracy zgodnie z życzeniem. Wyjaśnia, czym jest SELinux i co robi. Do Twojej wiadomości wstęp zaczyna się od:

Security-Enhanced Linux (SELinux) to obowiązkowy mechanizm bezpieczeństwa kontroli dostępu (MAC) zaimplementowany w jądrze.

Tylko 3 kroki do śledzenia:

  • 1 Otwórz terminal (lub uzyskaj dostęp do serwera przez SSH)
  • 2 Dodaj następujący wiersz kodu chcon -R -t httpd_sys_content_t /var/www/html/wordpress
  • 3 Dodaj drugą linię kodu chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress

Nie trzeba restartować z serwera ani restartować z jakiegokolwiek demona.

Nie powiem, że to pomaga wszystkim, ale dla tych, którzy nie wyłączyli SELinux, powinno to być ulgą.

Twoje zdrowie

Uwaga: dostosuj się do własnych potrzeb (czyli ścieżka do WordPressa)

edit: pamiętaj, aby usunąć linię, define("FS_METHOD", "direct");gdy jest / była używana, wp-config.phpponieważ absolutnie nie da się tego zrobić, gdy powyższe linie kodu robią, co chcesz.

Charles
źródło
0

W moim przypadku rozwiązałem ten problem, przechodząc z GIT z powrotem do trybu FTP.

Nigdy więcej ostrzeżeń.

Być może pomoże to również komuś innemu.

MarkPraschan
źródło