Apache ne peut pas accéder aux dossiers de mon répertoire personnel

29

J'ai changé la configuration d'Apache pour pointer vers un dossier dans mon répertoire personnel:

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

J'ai même donné ma /home/dbugger/htmlpermission 777. Mais je reçois toujours le même message d'erreur à http://localhost: "403 Interdit"

Qu'est-ce qui me manque?

Tente Enrique Moreno
la source
Et l' /home/dbuggerautorisation?
Eric Carvalho
Vous voulez dire que je devrais faire du 777 tout mon dossier personnel? Cela semble exagérer. Même faire du 777 en html n'est pas une solution sûre. Je le fais juste pour essayer d'identifier la racine du problème.
Enrique Moreno Tent
1
apache fonctionne en tant qu'utilisateur www-data. Si cet utilisateur ne dispose pas de l'autorisation d'exécution sur votre domicile, apache ne pourra lire aucun fichier.
Eric Carvalho
N'y a-t-il pas un moyen d'ajouter un sous-dossier de mon répertoire personnel au www-data sans l'avoir pour donner un accès complet au dossier personnel? Suivre cette logique semble que je devrais également donner accès à TOUS LES dossiers HOME, car je devrais lui donner accès à / home. Cela semble trop
Enrique Moreno Tent

Réponses:

25

Cela a fonctionné pour moi

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

L'important était de changer

Order allow, deny

à

Require all granted 
Szydan
la source
vous économisez mon temps, je n'ai pas à changer de permission
khaled_webdev
Salut, je suis heureux que cela vous ait aidé
szydan
3
J'ai pris la liberté de rechercher ce qu'était "exiger tout ce qui est accordé" et j'ai découvert qu'il s'agissait du "nouvel équivalent" d' Allow from allApache 2.4 - serverfault.com/questions/549517/…
Programster
8
Non, accorder l'accès à la racine entière n'est jamais une bonne idée!
bjunix
9
La configuration AllowOverridede Allvotre répertoire racine est au mieux téméraire! Voir httpd.apache.org/docs/2.4/mod/core.html#allowoverride pour plus de détails.
Bombe
19

Activer le userdirmodule:

sudo a2enmod userdir 

Activer l'exécution PHP dans le répertoire utilisateur:

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

(Ou si vous utilisez php7.0, par exemple)

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

Commentez cette partie (placée #au début de chaque ligne):

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

Appuyez sur Ctrl+ Xpour enregistrer

Activer la liste des répertoires:

sudo nano /etc/apache2/apache2.conf

Ajoute ça:

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

Appuyez sur Ctrl+ Xpour enregistrer


Redémarrez apache ( sudorequis ici également):

sudo service apache2 restart

Maintenant, mettez vos fichiers php dans le /home/yourname/public_htmlrépertoire et accédez à
http://localhost/~yournamepartir de votre navigateur Web.

dgreene
la source
11

Apache s'exécute en tant qu'utilisateur www-data. S'il n'a pas d'autorisation d'exécution sur votre domicile, apache ne pourra lire aucun fichier.

Changez le groupe de votre domicile en www-data:

chgrp www-data /home/dbugger

Et donnez-lui la permission de parcourir uniquement votre répertoire personnel:

chmod g+x /home/dbugger

Vous pouvez également restreindre les autorisations de /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
la source
Puis-je faire cela, mais au lieu d' /home/dbuggerutiliser /home/dbugger/html?
Enrique Moreno Tent
Vous pouvez également appliquer cette autorisation au /home/dbugger/htmllieu de 777, mais vous devez garder à l'esprit que si l'utilisateur www-data ne peut pas cdaccéder à votre domicile, il ne pourra accéder à aucun fichier ou sous-dossier. Donc, si votre autorisation de domicile est rwx------ dbugger:dbuggerapache, vous ne pourrez accéder à aucun fichier à l'intérieur de votre maison. Si vous ne souhaitez pas restreindre l'accès un peu, vous pouvez essayer de donner uniquement la permission d'exécution ( chmod g+x /home/dbugger), je ne suis pas sûr, mais je pense que cela fonctionne.
Eric Carvalho
Désolé mais aucune de ces solutions n'a fonctionné :(
Enrique Moreno Tent
chgrp www-data /home/dbuggeren combinaison avec la méthode @DavidGreene, ça a fonctionné pour moi
laurent
Il est également possible d'ajouter votre groupe d'utilisateurs à l'utilisateur apache (www-data) sudo usermod -a -G dbugger www-data, après quoi vous devez redémarrer apache.
TIIUNDER
1

Vous n'avez pas besoin de modifier les autorisations si vous souhaitez utiliser votre répertoire personnel pour héberger l'environnement de développement, au moins que vous avez besoin d'autorisations d'écriture pour certaines applications. Vous avez besoin du module apache mod_userdir et vous pouvez accéder à / home / user_name / public_html / * comme ceci http: //domain.local/~user_name/dir_name/ * pour utiliser un hôte virtuel, pour utiliser le module mod_userdir vous devez créer un sym lien comme celui-ci:

$ 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
la source
5
Vous pouvez également utilisera2enmod userdir
Joril