Apache ligado por links simbólicos ao diretório inicial - Erros de permissão

14

estou tendo alguns problemas para criar links para o meu /var/www/ em um novo diretório Webroot dentro da minha pasta pessoal. Eu acho que isso vem da minha falta de compreensão das permissões do Linux.

Tanto quanto eu estou ciente, links simbólicos devem tomar a forma do diretório que você deseja vincular e o diretório que você deseja vincular, então, no meu caso, eu corri:

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

isso meio que funcionou, se eu executar ls on /var/www/ eu posso ver todos os arquivos no meu diretório Webroot .

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

Se este for o caso, isso significaria que eu preciso alterar as permissões de cada arquivo que eu criei para executá-lo?

Eu já executei uma instância do apache local apontando minha raiz do diretório do meu vhost padrão para a pasta Webroot , nesta instância eu não precisei alterar nenhuma permissão. Qualquer ajuda seria apreciada.

    
por richzilla 21.11.2010 / 16:43

5 respostas

14

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

1). ative o módulo apache userdir.

sudo  a2enmod userdir

isto ativará o módulo userdir do apache. Agora você pode colocar o conteúdo do site em ~/Webroot/ ou o que estiver dentro do seu diretório pessoal.

Observação: 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 em seu navegador para link . Você também pode definir um host virtual para este site.

Se você estiver olhando para executar arquivos php você precisa fazer mais um passo

edite o /etc/apache2/mods-enabled/php5.conf e 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. Você está feito.

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

Espero que isso ajude. Se você tiver alguma dificuldade, sinta-se à vontade para postar aqui.

    
por aneeshep 22.11.2010 / 07:01
6

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

Se você estiver usando PHP, você pode querer dar uma olhada em suexec , suphp ou php-fpm e fastcgi .

Você está certo sobre o seu problema, isso é um problema de permissão no fato de que seus arquivos Webroot são de propriedade de um usuário diferente de www-data .

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

Altere sua pasta, subpastas e arquivos Webroot para que a propriedade do grupo seja definida como www-data e defina as permissões adequadas:

# 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 normal.

    
por Weboide 21.11.2010 / 17:42
1

Eu fiz quase a mesma coisa com o Debian Lenny, mas mudei para o modo non-hax, configurei o apache corretamente. Mas com 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

Acho que você deve verificar a permissão do ~ e do ~ / Webroot , acho que seu diretório (~) está protegido contra leitura Quer dizer, você tem que rodar isso:

$ 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ê, para sair do Webroot do seu dir, ex. para / home como eu , porque pode ser um problema de segurança.

"#" significa root permisson , ex. escreva sudo antes dos comandos; "$" significa usuário único permisson

    
por antivirtel 21.11.2010 / 17:42
0

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

    
por zVictor 16.05.2011 / 20:25
0

Eu fui confrontado com esse problema. Mas eu não gostei da ideia de mudar o grupo do meu diretório home para www-data. Esse problema pode simplesmente ser resolvido modificando o arquivo de configuração para o virtualHost. Basta configurar a tag Directory para incluir estes

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

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

Consulte esta página para referência: link

    
por Peter 14.10.2013 / 11:57