O Apache não pode acessar pastas no meu diretório pessoal

29

Alterei a configuração do Apache para apontar para uma pasta no meu diretório pessoal:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Eu até dei minha /home/dbugger/htmlpermissão 777. Mas continuo recebendo a mesma mensagem de erro em http://localhost: "403 Proibido"

O que é que estou perdendo?

Tenda Enrique Moreno
fonte
E a /home/dbuggerpermissão?
Eric Carvalho
Você quer dizer que eu deveria criar 777 em toda a minha pasta pessoal? Isso parece exagerar. Mesmo fazendo 777 o html não é uma solução segura. Estou apenas fazendo isso para tentar identificar a raiz do problema.
Enrique Moreno Tent
1
O apache é executado como usuário www-data. Se esse usuário não tiver permissão de execução em sua casa, o apache não poderá ler nenhum arquivo.
Eric Carvalho
Não existe uma maneira de adicionar uma subpasta do meu diretório pessoal aos dados www sem que ele tenha acesso completo à pasta pessoal? Seguindo essa lógica, parece que eu teria que dar acesso a todas as pastas da HOME, bem como teria que dar acesso a / home. Isso parece demais
Enrique Moreno Tent

Respostas:

25

Isso funcionou para mim

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>

O importante foi mudar

Order allow, deny

para

Require all granted 
szydan
fonte
você salvar o meu tempo, eu não tenho a permissão de mudança
khaled_webdev
Oi eu estou contente que lhe ajudou
szydan
3
Tomei a liberdade de procurar o que "requer todos os concedidos" era e descobri que é o "novo equivalente" Allow from alldo apache 2.4 em diante - serverfault.com/questions/549517/…
Programster
8
não, conceder acesso a toda a raiz nunca é uma boa ideia!
bjunix
9
Definir AllowOverridea Allna sua raiz diretório é imprudente no melhor! Consulte httpd.apache.org/docs/2.4/mod/core.html#allowoverride para obter detalhes.
Bombe
19

Ativar userdirmódulo:

sudo a2enmod userdir 

Ative a execução do PHP no diretório do usuário:

sudo nano /etc/apache2/mods-available/php5.conf  

(Ou se estiver usando o php7.0, por exemplo)

sudo nano /etc/apache2/mods-available/php7.0.conf

Comente esta parte (coloque #no início de cada linha):

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

Pressione Ctrl+ Xpara salvar

Ative a listagem de diretórios:

sudo nano /etc/apache2/apache2.conf

Adicione isso:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Pressione Ctrl+ Xpara salvar


Reinicie o apache ( sudonecessário aqui também):

sudo service apache2 restart

Agora coloque seus arquivos php no /home/yourname/public_htmldiretório e vá para o
http://localhost/~yournameseu navegador.

dgreene
fonte
11

O Apache é executado como usuário www-data. Se ele não tiver permissão de execução em sua casa, o apache não poderá ler nenhum arquivo.

Mude o grupo da sua casa para www-data:

chgrp www-data /home/dbugger

E dê permissão apenas para percorrer o diretório inicial:

chmod g+x /home/dbugger

Você também pode restringir as permissões de /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
fonte
Posso fazer isso, mas em vez de /home/dbuggerusar /home/dbugger/html?
Enrique Moreno Tent
Você também pode aplicar essa permissão ao /home/dbugger/htmlinvés do 777, mas lembre-se de que, se o usuário www-data cdnão puder acessar sua casa, ele não poderá acessar nenhum arquivo ou subpasta. Portanto, se sua permissão de casa for rwx------ dbugger:dbuggerapache, não será possível acessar nenhum arquivo dentro de sua casa. Se você não quiser restringir um pouco o acesso, tente dar apenas permissão de execução ( chmod g+x /home/dbugger), não tenho certeza, mas acho que funciona.
Eric Carvalho
Desculpe, mas nenhuma dessas soluções funcionou :(
Enrique Moreno Tent
chgrp www-data /home/dbuggerem combinação com o método @DavidGreene tenho que trabalhar para mim
laurent
Também é possível adicionar seu grupo de usuários ao usuário apache (www-data) sudo usermod -a -G dbugger www-data, depois disso você precisa reiniciar o apache.
TIIUNDER
1

Você não precisa alterar as permissões se quiser usar o diretório inicial para hospedar o ambiente de desenvolvimento, pelo menos que precise de permissões de gravação para alguns aplicativos. Você precisa do módulo apache mod_userdir e pode acessar / home / user_name / public_html / * como este http: //domain.local/~user_name/dir_name/ * para usar hosts virtuais, para usar o módulo mod_userdir é necessário criar um sym link como este:

$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/
$ sudo service apache2 restart
user1916831
fonte
5
Você também pode usara2enmod userdir
Joril