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?


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 

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.


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

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

5
Vous pouvez également utilisera2enmod userdir
Joril
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.