Práticas recomendadas sobre permissões de arquivos / diretórios do Joomla e propriedade em sistemas Linux?

26

No passado, eu sempre tive problemas com permissões e propriedade de arquivos / diretórios do Joomla em sistemas Linux.

Problemas incluídos

  • Não é possível transferir arquivos para o servidor usando programas como o WinSCP.
  • Não é possível instalar extensões, plugins etc. do Joomla
  • Arquivos e pastas inseguros devido a permissões perigosas e configurações de propriedade.

Quais são as melhores práticas recomendadas para definir permissões e propriedades no Joomla em sistemas Linux?

TryHarder
fonte

Respostas:

22

Existem algumas causas possíveis para problemas de permissão de arquivo e pasta na hospedagem Linux.

1. Permissões de arquivo e pasta

As permissões de verificação de pasta estão definidas como 0755 e as de arquivo definidas como 0644. Observe que as permissões de arquivo e pasta podem ser redefinidas para essas configurações seguras padrão em todo o site, usando a versão gratuita ou paga do Akeeba Admin Tools.

2. Parâmetros PHP

Verifique se o parâmetro upload_max_filesize na guia Informações do PHP na Informação do sistema é suficiente. Geralmente, você pode substituir a configuração padrão em um ambiente de hospedagem compartilhada pelas configurações do PHP no cPanel ou em um php.iniarquivo personalizado .

3. Caminhos incorretos no configuration.php

Você pode ter caminhos incorretos especificados para as pastas tmp e logs. Eles são especificados na Configuração do sistema ou podem ser atualizados diretamente no arquivo configuration.php, se você quiser editar diretamente os arquivos do sistema. Se você não souber qual deve ser o caminho, crie e faça o upload de um arquivo whereami.php(ou similar) para a pasta raiz do seu site com o seguinte conteúdo:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Navegue para [mywebsite].com/whereami.phpver o caminho para a pasta raiz.

Depois de ter o caminho correto, lembre-se de excluir o whereami.phparquivo.

4. Manipulador de arquivo PHP inadequado

Sua hospedagem na web pode ser configurada com o manipulador de arquivos PHP padrão, mas deve, idealmente, usar suPHP ou FastCGI ou similar, para que o Joomla possa fazer upload e executar arquivos usando permissões de arquivo seguras.

Você pode ver em que manipulador PHP está sendo usado System -> System Information -> WebServer to PHP Interface.

Há um bom artigo sobre os méritos relativos dos manipuladores de arquivos PHP em: http://boomshadow.net/tech/php-handlers

Em um ambiente de hospedagem compartilhada, você normalmente não tem acesso para alterar qual manipulador de arquivo PHP está ativado, mas sua empresa de hospedagem na web pode alterar isso para você.

Às vezes, como solução alternativa, as permissões de arquivo e pasta são alteradas para 0777, mas isso coloca o site em um estado vulnerável e as permissões de arquivo 0777 geralmente devem ser evitadas.

Se sua empresa de hospedagem na web não pode ativar o suPHP ou FastCGI, a única outra opção pode ser encontrar uma nova empresa de hospedagem na web.

5. Espaço em Disco

Verifique se você não excedeu sua cota de espaço em disco.

LISTA DE VERIFICAÇÃO DE PROBLEMAS

Quais são as melhores práticas recomendadas para definir permissões e propriedades no Joomla em sistemas Linux?

Veja 1 e 4.

Não é possível transferir arquivos para o servidor usando programas como o WinSCP.

Veja 1, 2, possivelmente 4 e 5.

Não é possível instalar extensões, plugins etc. do Joomla

Veja 1, 2, 3, 4 e 5.

Arquivos e pastas inseguros devido a permissões perigosas e configurações de propriedade.

Veja 1 e 4.

Neil Robertson
fonte
11
No meu caso, acho que os manipuladores de PHP foram uma grande parte do problema.
TryHarder
11
+1 Sua resposta não resolveu meu problema, mas me inspirei para verificar as configurações de PHP dos meus servidores - Modo de Segurança e ele estava ativado -. Portanto, desligá-lo foi a solução. Assim, para os futuros leitores, se nenhuma das opções acima fixa-lo, verificar o seu modo de segurança, bem :)
Mohammed Joraid
12

