Apache no puede acceder a las carpetas en mi directorio de inicio

29

He cambiado la configuración de Apache para apuntar hacia una carpeta en mi directorio de inicio:

<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>

Incluso he dado mi /home/dbugger/htmlpermiso 777. Pero sigo recibiendo el mismo mensaje de error en http://localhost: "403 Prohibido"

¿Qué es lo que me estoy perdiendo?

Tienda Enrique Moreno
fuente
¿Qué pasa con el /home/dbuggerpermiso?
Eric Carvalho
¿Quiere decir que debería hacer 777 mi carpeta de inicio completa? Eso parece exagerar. Incluso hacer 777 el html no es una solución segura. Solo lo estoy haciendo para tratar de identificar la raíz del problema.
Tienda de Enrique Moreno
1
Apache se ejecuta como usuario www-data. Si ese usuario no tiene permiso de ejecución en su hogar, Apache no podrá leer ningún archivo.
Eric Carvalho
¿No hay una manera de agregar una subcarpeta de mi directorio de inicio a los datos de www sin tener que dar acceso completo a la carpeta de inicio? Siguiendo esa lógica parece que tendría que dar acceso a TODAS las carpetas de HOME también, ya que tendría que darle acceso a / home. Eso parece demasiado
Tienda de Enrique Moreno

Respuestas:

25

Esto funciono para mi

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

Lo importante era cambiar

Order allow, deny

a

Require all granted 
szydan
fuente
me ahorras tiempo, no tengo que cambiar el permiso
khaled_webdev
Hola, me alegro de que te haya ayudado
szydan
3
Me tomé la libertad de buscar lo que era "exigir todo" y descubrí que es el "nuevo equivalente" de Allow from allapache 2.4 en adelante - serverfault.com/questions/549517/…
Programster
8
¡No, conceder acceso a toda la raíz nunca es una buena idea!
bjunix
9
Ajuste AllowOverridea Allen su raíz directorio es imprudente en el mejor! Consulte httpd.apache.org/docs/2.4/mod/core.html#allowoverride para más detalles.
Bombe
19

Habilitar userdirmódulo:

sudo a2enmod userdir 

Habilite la ejecución de PHP en el directorio de usuarios:

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

(O si usa php7.0, por ejemplo)

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

Comente esta parte (coloque #al comienzo de cada línea):

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

Presione Ctrl+ Xpara guardar

Habilitar listado de directorio:

sudo nano /etc/apache2/apache2.conf

Agrega esto:

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

Presione Ctrl+ Xpara guardar


Reinicie apache ( sudorequerido aquí también):

sudo service apache2 restart

Ahora ponga sus archivos php en el /home/yourname/public_htmldirectorio y vaya
http://localhost/~yournamedesde su navegador web.

dgreene
fuente
11

Apache se ejecuta como usuario www-data. Si no tiene permiso de ejecución en su hogar, apache no podrá leer ningún archivo.

Cambie el grupo de su hogar a www-data:

chgrp www-data /home/dbugger

Y déle permiso solo para recorrer su directorio de inicio:

chmod g+x /home/dbugger

También puede restringir los permisos de /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
fuente
¿Puedo hacer eso, pero en lugar de /home/dbuggerusar /home/dbugger/html?
Tienda de Enrique Moreno
También puede solicitar ese permiso en /home/dbugger/htmllugar de 777, pero debe tener en cuenta que si el usuario www-data no puede cdacceder a su hogar, no podrá acceder a ningún archivo o subcarpeta. Entonces, si el permiso de su casa es rwx------ dbugger:dbuggerapache, no podrá acceder a ningún archivo dentro de su casa. Si desea restringir un poco el acceso, puede intentar dar solo permiso de ejecución ( chmod g+x /home/dbugger), no estoy seguro, pero creo que funciona.
Eric Carvalho
Lo sentimos, pero ninguna de estas soluciones funcionó :(
Tienda de Enrique Moreno
chgrp www-data /home/dbuggeren combinación con el método @DavidGreene, funcionó para mí
Laurent
También es posible agregar su grupo de usuarios al usuario de apache (www-data) sudo usermod -a -G dbugger www-data, después de eso debe reiniciar apache.
TIIUNDER
1

No necesita cambiar los permisos si desea utilizar su directorio de inicio para alojar el entorno de desarrollo, al menos que necesita permisos de escritura para algunas aplicaciones. Necesita el módulo apache mod_userdir y puede acceder a / home / user_name / public_html / * de esta manera http: //domain.local/~user_name/dir_name/ * para usar un host virtual, para usar el módulo mod_userdir necesita crear un símbolo enlace 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
usuario1916831
fuente
55
También puede usara2enmod userdir
Joril