Permissões de arquivo corretas para WordPress [fechado]

399

Eu dei uma olhada aqui, mas não encontrei detalhes sobre as melhores permissões de arquivo. Também examinei algumas das perguntas do formulário do WordPress por aqui também, mas qualquer um que sugira o 777 obviamente precisa de uma pequena lição de segurança.

Em suma, minha pergunta é esta. Quais permissões devo ter para o seguinte:

  1. pasta raiz armazenando todo o conteúdo do WordPress
  2. wp-admin
  3. conteúdo wp
  4. wp-inclui

e então todos os arquivos em cada uma dessas pastas?

John Crawford
fonte
Basicamente, apenas a pasta de uploads do Wordpress deve ser 777, mas seria uma séria ameaça à segurança. Se você usar um servidor com Suphp ativado, não há necessidade de modificar as permissões manualmente.
Ali F
4
Estou votando para encerrar esta questão como off-topic, porque ela é off-topic pelo trecho da tag wiki: "As questões off-topic incluem aquelas sobre desenvolvimento de temas, administração do WordPress, práticas recomendadas de gerenciamento, configuração do servidor, etc."
Adriaan

Respostas:

499

Quando você configura o WP, você (o servidor da web) pode precisar de acesso de gravação aos arquivos. Portanto, os direitos de acesso podem precisar ser perdidos.

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

Após a instalação, você deve aumentar os direitos de acesso , de acordo com o Hardening WordPress, todos os arquivos, exceto o conteúdo wp, devem ser graváveis ​​apenas pela sua conta de usuário. O conteúdo wp também deve ser gravável por www-data .

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

Talvez você queira alterar o conteúdo em wp-content mais tarde. Nesse caso, você poderia

  • mudar temporariamente para o usuário para www-data com su,
  • conceda acesso de escrita ao grupo wp-content 775 e entre no grupo www-data ou
  • conceda ao usuário os direitos de acesso à pasta usando ACLs .

Faça o que fizer, verifique se os arquivos têm permissões rw para www-data .

ManuelSchneid3r
fonte
2
Kornel fornece um desses links oficiais abaixo. Veja também codex.wordpress.org/Changing_File_Permissions , o documento do Apache httpd.apache.org/docs/2.2/misc/security_tips.html e praticamente qualquer pesquisa no Google sobre o assunto. Porém, no caso geral, em caso de dúvida, não conceda acesso de gravação (e certamente nenhuma propriedade) e relaxe caso a caso, e não o contrário (princípio de menor privilégio que você está violando aqui).
Calimo 19/10
22
Por que existe um recurso de atualização automática se ele nem funciona sem alterar as permissões?
malhal 14/05
6
@ ManuelSchneid3r, vejo alguns arquivos PHP em wp-content, eles realmente devem ser graváveis ​​por www-data??? Isso realmente não parece totalmente seguro.
Alexis Wilke
12
Esta solução impedirá o wordpress de instalar 'atualizações automáticas de segurança'. Você precisa executar manualmente as etapas acima para cada atualização menor do wordpress.
Jeroen
11
Esta não é uma configuração segura. Definir permissões de leitura nesses arquivos não afeta quando o usuário apache também possui os arquivos! NÃO USE. Consulte codex.wordpress.org/Changing_File_Permissions
PodTech.io
60

Dar acesso total a todos os arquivos wp ao www-datausuário (que é neste caso o usuário do servidor da web) pode ser perigoso. Então, NÃO faça isso:

chown www-data:www-data -R *

No entanto, pode ser útil no momento em que você estiver instalando ou atualizando o WordPress e seus plug-ins. Mas quando você termina, não é mais uma boa idéia manter os arquivos wp de propriedade do servidor da web.

Basicamente, permite que o servidor da Web coloque ou substitua qualquer arquivo no seu site. Isso significa que existe a possibilidade de assumir o controle do seu site se alguém conseguir usar o servidor da Web (ou uma brecha de segurança em algum script .php) para colocar alguns arquivos no seu site.

Para proteger seu site contra esse ataque, você deve:

Todos os arquivos devem pertencer à sua conta de usuário e devem ser graváveis ​​por você. Qualquer arquivo que precise de acesso de gravação do WordPress deve ser gravável pelo servidor da web, se a configuração da hospedagem exigir, isso pode significar que esses arquivos precisam ser de propriedade do grupo pela conta do usuário usada pelo processo do servidor da web.

/

O diretório raiz do WordPress: todos os arquivos devem ser graváveis ​​apenas pela sua conta de usuário, exceto .htaccess, se você deseja que o WordPress gere automaticamente regras de reescrita para você.

/wp-admin/

A área de administração do WordPress: todos os arquivos devem ser graváveis ​​apenas pela sua conta de usuário.

/wp-includes/

A maior parte da lógica do aplicativo WordPress: todos os arquivos devem ser graváveis ​​apenas pela sua conta de usuário.

/wp-content/

Conteúdo fornecido pelo usuário: destinado a ser gravável por sua conta de usuário e pelo processo do servidor da web.

Dentro de /wp-content/você encontrará:

/wp-content/themes/

Arquivos de tema. Se você deseja usar o editor de temas embutido, todos os arquivos precisam ser graváveis ​​pelo processo do servidor da web. Se você não quiser usar o editor de temas interno, todos os arquivos poderão ser gravados apenas pela sua conta de usuário.

/wp-content/plugins/

Arquivos de plug-in: todos os arquivos devem ser graváveis ​​apenas pela sua conta de usuário.

Outros diretórios que possam estar presentes /wp-content/devem ser documentados por qualquer plugin ou tema que os exija. As permissões podem variar.

Fonte e informações adicionais: http://codex.wordpress.org/Hardening_WordPress

Kornel
fonte
pela sua conta de usuário. significa o usuário executando os scripts php no site (normalmente o usuário apache)?
Shasi kanth
4
@shasikanth Não, o usuário apache é aquele a quem ele se refere como “processo do servidor web”. Conta de usuário é o usuário Linux (ssh, o usuário ftp, etc.)
Daniel bang
Nesta resposta e na resposta aceita, o usuário (não www-data) deve fazer parte do grupo www-data?
user658182
11
Não, esse é o ponto.
Piotr Nawrot
11
O problema que sinto é sempre que eu faço do meu "usuário" SSH o proprietário do / wp-content / plugins /, o Wordpress se torna completamente não funcional de dentro do administrador, com a rotina pop-up FTP constante ou erros de permissão. Não é possível adicionar nem atualizar plugins. Somente quando eu faço do www-data o proprietário do conteúdo wp, a funcionalidade do plugin Admin do Wordpress funciona. (Exemplo: sudo chown www-data: www-data -R / var / www / html / wp-content /)
Heres2u 18/18
26

Para aqueles que têm a pasta raiz do wordpress na pasta inicial:

** Ubuntu / apache

  1. Adicione seu usuário ao grupo www-data:

CRÉDITO Concedendo permissões de gravação ao grupo de dados www

Você deseja chamar usermodseu usuário. Então isso seria:

sudo usermod -aG www-data yourUserName

** Supondo que o www-datagrupo exista

  1. Verifique se seu usuário está em www-datagrupo:

    groups yourUserName

Você deve obter algo como:

youUserName : youUserGroupName www-data

** youUserGroupName é geralmente semelhante ao seu nome de usuário

  1. Alterar recursivamente a propriedade do grupo da pasta wp-content, mantendo a propriedade do usuário

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. Mude o diretório para youWebSiteFolder / wp-content /

    cd youWebSiteFolder/wp-content

  3. Altere recursivamente as permissões de grupo das pastas e subpastas para ativar as permissões de gravação:

    find . -type d -exec chmod -R 775 {} \;

