Estou seguindo Alterando Permissões de Arquivos "WordPress Codex , mas quando tento atualizar e/ou instalar plugin
e/ou theme
através de wp-admin
, estou seguindo:
Para executar a ação solicitada, o WordPress precisa acessar seu servidor da web. Por favor insira suas credenciais de FTP para prosseguir. Se você não se lembra de suas credenciais, você deve entrar em contato com seu web host.
do nível do sistema de arquivos:
# 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
é executado como 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
$
Gostaria de poder executar a ação solicitada (install
e/ou update
) até /wp-admin
without credenciais de FTP.
Como eu posso fazer isso?
Adicione o seguinte ao wp-config.php:
define( 'FS_METHOD', 'direct' );
Deixe-me saber como isso funciona para você.
Isso significa que o WordPress está tendo permissão limitada para fazer alterações na pasta em que foi instalado.
Para corrigir isso, tudo o que você precisa fazer é fornecer as permissões necessárias para o mesmo.
Execute o seguinte comando no Terminal/PuTTY/Linha de Comando após conectar-se ao seu servidor via SSH:
Sudo chown -R Apache:apache /var/www/html
Checkout este artigo para detalhes completos.
Não é uma resposta direta, mas provavelmente tem que ser dito - este é um problema que você deve evitar resolver a menos que você esteja falando sobre um desenvolvimento local, caso em que você pode apenas definir permissões para 777.
O motivo é que, se o servidor da Web puder substituir seu código, qualquer código mal-intencionado em execução poderá fazer isso também. O risco é muito maior do que a conveniência de economizar alguns segundos por não ter que digitar as credenciais de ftp.
Mesmo que seja totalmente correto ter a propriedade como root:Apache
com permissões 775, e o httpd para executar como Apache
, o Wordpress não gosta disso. Ele quer que o proprietário seja Apache
, conforme 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 );
}
Seu seria:
wp_file_owner = raiz
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';
}
Se $ wp_file_owner for o mesmo que $ temp_file_owner, prossiga. Seu seria pego no elseif, que de acordo com o comentário não permite excluir/criar, mas apenas atualizações (eu verifiquei isso atualizando o código de um plugin de dentro do Wordpress, e funcionou).
Note que eu não olhei extensivamente através do código, esta é apenas a minha interpretação rápida. Eu tive o mesmo problema e uma vez que eu mudei user: group para que o usuário do httpd também seja o dono do arquivo, ele não solicitou mais credenciais de FTP.
No meu caso, resolvi isso mudando do GIT de volta para o modo FTP.
Não há mais aviso.
Talvez isso ajude alguém também.
Embora a questão não seja tão nova, quero acrescentar meus dois centavos também nesta edição.
Um monte de pessoas tem Centos (7) em seu servidor VPS e seguindo as linhas de código poderia resolver o seu problema.
O Imho tem tudo a ver com o SELinux, que impede que o WordPress faça o trabalho desejado. Vai longe para explicar o que SELinux é e o que faz. FYI a introdução começa com:
O Security-Enhanced Linux (SELinux) é um mecanismo de segurança de controle de acesso (MAC) obrigatório implementado no kernel.
Apenas 3 passos para seguir:
chcon -R -t httpd_sys_content_t /var/www/html/wordpress
chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress
Não reinicialize a partir do servidor ou reinicie a partir de qualquer daemon necessário.
Não vou dizer que ajuda a todos, mas para aqueles que não desativaram o SELinux, isso deveria ser um alívio.
Felicidades
Nota: Por favor, ajuste suas próprias necessidades (caminho para o WordPress)
edit: certifique-se de remover a linha define("FS_METHOD", "direct");
quando ela é/foi usada em wp-config.php
, porque isso é absolutamente desnecessário quando as linhas de código estão acima do desejado.