Posso instalar / atualizar plugins do WordPress sem fornecer acesso ao FTP?


565

Estou usando o WordPress no meu servidor ativo, que usa apenas SFTP usando uma chave SSH .

Quero instalar e atualizar plug-ins, mas parece que você precisa digitar seu logon FTP para instalar os plug-ins. Existe uma maneira de instalar e atualizar plugins carregando manualmente os arquivos em vez de o WordPress lidar com todo o processo?


3
Sim você pode. Simplesmente usando cPanel ou qualquer outra ferramenta de upload de arquivo que você possui; faça o upload do plug-in compactado e extraia para o wp-content/plugins/painel wp, vá para a guia plug-ins e ative-o.
WPDev

Se estiver usando um VPS, deve tentar este: stackoverflow.com/a/44137965/3160597
azerafati

@WPDev Se o seu comentário foi listado como resposta, eu o recomendaria novamente, esse foi o mais útil.
Tensigh 17/09/19

Respostas:


772

O WordPress solicitará apenas suas informações de conexão FTP ao tentar instalar plug-ins ou uma atualização do WordPress se não puder gravar /wp-contentdiretamente. Caso contrário, se o servidor da Web tiver acesso de gravação aos arquivos necessários, ele cuidará das atualizações e instalação automaticamente. Esse método não exige que você tenha acesso FTP / SFTP ou SSH, mas exige que você tenha permissões de arquivo específicas configuradas no servidor da web.

Ele tentará vários métodos em ordem e retornará ao FTP se os métodos Direct e SSH não estiverem disponíveis.

https://github.com/WordPress/WordPress/blob/4.2.2/wp-admin/includes/file.php#L912

O WordPress tentará escrever um arquivo temporário no seu /wp-content diretório. Se isso der certo, ele compara a propriedade do arquivo com o seu próprio uid e, se houver uma correspondência, permitirá que você use o método 'direto' de instalar plug-ins, temas ou atualizações.

Agora, se por algum motivo você não quiser confiar na verificação automática de qual método de sistema de arquivos usar, você pode definir uma constante, 'FS_METHOD'em seu wp-config.phparquivo, que é ou 'direct', 'ssh', 'ftpext' or 'ftpsockets'não, e ele usará esse método. Lembre-se de que, se você definir isso como 'direto', mas seu usuário da web (o nome de usuário sob o qual o servidor da web é executado) não possui permissões de gravação adequadas, você receberá um erro.

Em resumo, se você não deseja (ou não pode) alterar as permissões no wp-content para que seu servidor web tenha permissões de gravação, adicione-o ao seu arquivo wp-config.php:

define('FS_METHOD', 'direct');

Permissões explicadas aqui:


30
Eu tinha que fazer: sudo chown -R www-data wp-content, bem como a concessão de permissões de gravação
mikermcneil

5
O uso da getmyuidlinha 876 é indiscutivelmente incorreto aqui, pois retorna o UID do proprietário do script, não do executor do script. Eu acredito que deveria ser posix_getuid.
cmbuckley

7
Quais são as implicações de segurança dessa abordagem?
Jahmic #

1
Se você deseja ver em qual usuário o php está sendo executado, você pode usar o seguinte: print_r(posix_getpwuid(posix_geteuid())); Você pode adicionar o código no wp-configarquivo.
Ivan V.

3
chown -R www-data wordpress/wp-contentnão funcionou para mim, mas chown -R www-data wordpressfez
Martin

252

Como afirmado anteriormente, nenhuma das permissões permit funciona mais. Você precisa alterar as permissões de acordo e colocar o seguinte no seu wp-config.php:

define('FS_METHOD', 'direct');

11
Embora eu tivesse as permissões corretas para que o servidor da Web pudesse gravar no diretório de plug-ins e no diretório wp-content, essa configuração o corrigiu para que o administrador não solicitasse as configurações de FTP / SFTP para atualizar os plug-ins. Obrigado. Funcionou perfeitamente.
Sean McCleary

7
Eu tive que fazer isso explicitamente também.
23712

