Como alterar a permissão padrão para arquivos carregados no apache com webroot montado?

1

Eu tenho um servidor Ubuntu 11.10 com o apache 2.2.20, php 5.3.6 e uma instalação do Joomla cms. Eu usei um disco rígido extra como armazenamento de servidor da Web e o coloquei em / data / www / (espero que não seja o meu problema).

Eu configurei a permissão de todos os arquivos e pastas em minha raiz da web para 755 e os grupos de usuários para eles estão configurados para [usuário padrão do ubuntu (no meu caso, rádio)]: www-data.

Nos últimos dias, tive sérios problemas com o joomla não mostrando novas imagens enviadas e outros arquivos e também não consigo instalar nenhuma extensão. Depois de horas de pesquisa, descobri que os arquivos enviados não têm permissão apropriada (eles são -rw -------) e o aplicativo Joomla não pode ler, copiar ou movê-los após o upload.

Gostaria de saber como definir uma permissão padrão para que todos os arquivos que eu carregue a usem?

PS: Eu testei umask mas não fez nada. Eu acho que não tem nada a ver com o meu problema.

    
por Farid Rn 17.05.2012 / 23:57

3 respostas

2

Você mencionou que tentou umask e não funcionou, mas seu problema soa exatamente como um umask. Talvez você possa revisitar isso?

Existem duas armadilhas que você pode ter encontrado que poderiam ter resultado em você achar que umask não era o problema:

  • Você precisa alterar o umask do usuário que está enviando os arquivos, na maioria dos casos em seu próprio servidor (em vez de hospedagem compartilhada), este será o usuário do servidor web; www-data no Ubuntu.
  • Você deve alterar o umask para o usuário nos scripts de login ou no script de inicialização do apache, simplesmente executá-lo enquanto estiver em uma sessão SSH não afetará nada, pois ele estará ativo somente para essa sessão.

Observe que a permissão de leitura de grupo / mundo em arquivos de propriedade da www data é ruim - qualquer outro aplicativo da web (basicamente qualquer coisa no servidor) poderá ler coisas como arquivos de configuração com senhas de banco de dados etc. é mod_suexec mas depois você precisa configurar o PHP no modo CGI e o Apache MPM worker, é um pouco mais complicado.

    
por 20.05.2012 / 05:37
0

Nenhuma ideia sobre o Joomla ou as restrições que você pode estar lidando em uma VM, mas que tal algo como:

sudo chown -R www-data:www-data /data/www
sudo chmod -R g+rws /data/www

Isso define recursivamente o usuário: group para www-data: www-data usando chown, e g + s parte da instrução chown garante que os arquivos gravados por qualquer usuário permitido mantenham o GUID (Owner's Group). R e w são as habituais permissões de leitura e escrita.

Isso é o que eu uso no Ubuntu / Apache, mas acredito que também é possível fazer o mesmo com o usuário (SUID). Talvez outra pessoa possa participar se eu tiver a sintaxe errada, mas acredito em algo como:

sudo chown -R www-data:www-data /data/www
sudo chmod -R ug+rws /data/www

definirá leitura / gravação apenas para usuário e grupo e forçará os arquivos a terem o grupo www-data: www-data user:

.

No entanto, leia o SUID e o GUID, pois, ao fazer isso, você concede a outros usuários as permissões do www-data. A outra ressalva é que, se sua unidade estiver montada com o sinalizador de nosuid, nada disso funcionará.

    
por 20.05.2012 / 02:18
0

Já experimentou o ACL (Access Control Lists)? Eles permitem que os arquivos sejam criados para uma permissão de arquivo específica em um diretório específico. Eu acredito que é menos global do que algo como umask que eu acredito que é definido em um nível global (alguém, por favor, me corrija se eu estiver errado na seção de comentários abaixo). Aqui está um link para uma resposta mostrando como definir a lista de controle de acesso em um diretório link .

    
por 05.11.2013 / 05:17