Por favor, verifique os níveis de permissão, deve ser 644 e 755 para arquivos e pastas, respectivamente.

Muitas vezes, os níveis de permissão são bons, mesmo quando alguns problemas são enfrentados. Isso significa que você terá que verificar a propriedade e o grupo dos arquivos e pastas específicos . Normalmente, o grupo e a propriedade podem ser alterados para www-data para apache (usado em servidores Web baseados no Ubuntu).

Sinta-se livre para conferir este interessante documento do Joomla com base na verificação das permissões do arquivo.

Shyam
fonte
O Joomla geralmente pertence ao grupo www-data?
TryHarder 23/04
11
Juntamente com a resposta de Shyam, usamos o módulo SuPHP Apache . Descobrimos que, quando uma extensão era instalada, não era possível modificar esses arquivos pelo FTP e vice-versa (problema de propriedade do arquivo). O SuPHP corrigiu isso para nós, garantindo que os scripts PHP rodassem com as permissões de seus proprietários.
Zachary Draper
11
O processo apache é executado em 'www-data', um grupo unix. Não é apenas o joomla, todos os aplicativos baseados em apache.
Shyam 23/04
É possível desenvolver e executar um script de shell para corrigir automaticamente todas as permissões de arquivo?
NivF007
11
Sim. gist.github.com/ssv445/11204300 Você pode executar o script no cron.
Shyam 23/04
8

Uma solução fácil para mim é deixar o PHP rodar no modo CGI (rápido) e definir a propriedade do diretório Joomla para o usuário do FTP. Então você poderá fazer upload e substituir arquivos via FTP e o Joomla também poderá gravar arquivos.

Uma maneira de fazer isso em um ambiente de hospedagem compartilhada (se for permitido) é adicionar algo assim ao seu arquivo .htaccess:

AddHandler php53-cgi .php

Veja também uma visão geral sobre os diferentes modos .

fruppel
fonte
7

As permissões devem ser 644 e 755, conforme explicado por Shyam.

No Joomla, você pode evitar todos os problemas mencionados, com os seguintes métodos.

Não é possível transferir arquivos para o servidor usando programas como o WinSCP.

  • Isso pode acontecer devido à permissão de (444) como o Joomla configuration.phptem essa permissão, que não permite por padrão (por segurança).
  • Outra situação para esse mesmo erro é quando você transfere um site ou pastas de um servidor para outro.

Não é possível instalar extensões, plugins etc. do Joomla

  • Isso acontecerá devido à temp/logpermissão incorreta da pasta. (Exigia 755)

  • Ou outro motivo para o temp/logcaminho estar erradoconfiguration.php

Arquivos e pastas inseguros devido a permissões perigosas e configurações de propriedade.

  • Isso é mais importante que o Joomla sempre recomenda não usar o 777 para arquivo e pasta, se você não estiver ciente disso .

Espero que ajude ..

Jobin Jose
fonte
7

As permissões devem ser 644 e 755, conforme explicado por Shyam.

Os problemas que você está enfrentando provavelmente estão relacionados à maneira como o servidor está configurado. Na maioria das vezes, isso acontece em hosts compartilhados nos quais o Apache é executado sob um usuário diferente da sua conta FTP. Como você normalmente carrega o Joomla usando FTP, o Apache não é o proprietário do arquivo e, portanto, não possui as permissões necessárias para alterá-lo.

Existe um modo FTP no Joomla que permite ignorar esse problema. Você pode habilitá-lo na configuração global do Joomla. Ele fará o acesso a todos os arquivos usando o usuário FTP em vez do usuário comum do Apache.

Uma maneira melhor, no entanto, é pedir ao seu host para corrigir o problema. Eles podem configurar o PHP (Apache) para executar sob um usuário especial, que nesse caso deve ser seu usuário de FTP. Então tudo vai funcionar bem.

Bakual
fonte
O usuário / grupo é a resposta, como você disse que ter um usuário especial para o PHP resolve isso especialmente se ele coincidir com o usuário do FTP.
jackJoe
5