5
Quando eles fizeram disso um requisito?
danjp

Eu também tive que confiar nessa configuração, no WP instalado pelo pacote debian no Ubuntu 12.04. Caso contrário, as permissões foram bem, wp-content tem permissão rwx para o grupo www-data ...
alci

2
Verifique se o seguinte ainda não está no arquivo wp-config.php: define ('FS_METHOD', 'ftpext'); Nesse caso, a colocação define ('FS_METHOD', 'direta'); na parte inferior do arquivo não funcionará. Você terá que apagar ou comentar o define ('FS_METHOD', 'ftpext'); É provável que isso aconteça se você migrou de outro servidor que exigia FTP.
Doug

104

Só queria acrescentar que NUNCA deve definir a wp-contentpermissão ou permissão de qualquer pasta para 777.

Isto é o que eu tinha que fazer para:

1) Defino a propriedade da pasta wordpress (recursivamente) para o usuário apache, da seguinte forma:

# chown -R apache wordpress/

2) Alterei a propriedade do grupo da pasta wordpress (recursivamente) para o grupo apache, da seguinte forma:

# chgrp -R apache wordpress/

3) conceda ao proprietário privilégio total para o diretório, da seguinte maneira:

# chmod u+wrx wordpress/*

E isso fez o trabalho. Minha wp-contentpasta tem755 permissões, btw.

Versão TL; DR:

# chown -R apache:apache wordpress
# chmod u+wrx wordpress/*

11
configurar o seu wordpress como de propriedade do apache é tão ruim quanto configurar o 777. O resultado é o mesmo: qualquer script php agora pode alterar seus arquivos do wordpress. Melhor opção é chown apache: apache temporária, instalar suas atualizações e volta chown a original ou usar o ssh truque / ftp
woens

11
Discordo. Não é o mesmo que definir 777. Qualquer usuário da máquina teria acesso de gravação se você definir as permissões para 777. Esse é um problema em si. e enquanto você estiver certo, esse apache pode alterar os arquivos php agora, essa seria a intenção em primeiro lugar (para atualizar ou instalar qualquer coisa). Se alguém conseguir colocar arquivos php maliciosos no servidor, isso é um problema totalmente novo e a difusão de usuários diferentes pouco ajudaria.
sufinawaz

2
Obrigado, ele salvou o meu dia também, pois não tenho privilégios de FTP, mas apenas acesso root.
Shasi kanth

4
Este é o único que me ajudou! Muito obrigado, depois de anos desenvolvendo sites do Wordpress, esse ainda é um problema clássico!
acidghost 30/09/14

1
Se você estiver executando o WordPress com uma compilação incomum, cole-o em um arquivo PHP para verificar quem o Apache está executando (o ubuntu, por exemplo, é www-data): <? Php echo exec ('whoami'); ?>
Imperativo

70
  1. Em wp-config.phpadiçãodefine('FS_METHOD', 'direct');
  2. Faça servidor gravável os diretórios wp-content/, wp-content/plugins/.
  3. Instale o plugin (copie o diretório do plugin para o wp-content/pluginsdiretório).

Trabalhou na versão 3.2.1


4
Trabalhou na versão 4.0 também.
Meetai.com 08/09/14

1
Você deve adicionar essa opção, mas você só precisa alterar as perms em wp-content / plugins
John Kloian

Estas são explicitamente as etapas que você deve executar para instalar um plug-in sem ser solicitado a fornecer informações sobre FTP. Você pode seguir as etapas para proteger o WordPress com permissões e, em seguida, fazer essas duas alterações, e você deve permanecer na maior parte seguro.
bozdoz

51

abra o wp-config.phparquivo e adicione a seguinte linha:

define('FS_METHOD', 'direct');

isso está funcionando para mim ... Obrigado


Também funciona (e parece necessário) na versão 5.4 a partir de junho de 2020.
Ralf Hein

34

Apenas uma alteração rápida para wp-config.php

define('FS_METHOD','direct');

É isso, aproveite suas atualizações do wordpress sem ftp !

Método alternativo:

Existem hosts por aí que impedirão que esse método funcione para facilitar a atualização do WordPress. Felizmente, existe outra maneira de impedir que essa praga solicite seu nome de usuário e senha de FTP.

Novamente, após as declarações de login do MYSQL no seu arquivo wp-config.php, adicione o seguinte:

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

22

Para habilitar o uso do SSH2 para suas atualizações e carregamentos de temas, você precisa gerar suas chaves SSH e ter o módulo PHP SSH instalado. Em seguida, o WordPress detectará que você tem o SSH2 disponível e você verá uma opção diferente (SSH2) exibida ao fazer um upload / upgrade.

1.) Verifique se você possui o módulo PHP instalado para o debian:

sudo apt-get install libssh2-php

2.) Gere chaves SSH, adicionar uma senha é opcional:

ssh-keygen
cd  ~/.ssh
cp id_rsa.pub authorized_keys

3.) Altere a permissão para que o WordPress possa acessar essas chaves:

cd ~
chmod 755 .ssh
chmod 644 .ssh/*

Agora você terá a opção SSH2 ao fazer um upload / upgrade / plugin. Conexão WP SSH

4.) Para maior facilidade, você pode configurar os padrões no seu wp-config.phpe isso preencherá previamente as credenciais SSH na janela de upload do WordPress.

define('FTP_PUBKEY','/home/<user>/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/<user>/.ssh/id_rsa');
define('FTP_USER','<user>');
define('FTP_PASS','passphrase');
define('FTP_HOST','domain.com');

A 'senha' é opcional, se você não configurar uma senha durante ssh-kengen ; então não adicionewp-config.php

Isso resolveu meu problema. E eu não precisava fazer chownnada. Mas eu já vi esse método referenciado em outros lugares.

Referências:


eu não sou especialista em segurança, e percebo que o wordpress incluía esse recurso e pensei que estava OK .... mas não me sinto bem com isso ... 1. ter uma conta ssh sem senha, (quem já recebeu o a chave privada pode fazer login remotamente a qualquer momento que quiser sem uma senha) e 2. com uma senha armazenada em texto sem formatação (consulte 1). isso me lembra o rsh, dependendo da idéia de que "ninguém terá acesso aos meus arquivos locais" para proteger a senha da rede em um sistema.
don brilhante

Tenho certeza de que você pode gerar a senha e NÃO adicioná-la ao wp-config.php; basta digitar a senha quando chegar à caixa de diálogo Informações da conexão.
27615 JacquelineIO

É uma enorme brecha na segurança usar uma chave privada não criptografada dessa maneira. Mas você pode atenuar o problema adicionando um "de = qualquer que seja" à linha relevante em allowed_keys.
markhahn

Isso é ótimo, mas parece que há uma incomptability com php7: core.trac.wordpress.org/ticket/35517
Supaiku

21

Normalmente, você pode simplesmente enviar o seu plugin para o wp-content\pluginsdiretório. Se você não tiver acesso a este diretório via SFTP, receio que você esteja preso.


Sim, basta soltá-los em wp-content / plugins.
ceejayoz

17

Você pode obtê-lo com muita facilidade digitando o seguinte comando no comando promt

sudo chown -R www-data:www-data your_folder_name

ou copie e cole o seguinte código no seu arquivo wp-config.php.

define('FS_METHOD', 'direct');

Onde "your_folder_name" é a pasta em que o WordPress está instalado dentro desta pasta.



15

Adicione o seguinte código ao wp-config

define('FS_METHOD', 'direct');

FS_METHOD força o método do sistema de arquivos. Deve ser apenas direto, ssh2, ftpext ou ftpsockets. Geralmente, você só deve alterar isso se estiver com problemas de atualização. Se você alterá-lo e não ajudar, altere-o novamente / remova-o. Na maioria das circunstâncias, configurá-lo como 'ftpsockets' funcionará se o método escolhido automaticamente não funcionar.

(Preferência primária) "direct" obriga a usar solicitações de E / S de arquivos diretos do PHP, isso é repleto de problemas de segurança em hosts mal configurados. É escolhido automaticamente quando apropriado.

(Preferência secundária) "ssh2" é forçar o uso da extensão PHP SSH, se instalado

(3ª preferência) "ftpext" é forçar o uso da extensão PHP PHP para acesso FTP e, finalmente,

(4ª preferência) "ftpsockets" utiliza a classe PHP Sockets para acesso FTP

Para mais informações, visite: http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants


15

Se você estiver no Ubuntu , uma solução rápida que funcionou para mim é dar propriedade ao usuário do Apache (www-data por padrão) da seguinte forma:

cd your_wordpress_directory
sudo chown -R www-data wp-content
sudo chmod -R 755 wp-content

2
Não dê permissão de execução a arquivos que não precisam dele.
Burhan Ali

13

Mude de php_modpara fastcgicom cgi&SuEXEC ativado. Funciona para mim.

Se não funcionar, tente mudar wp-contentpara 775como root:

chmod -R 775 ./wp-content

Adicionar a wp-config.php:

define('FS_METHOD', 'direct');

eu espero que dê certo


12

O WordPress 2.7 permite fazer upload de um arquivo zip diretamente (há um link na parte inferior da página de plug-ins) - não é necessário acesso ao FTP. Este é um novo recurso do 2.7 e funciona apenas para plugins (ainda não para temas).


Aliás, a atualização é ainda mais fácil - você verá um ícone indicando que uma nova versão está disponível, clique em "atualizar" e deixe que ela faça o que quiser. Muito agradável. Até o núcleo do WordPress é atualizado dessa maneira - passei de 2.7 para 2.7.1 sem fazer upload de nada.
D. Lambert

Isso só é verdade se você tiver as permissões de arquivo definidas para que o servidor da web / usuário do PHP possa gravá-las. Caso contrário, ele solicitará credenciais de FTP / SFTP. Veja a resposta de stereointeractive.com.
Dave Forgac

9

Ressuscitando um thread antigo, mas há um fantástico novo plug-in chamado SSH SFTP Updater Support que adiciona recursos de SFTP sem a necessidade de editar seu wp-config.phparquivo. Além disso, a implementação SFTP do Wordpress depende de alguns módulos PHP um tanto obscuros que geralmente não são ativados nos servidores; esse plugin empacota um plugin PHP SFTP diferente para que você não precise configurar nada no lado do Apache.

Eu tive muitos problemas para que o suporte ao SFTP funcionasse - esse plugin resolveu todos eles e é simplesmente fantástico.


9

Tente isto

1) No wp-config.phpadddefine('FS_METHOD', 'direct');

2) Defina o wp-contentdiretório como 777para gravável.

3) Agora instale o plugin.


6
Olá Mohan, obrigado pela opção FS_METHOD. Isso é realmente o que eu estava procurando. Eu preciso dizer o seguinte: nenhum diretório deve precisar 777, a menos que as circunstâncias sejam excepcionais. Isso torna um diretório mundial legível, gravável e executável. Este é um enorme risco de segurança. A solução adequada é descobrir quem é seu usuário apache (www-data, _www ou similar). Esse usuário precisa de acesso de leitura e gravação ao conteúdo wp ou precisa de propriedade sobre esse diretório ('sudo chown www-data wp-content'), sem direitos de execução. Sinto muito por ser um pouco franco, mas o 777 é perigoso para o conteúdo da web.
Ruben

8
Não 777 seu diretório de envios, isso é inseguro e não deve ser uma resposta!
MKN Web Solutions 27/03

8

A resposta do stereointeractive cobre todas as opções. Só queria mencionar uma maneira alternativa de usar o FTP. Suponho que o motivo pelo qual você não está permitindo o acesso ao FTP seja por segurança. Uma maneira de resolver essas preocupações de segurança é executar o servidor FTP escutando apenas no 127.0.0.1

Isso permite que você use o FTP de dentro do WordPress e poderá instalar plug-ins sem expô-lo ao resto do mundo. Isso também pode ser aplicado a outros aplicativos da web populares, como o Joomla! e Drupal. É o que fazemos com nossos dispositivos BitNami e servidores em nuvem e funciona muito bem.


8

Também recomendo o plug-in SSH SFTP Updater Support . Apenas resolvi todos os meus problemas também ... especialmente no que diz respeito a obter plugins para excluir através do administrador. Basta instalá-lo da maneira usual e, da próxima vez que você for solicitado pelo WordPress para obter detalhes de FTP, haverá campos extras para você copiar / colar sua chave SSH privada ou fazer upload do seu arquivo PEM.

O único problema que tenho é fazê-lo lembrar a chave (tentei os dois métodos). Não gosto da ideia de precisar encontrá-lo e inseri-lo toda vez que precisar excluir um plug-in. Mas pelo menos é uma solução sólida por enquanto.


1
"haverá campos extras para você copiar / colar sua chave SSH privada" .... eu não sou um gênio da segurança, mas ... não é o objetivo das chaves ssh privadas que você nunca precisa enviá-las pela rede ?
don brilhante

8

Sim, instale diretamente o plugin no WordPress.

  1. Copie a pasta do plugin e cole na pasta do plugin do WordPress.
  2. vá para o lado do administrador (/ test / wp-admin) e depois vá para o link do plug-in e verifique o nome do plug-in.
  3. Ative o plugin para instalar o plugin facilmente.

outra opção

  1. crie o arquivo zip para o código do plug-in.
  2. vá para o lado do administrador (/ test / wp-admin) e depois vá para o link do plug-in e clique em add new, navegue na pasta zip do plug-in e instale o plug-in e saia da opção ativar o plug-in. ativar o plugin.

6

É possível usar o SFTP ou SSH para atualizar automaticamente os plug-ins no WordPress, mas você precisa ter a extensão ssh2 pecl. Você pode descobrir como fazê-lo, usando o seguinte tutorial


6

Usamos SFTP com SSH (tanto em nossos servidores de desenvolvimento quanto em live), e eu tentei (não muito difícil) usar o recurso de upload do WordPress. Concordo com Toby, carregue seus plugins no wp-content/pluginsdiretório e ative-os a partir daí.


6

Vi muitas pessoas recomendando definir a permissão para 777. Eu tive o mesmo problema há 2 dias e tudo o que fiz foi adicioná-lo ao wp-content

define('FS_METHOD', 'direct');

e

defina a permissão como 775 para a pasta do plug-in

Isso resolveu meu problema de solicitar acesso / senha de acesso ao FTP.

Antes disso, eu tinha que adicionar o plug-in manualmente, adicionando o arquivo .zip à pasta do plug-in e, em seguida, fui wp-admin/pluginse o instalei.


5

Tente isto Verifique se a permissão correta é dada à pasta wp-content.

Edite o arquivo wp-config.php e adicione a seguinte linha

define('FS_METHOD', 'direct');

chmod o diretório "wp-content" para www-data para acesso total.

Agora tente instalar o plugin.


4

Sim, você pode fazer isso.

Você precisa adicionar

define('METHOD','direct');

no seu wpconfig. Mas esse método não será preferível, pois possui violações de segurança.

Obrigado,


3

Método 1: Você pode definir o seguinte: 1. No wp-config.php, você precisa escrever estas linhas.

define('FS_METHOD', 'direct'); 

Nota: coloque isso depois de define ('DB_CHARSET', 'utf8mb4').

  1. defina a permissão wp-content ou a permissão recursiva 777, permissão total que você pode conceder via filezilla. escrever, clique em diretório> permissões> marque ler-escrever e executar e marque Recurso em subdiretórios

    Método 2:

ou Você também pode definir isso

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

em fevereiro de 2020, é uma instrução clara,Note: put this after define( 'DB_CHARSET', 'utf8mb4' ).
Osify

2

configurar um ftp ou mesmo uma conexão SFTP ou chmod 777 é uma maneira ruim de procurar algo diferente de um ambiente local. Abrir até um método SFTP apresenta mais riscos de segurança que não são necessários.

o que é necessário é uma permissão gravável para / wp-content / uploads e / wp-content / plugins / pelo proprietário desses diretórios. (o linux ls -la mostrará a você a propriedade).

O usuário apache padrão que é executado é www-data.

O chmod 777 permite que qualquer usuário na máquina edite esses arquivos, não apenas o usuário do thread apache / php.

O SFTP, se você ainda não o estiver usando, apresentará outro ponto de possível falha de uma fonte externa. Considerando que você só precisa acessar pelo usuário local executando o processo apache / php para concluir o objetivo.

Como não vi ninguém defendendo isso, pensei em oferecer essas informações para ajudar com nossos constantes problemas de segurança do WP on-line.


2

Aqui está um método simples.

Execute os seguintes comandos.

Isso permitirá que seu módulo mod_rewrite para o Apache

$sudo a2enmod rewrite

Este comando mudará o proprietário da pasta para www-data

$sudo chown -R www-data [Wordpress Folder Location]

Depois de executar os comandos acima, você pode instalar qualquer tema sem FTP.


1
Para Nginx basta executar o segundo comandosudo chown -R www-data [Wordpress Folder Location]
srokatonie

@srokatonie obrigado pelo comentário. isso será útil para todos.
Manuja Jayawardana 15/07/19


1

A única razão pela qual o WordPress não permitirá que você faça o upload de qualquer plugin via painel de administração do WordPress quando você não tem permissão para escrever no diretório / wp-content. Lembre-se de que seu diretório wordpress / wp-content requer nível de permissão 0755. Existem várias maneiras de alterar o nível de permissão de uma pasta.

Alterando as permissões de arquivo usando o cPanel:

Vá para o Gerenciador de Arquivos em abra a pasta HTML pública onde seu site wordpress deveria estar, ou abra o diretório raiz do site, se o site estiver em outra pasta. No diretório raiz do WordPress, navegue em direção à pasta wp-content; no final da linha da pasta wp-content, a última caixa contém permissões de arquivo para essa pasta. Certifique-se de editar o nível de permissão da pasta para 0755 e pronto.

Alterando permissões de arquivo usando o terminal SSH:

No seu terminal, localize a raiz do site WordPress, que no meu caso era / var / www / html, para mover para o diretório raiz do WordPress, digite o seguinte comando:

cd /var/www/html 

Agora você está no diretório raiz do WordPress, onde está localizada a pasta / wp-content necessária. Portanto, para alterar as permissões do arquivo, digite o seguinte comando:

sudo chmod wp-content 755 

Isso alterará sua permissão de arquivo do diretório / wp-content para 0755.

Agora você não receberá uma mensagem de erro ao enviar plugins do wordpress via FTP.


0

A melhor maneira de instalar o plugin usando SSH é o WPCLI.

Observe que, o acesso SSH é obrigatório para usar comandos WP CLI. Antes de usá-lo, verifique se a CLI do WP está instalada no servidor ou na máquina de hospedagem.

Como verificar: wp --version[Ele mostrará a versão wp cli instalada]

Se não estiver instalado, como instalá-lo: Antes de instalar o WP-CLI, verifique se o ambiente atende aos requisitos mínimos:

Ambiente semelhante ao UNIX (OS X, Linux, FreeBSD, Cygwin); suporte limitado no ambiente Windows. PHP 5.4 ou posterior WordPress 3.7 ou posterior. Versões anteriores à versão mais recente do WordPress podem ter funcionalidade degradada

Se os pontos acima forem satisfeitos, siga as etapas: URL de referência: WPCLI

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
[ download the wpcli phar ]

php wp-cli.phar --info [ check whether the phar file is working ]

chmod +x wp-cli.phar [ change permission ]
sudo mv wp-cli.phar /usr/local/bin/wp [ move to global folder ]
wp --info [ to check the installation ]

Agora o WP CLI está pronto para instalar.

Agora você pode instalar qualquer plug-in disponível no WordPress.org usando os seguintes comandos:

wp install plugin plugin-slug
wp delete plugin plugin-slug
wp deactivate plugin plugin-slug

NOTA: O wp cli pode instalar apenas os plug-ins disponíveis no wordpress.org

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.