Como devo modificar as permissões de arquivo para acomodar o Wordpress?

Como devo modificar as permissões de arquivo para acomodar o Wordpress?

Tenho usado com sucesso o método descrito aqui:Mantido por um único usuárioe tem funcionado bem para mim. Este é o meu script para todos os meus sites:

sudo chown -R WebAdmin /var/www/example.com/
sudo chgrp -R www-data /var/www/example.com/
sudo chmod -R 750 /var/www/example.com/
sudo chmod g+s /var/www/example.com/
sudo chown www-data:www-data /var/www/example.com/Uploads/
sudo chmod -R 755 /var/www/example.com/Uploads/

Eu mantenho todos os sites nesse servidor e WebAdmin é o usuário geral que uso para FTP e também para SSH.

No entanto, recentemente mudei alguns sites Wordpress de uma empresa de hospedagem para o meu servidor e o procedimento acima não funciona. Atualizar o Wordpress ou seus temas/plugins me deu o erro:

Para realizar a ação solicitada, o WordPress precisa acessar seu servidor web. Por favor, insira suas credenciais de FTP para continuar. Se você não se lembra de suas credenciais, entre em contato com seu host.

Existem várias "correções", comoEsteque são mais como soluções alternativas e provavelmente são inseguras. Então usei o método mais seguro (AFAIK) e tornei o www-data o proprietário dos sites WordPress, mantendo os sites não WordPress como antes. Em outras palavras, eu simplesmente corri

sudo chown -R www-data /var/www/wp_example.com/

nos sites WordPress. É claro que isso funcionou, mas se torna um incômodo no que diz respeito à manutenção manual do site, porque tenho que fazer login como root para fazer isso. Eu também não seria capaz de atribuir o(s) site(s) a outra pessoa para mantê-lo no futuro. Observe que alguns dos meus sites são híbridos (parte WordPress e parte páginas personalizadas).

Então, estou me perguntando se existe uma solução melhor, mais elegante e mais geral, ou seja, que funcionará para sites WordPress e não-WordPress.

Uma possibilidade é adicionar o usuário WebAdmin ao grupo www-data. Ou talvez www-data para o grupo de usuários WebAdmin? O que faz mais sentido e o que é mais seguro?

Responder1

Se o usuário WebAdmindiretamente e o usuário www-datapor meio do grupo www-dataprecisarem gravar nesses diretórios, isso 750não será suficiente. O que corrige seu design atual seria:

sudo chmod -R 770 /var/www/example.com/

Considerações de segurança

No entanto, em geral, isso significa que todos os sites PHP estão sendo executados no mesmo usuário e, após essa modificação, todos os sites poderão ler e gravar os arquivos de qualquer outro site. Isso significa que um comprometimento de qualquer um dos sites compromete todos eles.

Usar um usuário e um pool PHP-FPM separados para cada site dividiria os sites em compartimentos isolados, mitigando esse risco. Você pode administrar o site com o mesmo usuário que o executa:

/var/www$ ls -l
drwxr-x--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxr-x--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxr-x--- 2 example-org www-data 4096 Aug 30 7:00 example.org

Se você realmente precisa que o usuário WebAdmingerencie todos eles, adicione o usuário ao grupo www-datae conceda permissões de gravação ao grupo, mas eu não recomendaria isso.

/var/www$ ls -l
drwxrwx--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxrwx--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxrwx--- 2 example-org www-data 4096 Aug 30 7:00 example.org

Conjuntos PHP-FPM

Como mencionei os pools PHP FPM, aqui está um pequeno exemplo de configuração. Existem vários tutoriais explicando essas etapas em detalhes.

  1. Instale o PHP-FPM.

  2. /etc/php/8.2/fpm/pool.d/example-com.conf:

    [example-com]
    user = example-com
    group = example-com
    
    listen = /run/php/example-com.sock
    chdir = /var/www/example.com
    
    listen.owner = www-data
    listen.group = www-data
    
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[disable_functions] = exec,passthru,shell_exec
    php_admin_flag[allow_url_fopen] = off
    php_admin_value[cgi.fix_pathinfo] = 1
    
    security.limit_extensions =
    

    A última linha diminui a segurança para permitir que o WordPress lide com URLs de SEO, as outras são para aumentar a segurança. Os pmparâmetros devem ser ajustados às suas necessidades.

  3. Habilite módulos Apache mpm_event, proxy& proxy_fcgi.

  4. Adicione o manipulador ao <VirtualHost>bloco Apache2 do site:

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/example-com.sock|fcgi://localhost"
    </FilesMatch>
    <Proxy "fcgi://localhost/">
    </Proxy>
    
  5. Recarregue ou reinicie os serviços Apache2 e PHP-FPM.

informação relacionada