Sim, as permissões devem ser 644 e 755, conforme explicado por Shyam , mas os outros pôsteres esquecem de mencionar que isso ocorre se o arquivo pertencer ao seu servidor da web e o grupo ao qual você pertence.

Por exemplo, no FileZilla, você verá permissões parecidas com esta:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

As permissões drwxr-xr-x são 755 (apenas ignore o dr principal, portanto é wxr-xr-x). As permissões de leitura valem 4, as permissões de gravação valem 2 e as permissões de execução valem 1 .. portanto, todas elas somam 7, e é isso que o proprietário deste arquivo possui. O grupo possui permissões de leitura e execução, mas não gravação, portanto, elas têm 5 e todos também têm 5 .. tornando as permissões 755.

754 seriam proprietários que liam, escreviam, executavam. Grupo com leitura e execução e todos com apenas permissões de leitura.

No exemplo acima, você pode ver que o proprietário do arquivo é www-data (que é o grupo de servidores Web padrão para muitos servidores Apache) e o grupo é o grupo myGroup, que é o grupo (administradores) ao qual pertenço.

O primeiro número são as permissões dos proprietários, o segundo são as permissões dos grupos e o terceiro número são as permissões de todos. Obviamente, você deve ter cuidado para conceder ao servidor da Web as permissões necessárias ... e garantir que os arquivos que precisam ser bloqueados não possam ser gravados ou executados por qualquer pessoa (o terceiro número). Abaixo está o que os números significam:

Supondo que o servidor da Web possua os arquivos, seu administrador está no grupo e, é claro, todo mundo é o terceiro número.

644: os arquivos com permissões definidas para 644 são legíveis por todos e graváveis ​​apenas pelo proprietário do arquivo / pasta.

755: Os arquivos com permissões definidas para 755 são legíveis e executáveis ​​por todos, mas somente graváveis ​​pelo proprietário do arquivo / pasta.

777: Arquivos com permissões definidas para 777 são legíveis, graváveis ​​e executáveis ​​por todos. Não use esse conjunto de permissões, por motivos de segurança, no servidor da web, a menos que seja absolutamente necessário e apenas temporariamente. É um desastre esperando para acontecer, especialmente se um diretório tiver essas permissões .. significa que qualquer pessoa pode fazer upload de arquivos e executá-los.

Aqui estão os comandos do Linux para configurar o Joomla! permissões recomendadas na linha de comando. Permissões de arquivo Joomla recomendadas

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

NOTA - muitas pessoas mostrarão esses comandos sem o caminho, mas eu prefiro SEMPRE usar o caminho completo, porque se você esquecer de mudar os diretórios para o Joomla raiz! diretório de instalação e execute-os sem o caminho, você acabou de alterar as permissões para cada arquivo e diretório nesse diretório superior e criou uma enorme bagunça.

Depois de executar esses comandos, você precisará corrigir as permissões de todos os diretórios que precisam de mais permissões ... por exemplo ... usuários que carregam imagens etc.

SE VOCÊ USAR SOMENTE O JOOMLA! interface e você não tem acesso de administrador ou FTP ao servidor, USE A PROPRIEDADE e PERMISSÕES ACIMA.

PARE AQUI SE VOCÊ É NOVATO. O Abaixo é apenas para pessoas que realmente entendem o que permissões e propriedade fazem.

No entanto, acho que ter a propriedade e as permissões dessa maneira é muito impraticável, porque gosto de usar o FileZilla e uma linha de comando da sessão do Terminal na maioria das vezes, e carrego muitos arquivos manualmente. Mas não posso sobrescrever nenhum arquivo porque não os possuo e não tenho permissão para escrever. Eu poderia ter o FileZilla logado na conta do servidor web, MAS ... Eu quero que o FileZilla efetue login na minha conta, para que eu possa procurar outros diretórios também, não apenas os arquivos que o servidor da web tem acesso ... SO ... Eu mudo a propriedade e as permissões para isso:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Sou o proprietário e coloco o servidor Web no grupo ... e altero as permissões dos diretórios para 775 e dos arquivos para 664. Torna minha vida muito mais fácil ... mas não a recomendo. todos.

