Eu sei que as permissões de arquivo já foram abordadas aqui antes, mas estou lutando para entender o conceito do meu cenário.
- Criei os arquivos em uma instalação antiga do ubuntu.
- Copiei os arquivos para minha nova instalação do ubuntu e os coloquei no meu webroot.
- Quando tento executar os arquivos (eles são arquivos PHP), recebo um erro relacionado às permissões
em uma tentativa de corrigir isso, presumi que eles ainda devessem pertencer ao proprietário anterior; portanto, corri chown -R
no diretório, com meu nome de usuário como argumento, a fim de assumir a propriedade de todos os arquivos no diretório. Deve-se notar que os nomes de usuário 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ões. Alguém pode me dizer que outras medidas devo tomar?
O webroot para minha instalação do apache está dentro da minha pasta pessoal. Se eu criar novos arquivos no meu webroot, eles também funcionarão conforme o esperado, são apenas os arquivos antigos que estão causando o problema.
fonte
chmod -R 777 dir
no diretório em questão. Eu não posso deixar de pensar theres uma maneira melhor de fazê-lo emboraRespostas:
Os diretórios acima de seu webroot devem ter o bit de execução definido para permitir que o Apache desça nos diretórios.
Se você tiver seu webroot localizado na
/home/user/htdocs
, o/
,/home
,/home/user
e/home/user/htdocs
deve ter o conjunto bit de execução.A solução acima "funciona", mas não é o ideal. Se você criou uma pasta, o Apache não pode gravar nela. O inverso também acontece.
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 criados recentemente sejam graváveis pelo grupo.
Como alternativa, você pode instalar um Apache MPM: Apache2 MPM ITK ( informações sobre configuração ) e ajustar a configuração para que o Apache seja executado sob seu usuário.
fonte
Se os documentos do servidor estiverem no
/home/$USER/public_html
diretório, você precisará executarpara dar a propriedade da pasta DocumentRoot ao usuário
www-data
e grupowww-data
.Então você pode se adicionar ao grupo
www-data
Por fim, você precisa tornar a pasta DocumentRoot gravável pelo proprietário (usuário de dados www) e por si próprio (como parte do
www-data
grupo):Por conveniência, você pode criar um script nomeado
public_html_fix.sh
com o conteúdo:Salve-o por dentro
/home/$USER/bin
e torne-o executável usando:Você pode chamá-lo sempre que precisar, de qualquer lugar do sistema de arquivos que se encontre assim:
fonte
www-data
grupo leiam seus arquivos ou gravem para esse assunto?chmod -R 775 /home/$USER/public_html
realmente terrível.find /home/$USER/public_html -type d -exec chmod 775 {} \;
efind /home/$USER/public_html -type f -exec chmod 664 {} \;
é muito melhorAlém de chmodar arquivos e editar arquivos .conf do apache, quero dizer que nada funcionou para mim porque meus arquivos estavam em uma partição que eu havia 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 usuário que execute o apache (executeps -aux | grep apache2
para verificar), execute o seguinte comando:e tente ler um arquivo da raiz do documento.
Se o arquivo não estiver legível, verifique se:
1) você definiu todas as outras permissões de arquivo
2) você usou
FollowSymlinks
em seus.conf
arquivos, se necessário3) 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 através do seu UUID:Em seguida, desmonte sua partição via nautilus e faça a
sudo mount -a
. Se tudo correr bem, seus arquivos estão agora em baixo/mnt
. Atualize seus links simbólicos e pronto.fonte
A melhor maneira que eu encontrei para sempre configurar isso é a maneira como o VirtualMin faz isso.
criar usuário e grupo "myhome"
Faça do usuário apache um membro do grupo "myhome". Não o contrário, como algumas das explicações aqui descrevem
Então agora o apache leu e executou o acesso a / home / myhome, além de / home / myhome / www
O usuário "myhome" possui acesso de gravação
fonte
www-data
pertence ao grupomyhome
. Todos os arquivos e diretórios têm permissões de gravação em grupo e pertencemmyhome:myhome
. Eu reiniciei o apache. O Apache ainda não pode gravar novos arquivos e pastas. (Script PHP usando www-data: usuário / grupo www-data)