Problema de permissões: como o Apache pode acessar arquivos no meu diretório pessoal?

29

Eu sei que as permissões de arquivo foram cobertas aqui antes, mas estou lutando para entender meu conceito para o meu cenário.

  • Eu criei os arquivos em uma instalação antiga do Ubuntu.
  • Eu copiei os arquivos para a minha nova instalação do ubuntu e os coloquei em minha webroot.
  • Quando tento executar os arquivos (eles são arquivos PHP), recebo um erro relacionado a permissões

em uma tentativa de consertar isso, eu assumi que eles ainda deviam pertencer ao proprietário anterior, então eu corri chown -R no diretório, com meu nome de usuário como argumento, para apropriar-me de todos os arquivos no diretório. Deve-se notar que os nomes de usuários entre as instalações novas e antigas do Ubuntu eram os mesmos.

Quando tento executar os arquivos novamente, o mesmo problema: erro 500 devido a problemas de permissão. Alguém pode me dizer que outros passos devo dar?

A raiz da web da instalação do meu apache está dentro da minha pasta pessoal. Se eu criar novos arquivos em minha webroot, eles também funcionarão como esperado, sendo apenas os arquivos antigos que estão causando o problema.

    
por richzilla 17.02.2011 / 19:15

4 respostas

14

Os diretórios acima do webroot devem ter o bit de execução configurado para permitir que o Apache desça aos diretórios.

Se você tiver sua webroot localizada em /home/user/htdocs , o / , /home , /home/user e /home/user/htdocs deverá ter o bit de execução definido.

A solução acima "funciona", mas não é ideal. Se você criou uma pasta, o Apache não pode gravar nela. O inverso acontece também.

Isso pode ser "corrigido" configurando umask 0007 e adicionando-se ao grupo Apache (www-data, se não me engano), para que arquivos e pastas recém-criados sejam graváveis pelo grupo.

Alternativamente, você pode instalar um Apache MPM alternativo: Apache2 MPM ITK (info na configuração ) e ajuste a configuração para que o Apache seja executado sob seu usuário.

    
por Lekensteyn 17.02.2011 / 19:35
37

Se os documentos do seu servidor estiverem no diretório /home/$USER/public_html , você precisará executar

sudo chown -R www-data:www-data /home/$USER/public_html

para dar a propriedade da pasta DocumentRoot ao usuário www-data e group www-data .

Depois, você pode se adicionar ao grupo www-data

sudo adduser $USER www-data

Finalmente, você precisa tornar a pasta DocumentRoot gravável pelo proprietário (usuário de dados do www) e para você mesmo (como parte do grupo www-data ):

sudo chmod -R 775 /home/$USER/public_html

Por conveniência, você pode criar um script chamado public_html_fix.sh com conteúdo:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Salve dentro de /home/$USER/bin e torne-o executável usando:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Em seguida, você o chama sempre que precisar, de onde quer que esteja no sistema de arquivos, você se encontra assim:

public_html_fix.sh
    
por Marko 09.10.2011 / 02:28
1

Além de chmodar arquivos e editar arquivos apache .conf, eu quero dizer que nada funcionou para mim porque meus arquivos estavam em uma partição que eu tinha montado automaticamente via nautilus. Isso limita a partição apenas para seu usuário.

Para verificar se seus arquivos estão visíveis por www-root ou qualquer outro usuário que execute o apache (execute ps -aux | grep apache2 para verificar), execute o seguinte comando:

sudo su -l www-data -s /bin/bash

e tente ler um arquivo da raiz do seu documento.

Se o arquivo não for legível, verifique se:

1) você definiu todas as outras permissões de arquivo

2) você usou FollowSymlinks em seus arquivos .conf , se necessário

3) você configurou o DocumentRoot

3) monte sua partição para todos os usuários. Eu tive que editar /etc/fstab e especificar minha partição por meio de seu UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Em seguida, desmonte sua partição via nautilus e faça um sudo mount -a . Se tudo correr bem, seus arquivos estão agora em /mnt . Atualize seus links simbólicos e pronto.

    
por alexg 29.04.2015 / 20:02
1

A melhor maneira que eu encontrei para sempre configurar isso é o modo VirtualMin faz isso.

crie usuário e grupo "myhome"

Torne o usuário do apache um membro do grupo "myhome". Não o contrário, como algumas das explicações aqui descrevem

Agora, o apache leu e executou o acesso a / home / myhome, além de / home / myhome / www

O usuário "myhome" tem acesso de gravação

    
por user458431 07.10.2015 / 03:47