** modo de `/ home / yourUserName / youWebSiteFolder / wp-content / 'alterado de 0755 (rwxr-xr-x) para 0775 (rwxrwxr-x)

  1. Altere recursivamente as permissões de grupo dos arquivos e subarquivos para ativar as permissões de gravação:

    find . -type f -exec chmod -R 664 {} \;

O resultado deve ser algo como:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

Equivalente a:

chmod -R ug + rw nome da pasta

As permissões serão como 664 para arquivos ou 775 para diretórios.

Ps se alguém encontrar erro 'could not create directory'ao atualizar um plugin, faça:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
quando você estiver na raiz do seu domínio.
Supondo: wp-config.phppossui
credenciais de FTP no LocalHost
define('FS_METHOD','direct');

Jadeye
fonte
10
-1. Você NÃO deseja que o www-data tenha acesso de gravação aos arquivos wordpress, exceto no conteúdo wp.
Calimo 18/10
775 no conteúdo wp ajuda. Com 644 para arquivos, 755 para pastas e usuário de chown: www-data, às vezes eu ainda estava tendo problemas com upload de mídia, atualização de plug-in etc. 775 permite que o conteúdo wp seja alterado por www-data: www-data também , que resolve o problema.
guylabbe.ca
Remova o -R do comando find / chmod, pois é lento e desnecessário.
Adam Jimenez
20

É melhor ler a documentação do wordpress neste https://wordpress.org/support/article/changing-file-permissions/

  • Todos os arquivos devem pertencer à conta do usuário real, não à conta do usuário usada para o processo httpd
  • A propriedade do grupo é irrelevante, a menos que haja requisitos de grupo específicos para a verificação de permissões do processo do servidor da web. Este não é geralmente o caso.
  • Todos os diretórios devem ser 755 ou 750.
  • Todos os arquivos devem ser 644 ou 640. Exceção: wp-config.php deve ser 440 ou 400 para impedir que outros usuários no servidor o leiam.
  • Nenhum diretório deve receber 777, mesmo os diretórios de upload. Como o processo php está sendo executado como proprietário dos arquivos, ele obtém permissões dos proprietários e pode gravar até em um diretório 755.
PodTech.io
fonte
4
Não sei por que você recebeu o voto negativo: é quase como se as pessoas quisessem que a melhor resposta fosse como deixar a instalação insegura !
BCRAN
O link está desatualizado. novo aqui: wordpress.org/support/article/changing-file-permissions E obrigado por ser o único a referenciar os documentos reais!
everyman
Se o wp-config.php for 400, como o apache deve incluí-lo (leia-o assim) no carregamento da página?
Martin Braun
14

Eu defino permissões para:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

No meu caso, criei um usuário específico para o WordPress, diferente do usuário padrão do apache, que impede o acesso da web aos arquivos pertencentes a esse usuário.

Em seguida, permite ao usuário apache manipular a pasta de upload e, finalmente, definir permissões de arquivo e pasta suficientemente seguras.

EDITADO

Se você estiver usando o W3C Total Cache, faça o seguinte também:

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

Então vai dar certo!

EDITADO

Depois de um tempo desenvolvendo sites WordPress, recomendo permissões de arquivo diferentes por ambiente:

Na produção, eu não daria acesso aos usuários para modificar o sistema de arquivos, apenas permitirei que eles enviassem recursos e tivessem acesso a pastas específicas de alguns plugins para fazer backups, etc. Mas gerenciando projetos no Git e usando chaves de implantação no servidor, não são bons plugins de atualização na preparação nem na produção. Deixo aqui a configuração do arquivo de produção:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data: www-data = usuário e grupo apache ou nginx

A preparação compartilhará as mesmas permissões de produção, pois deve ser um clone dela.

Finalmente, o ambiente de desenvolvimento terá acesso para atualizar plugins, traduções, tudo ...

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data: www-data = usuário apache ou nginx e grupo your-user: root-group = seu usuário atual e o grupo raiz

Essas permissões darão acesso para desenvolver sob themese your-pluginpasta sem pedir permissão. O restante do conteúdo será de propriedade do usuário Apache ou Nginx para permitir que o WP gerencie o sistema de arquivos.

Antes de criar um repositório git, execute primeiro estes comandos:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;
Pablo Ezequiel Leone
fonte
11
Nããão! Nunca faça um 777. Por favor, não aconselhe isso a (novas) pessoas que estão lendo isso.
22418 Karlo
NENHUM arquivo ou pasta deve pertencer ao processo http - essa é uma grande falha de segurança. Se um usuário malicioso encontrado um exploit em um plugin ou tema ou o WordPress em si pudessem fazer upload de código que pode então ser executado pelo Apache e acesso ganho - eu tenho visto em primeira mão :(
DropHit
10

As permissões corretas para o arquivo são 644 As permissões corretas para a pasta são 755

Para alterar as permissões, use o terminal e os seguintes comandos.

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

755 para pastas e 644 para arquivos.

Kappa
fonte
11
e 640 para wp-config.php. / mudança de plugins, temas e upload de mídias.
Erginduran
8

Eu acho que as regras abaixo são recomendadas para um site wordpress padrão:

  • Para pastas dentro do conteúdo wp, defina as permissões 0755:

    Plugins chmod -R 0755

    chmod -R 0755 carregamentos

    Atualização chmod -R 0755

  • Permita que o usuário apache seja o proprietário dos diretórios acima do wp-content:

    uploads de chown apache

    atualização do apache chown

    chown apache plugins

shasi kanth
fonte
11
Você também pode definir recursivamente permissões para os diretórios, como: chown -R apache uploads . E, se necessário, você também pode atribuir ao grupo o apache: chgrp apache uploads
shasi kanth
8

Na verdade, depende dos plugins que você planeja usar, pois alguns plugins alteram o documento raiz do wordpress. mas geralmente eu recomendo algo assim para o diretório wordpress.

Isso atribuirá a "raiz" (ou qualquer que seja o usuário que você esteja usando) como o usuário em cada arquivo / pasta, R significa recursivo, portanto, ele não para na pasta "html". se você não usou R, é aplicável apenas ao diretório "html".

sudo chown -R root:www-data /var/www/html  

Isso definirá o proprietário / grupo de "wp-content" como "www-data" e, assim, permitirá que o servidor da Web instale os plugins através do painel de administração.

chown -R www-data:www-data /var/www/html/wp-content

Isso definirá a permissão de cada arquivo na pasta "html" (incluindo arquivos em subdiretórios) para 644, para que pessoas de fora não possam executar nenhum arquivo, modificar qualquer arquivo, grupo não pode executar nenhum arquivo, modificar qualquer arquivo e apenas o usuário tem permissão para modificar / ler arquivos, mas mesmo assim o usuário não pode executar nenhum arquivo. Isso é importante porque evita qualquer tipo de execução na pasta "html", também porque o proprietário da pasta html e de todas as outras pastas, exceto a pasta wp-content, é "root" (ou seu usuário), o www-data pode ' t modifique qualquer arquivo fora da pasta wp-content, portanto, mesmo se houver alguma vulnerabilidade no servidor da web e se alguém tiver acessado o site sem autorização, eles não poderão excluir o site principal, exceto os plug-ins.

sudo find /var/www/html -type f -exec chmod 644 {} +

Isso restringirá a permissão de acessar "wp-config.php" para o usuário / grupo com rw-r ----- essas permissões.

chmod 640 /var/www/html/wp-config.php

E se um plug-in ou atualização reclamou que não pode ser atualizado, acesse o SSH e use este comando e conceda a permissão temporária para "www-data" (servidor da web) para atualizar / instalar através do painel de administração e, em seguida, reverta volte para a "raiz" ou para o usuário assim que estiver concluído.

chown -R www-data /var/www/html

E no Nginx (o mesmo procedimento para o apache) para proteger a pasta wp-admin de acesso não autorizado e sondagem. O apache2-utils é necessário para criptografar a senha, mesmo se você tiver o nginx instalado, omita c se planeja adicionar mais usuários ao mesmo arquivo.

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

Agora visite este local

/etc/nginx/sites-available/

Use esses códigos para proteger a pasta "wp-admin" com uma senha, agora ele perguntará a senha / nome de usuário se você tentou acessar o "wp-admin". observe, aqui você usa o arquivo ".htpasswd" que contém a senha criptografada.

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

Agora reinicie o nginx.

sudo /etc/init.d/nginx restart
Don Dilanga
fonte
Usando o usuário root não é recommended.it poderia ser mais perigoso Basta fazer um novo usuário n adicioná-lo à sudo grupo
erginduran
Não defendi aqui o uso da raiz. Eu usei a raiz como exemplo. você pode usar qualquer nome em vez de usar a raiz.
Dom Don Dilanga
2

Comandos:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Onde ftp-user é qual usuário você está usando para fazer upload dos arquivos

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content
Iacob Vlad-George
fonte
11
deve ser nome de usuário chown: www-data de outra forma você não pode editar arquivos
malhal
Você pode usar em $(whoami)vez de ftp-user. Por padrão, o usuário atual ( não raiz ) é o seu usuário FTP se você estiver usando seu próprio servidor (local, VPS, etc)
Juanjo Salvador
2

Para ter certeza absoluta de que seu site é seguro e você está usando as permissões corretas para suas pastas, use um plug-in de segurança como estes:

https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/

https://en-ca.wordpress.org/plugins/wordfence/

Esses plugins verificarão a instalação do Wordpress e o notificarão sobre possíveis problemas. Isso também avisará sobre permissões de pasta não seguras. Além disso, esses plugins recomendam quais permissões devem ser atribuídas às pastas.

user296526
fonte
2
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess
Grapehand
fonte
1

Não sei dizer se isso está correto ou não, mas estou usando uma imagem Bitnami no Google Compute App Engine. Estou tendo problemas com plug-ins e migração e, depois de bagunçar ainda mais as permissões chmod'ing, encontrei essas três linhas que resolveram todos os meus problemas. Não tenho certeza se é o caminho certo, mas funcionou para mim.

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;
caminho do futuro
fonte
1

Para o OS X, use este comando:

sudo chown -R www:www /www/folder_name
Abduhafiz
fonte
1

Defina no arquivo wp_config.

/var/www/html/Your-Project-File/wp-config.php

define( 'FS_METHOD', 'direct' );

chown - altera a propriedade dos arquivos / diretórios. Ou seja. O proprietário do arquivo / dir muda para o especificado, mas não modifica as permissões.

sudo chown -R www-data:www-data /var/www
Harish Verma
fonte
0

Com base em toda a leitura e agonia em meus próprios sites e depois de ter sido hackeado, criei a lista acima, que inclui permissões para um plugin de segurança para o Wordpress chamado Wordfence. (Não afiliado)

No nosso exemplo, a raiz do documento wordpress é /var/www/html/example.com/public_html

Abra as permissões para que www-data possa gravar na raiz do documento da seguinte maneira:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

Agora, no painel do seu site, como administrador, você pode executar atualizações.

Site seguro após a conclusão das atualizações, seguindo estas etapas:

sudo chown -R wp-user:wp-user public_html/

O comando acima altera as permissões de tudo na instalação do wordpress para o usuário FTP do wordpress.

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

O comando acima garante que o plug-in de segurança Wordfence tenha acesso aos seus logs. O diretório de uploads também pode ser gravado por www-data.

cd plugins
sudo chown -R www-data:wp-user wordfence/

O comando acima também garante que o plug-in de segurança tenha exigido acesso de leitura e gravação para sua função adequada.

Permissões de diretório e arquivos

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

Defina as permissões do wp-config.php para 640, para que apenas o usuário wp possa ler este arquivo e mais ninguém. Permissões de 440 não funcionaram para mim com a propriedade do arquivo acima.

sudo chmod 640 wp-config.php

As atualizações automáticas do Wordpress usando SSH estavam funcionando bem com o PHP5, mas quebraram com o PHP7.0 devido a problemas com o pacote php7.0-ssh2 com o Ubuntu 16.04 e não consegui encontrar como instalar a versão correta e fazê-la funcionar. Felizmente, um plugin muito confiável chamado ssh-sftp-updater-support (free) possibilita atualizações automáticas usando o SFTP sem a necessidade do libssh2. Portanto, as permissões acima nunca precisam ser diminuídas, exceto em casos raros, conforme necessário.

spinozarabel
fonte