Se você fizer do meu jeito, estes são os comandos:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  
bgies
fonte
"drwxr-xr-x são 755" - este seria 751 (faltando perm leitura para o público), não 755. (Embora 755 seria mais "normal" para diretórios.)
MrWhite
4

As outras respostas fornecem uma boa explicação do que deve ser feito. Quero adicionar apenas um script para corrigir as permissões se você já fez o upload de um componente e não pode acessar os arquivos com o ftp.

Nesse caso, eu faria o upload desse arquivo fix.phppara o servidor FTP e o abriria no navegador:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Este script define todas as permissões do arquivo para 666 e todos os diretórios para 777. Gravável mundialmente não é o melhor conjunto de permissões para um host compartilhado, mas você poderá acessar seus arquivos novamente e poderá defini-lo com os valores corretos com o FTP.

Harald Leithner
fonte
1

Tarde para a festa. Eu vim aqui procurando, assim como em outros lugares, um guia definitivo sobre quais pastas precisam ser gravadas no joomla.

Desculpe pessoal por ser o prenúncio de más notícias.

O conselho para usar as permissões 755 para todos os diretórios e 644 para todas as pastas é irresponsável, no mínimo .

Tornar o proprietário de todas as suas pastas e arquivos gravável é bom, desde que o proprietário não seja o servidor da web (apache et al).

Sei que essa é uma prática recomendada comum, mas posso garantir que não é uma boa prática. O último software que você deseja gravar em pastas é o próprio servidor da web. É o servidor da web usado por hackers para tirar proveito dessa exploração que ainda não foi corrigida (ou mesmo encontrada).

Você acha que .htaccess salvará seu Kevin? Esqueça, porque você permitiu o acesso de gravação do servidor da Web, nossos queridos amigos hackers podem criar seus próprios arquivos .htaccess, dando a eles as permissões que quiserem! como Oh, eu não sei, Umm faz com que os arquivos .jpg sejam executados pelo servidor. E você pensou que proteger contra a execução de .php cobriria seu A.

Mas verifique se apenas as pastas que requerem acesso de gravação o possuem. 755 e 644 para as seguintes pastas.

public_html/images
public_html/cache
public_html/tmp

E desative os arquivos .htaccess com o AllowOveride none para todas as pastas graváveis ​​(como as acima)

Para aqueles em hospedagem compartilhada, boa sorte, pois esse é um elemento de configuração que você não pode controlar.

Não pense que fazer o arquivo .htaccess somente leitura ajudará. Se nossos amigos hackers puderem criar uma nova pasta (eles podem), eles poderão criar seu próprio .htaccess.

Para aqueles que executam hospedagem compartilhada por tudo que é sagrado, obtenha uma pista sobre segurança.

Se você não entende de segurança, saia do negócio de hospedagem que está dificultando o resto de nós.

Agora, de volta à minha busca pelo guia definitivo sobre pastas que precisam de acesso de gravação ...

DesenvolvedorChris
fonte
Obrigado Chris, mas provavelmente vou manter as permissões de arquivo padrão 755 e 644, embora isso seja recomendado pelo site oficial do Joomla e especialistas em segurança como Sucuri: docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ ...
Neil Robertson
Sim, eu sei que é o "recomendado", mas uma vez que você tenha sido explorado e resolvido por que foi explorado, posso garantir que você jogue as "recomendações" pela janela e comece do zero. As recomendações são o caminho de menor resistência. Não é o mais seguro.
DeveloperChris
As etapas 1 a 10 da lista "Mantendo um site Joomla seguro" em joomla.stackexchange.com/a/180/120, juntamente com as permissões de arquivo padrão, têm funcionado bem nos 50 sites mais procurados pelo últimos anos. Sua milhagem pode variar, é claro.
Neil Robertson
@NeilRobertson Concordo com essa lista, mas se houver uma exploração que não seja capturada por isso, sua última linha de defesa é não conceder permissões de gravação ao servidor da web (apache et al). A propósito, isso não é um conselho específico do Joomla. Além disso, a maioria das pessoas não pode implementar muitas das recomendações nessa lista. Eles simplesmente não têm os recursos ou estão usando hospedagem mais barata (e não a mais barata).
DeveloperChris