Apache vinculado ao diretório inicial - Erros de permissão

15

estou tendo alguns problemas para direcionar meu link /var/www/para um novo Webrootdiretório dentro da minha pasta pessoal. Eu acho que estes resultam da minha falta de compreensão das permissões do Linux.

Tanto quanto sei, os links simbólicos devem assumir a forma do diretório que você deseja vincular e do diretório ao qual você deseja vincular; portanto, no meu caso, executei:

sudo ln -s ~/Webroot/* /var/www/

isso tem espécie de trabalhado, se eu correr lsem /var/www/i pode ver todos os arquivos no meu Webrootdiretório.

Sempre que tento executar um arquivo que está na minha Webrootpasta, recebo um erro de permissão 403, isso ocorre porque os arquivos no meu diretório Webroot são criados por mim e a instância do apache está sendo executada como www-data?

se for esse o caso, isso significa que eu preciso alterar as permissões em todos os arquivos criados para executá-lo?

Anteriormente, eu executei uma instância local do apache, apontando a raiz do diretório do meu vhost padrão para a Webrootpasta; nesse caso, não precisei alterar nenhuma permissão. Qualquer ajuda seria apreciada.

richzilla
fonte
você verificou se o apache não está configurado para não seguir links simbólicos .... Eu tive esse problema uma vez. um tópico relacionado em outro fórum pode estar aqui: linuxforums.org/forum/servers/…
RobotHumans

Respostas:

15

Esta não é uma boa prática, concordo com o Weboide. Mas existe uma maneira simples de atingir esse objetivo.

1) ative o módulo apache userdir.

sudo  a2enmod userdir

isso ativará o módulo apache userdir. Agora você pode colocar o conteúdo do site ~/Webroot/dentro do diretório inicial.

Nota: A pasta padrão é ~/public_html

2) Faça as alterações necessárias em /etc/apache2/mods-enabled/userdir.conf.

3) Reinicie o apache

sudo /etc/init.d/apache2 restart

Agora você pode acessar o site navegando no seu navegador para http: // endereço IP / ~ nome de usuário . Você também pode definir um host virtual para este site.

Se você deseja executar arquivos php, precisa executar mais uma etapa

edite /etc/apache2/mods-enabled/php5.confe comente as seguintes linhas:

 <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Em seguida, reinicie o apache.

É isso aí. Você terminou.

Ref: https: //wiki.ubuntu.com/UserDirectoryPHP

Espero que isto ajude. Se você tiver alguma dificuldade, sinta-se à vontade para publicá-lo aqui.

aneeshep
fonte
7

Esta não é uma boa prática para alcançar o que você deseja.

Se você estiver usando PHP, poderá dar uma olhada no suexec , suphp ou php-fpm e fastcgi .


Você está certo sobre o seu problema. Esse é um problema de permissão, pois seus Webrootarquivos pertencem a um usuário diferente www-data.

Aqui está uma solução não tão ruim para solucionar seu problema. Observe que você provavelmente precisará usar o sudo ou fazer login como root. Certifique-se de entender completamente todos os comandos que você estará executando!

Altere sua Webrootpasta, subpastas e arquivos para ter a propriedade do grupo definida www-datae definir as permissões apropriadas:

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

Editar: Observe que você certamente precisará executar esses comandos novamente se adicionar arquivos / pastas usando sua conta de usuário comum.

Weboide
fonte
2

Fiz quase o mesmo com o Debian Lenny, mas mudei para o modo não-hax, configurei o apache corretamente. Mas com o link simbólico:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

Eu acho que você deve verificar a permissão do ~ e do ~ / Webroot , acho que seu dir (~) está protegido contra leitura, quero dizer, você deve executar o seguinte:

$ ls -la /home

Para definir as permissões corretas, use:

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

Acho que deveria ajudar, mas me dê mais informações sobre isso. Eu sugiro que você tire o Webroot do seu diretório, ex. a / home como eu , porque pode ser problema de segurança.

"#" significa permissão de raiz , ex. escreva sudo antes dos comandos; "$" significa permissão de usuário único

antivirtel
fonte
0

Você deve verificar as permissões não apenas sobre o seu destino, mas também sobre os pais.

zVictor
fonte
Por quê? Isso é uma limitação do Apache ou uma limitação do sistema de arquivos?
Flimm
Desculpe. Não verifiquei as informações, são apenas baseadas em uma experiência pessoal.
ZVictor
0

Fui confrontado com este problema. Mas não gostei da ideia de alterar o grupo do meu diretório pessoal para www-data. Esse problema pode ser resolvido simplesmente modificando o arquivo de configuração do virtualHost. Basta configurar a tag Directory para incluir esses

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

O Require all grantedé um novo recurso, eu acho; tendo um valor padrão de denied.

Consulte esta página para referência: http://httpd.apache.org/docs/current/mod/core.html#directory

Pedro
fonte