Apache не может получить доступ к папкам в моем домашнем каталоге

29

Я изменил конфигурацию Apache, чтобы она указывала на папку в моем домашнем каталоге:

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

Я даже дал свое /home/dbugger/htmlразрешение 777. Но я продолжаю получать одно и то же сообщение об ошибке по адресу http://localhost: «403 Forbidden»

Чего мне не хватает?

Энрике Морено Палатка
источник
Как насчет /home/dbuggerразрешения?
Эрик Карвалью,
Вы имеете в виду, что я должен создать 777 всей моей домашней папки? Это кажется переусердствовавшим. Даже создание 777 HTML не является безопасным решением. Я просто делаю это, чтобы попытаться определить корень проблемы.
Энрике Морено Палатка
1
apache запускается как пользовательские www-данные. Если этот пользователь не имеет разрешения на исполнение в вашем доме, apache не сможет прочитать какой-либо файл.
Эрик Карвалью
Разве нет способа добавить подпапку моего домашнего каталога в www-данные без ее предоставления для полного доступа к домашней папке? Следуя этой логике, мне кажется, что я должен был бы также предоставить доступ ко ВСЕМ ДОМАШНЫМ папкам, как и к / home. Это кажется слишком много
Энрике Морено Палатка

Ответы:

25

Это сработало для меня

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

Важным моментом было изменить

Order allow, deny

в

Require all granted 
szydan
источник
Вы экономите мое время, мне не нужно менять разрешение
khaled_webdev
Привет, я рад, что это помогло тебе
szydan
3
Я взял на себя смелость посмотреть, что такое «требуют все предоставленные», и обнаружил, что это «новый эквивалент», Allow from allначиная с Apache 2.4 и выше - serverfault.com/questions/549517/…
Programster
8
Нет, предоставление доступа ко всему корню никогда не является хорошей идеей!
bjunix,
9
Установка AllowOverrideв Allвашем корневом каталоге в лучшем случае безрассудна! См. Httpd.apache.org/docs/2.4/mod/core.html#allowoverride для получения подробной информации.
Бомба
19

Включить userdirмодуль:

sudo a2enmod userdir 

Разрешить выполнение PHP в пользовательском каталоге:

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

(Или, например, с использованием php7.0)

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

Прокомментируйте эту часть (ставьте #в начале каждой строки):

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

Нажмите Ctrl+, Xчтобы сохранить

Включить список каталогов:

sudo nano /etc/apache2/apache2.conf

Добавь это:

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

Нажмите Ctrl+, Xчтобы сохранить


Перезапустите Apache ( sudoтребуется здесь также):

sudo service apache2 restart

Теперь поместите ваши php-файлы в /home/yourname/public_htmlкаталог и перейдите
http://localhost/~yournameиз вашего веб-браузера.

dgreene
источник
11

Apache работает как пользователь www-data. Если у вас нет разрешения на выполнение в вашем доме, apache не сможет прочитать ни одного файла.

Измените свою домашнюю группу на www-data:

chgrp www-data /home/dbugger

И дайте ему разрешение только пройти через ваш домашний каталог:

chmod g+x /home/dbugger

Вы также можете ограничить разрешения /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Эрик Карвалью
источник
Могу ли я сделать это, но вместо того, чтобы /home/dbuggerиспользовать /home/dbugger/html?
Энрике Морено Палатка
Вы также можете применить это разрешение /home/dbugger/htmlвместо 777, но вы должны иметь в виду, что если пользователь www-данных cdне сможет попасть к вам домой, он не сможет получить доступ к какому-либо файлу или подпапке. Таким образом, если у вас есть разрешение rwx------ dbugger:dbuggerна доступ к дому, apache не сможет получить доступ к файлам внутри вашего дома. Если вы не хотите немного ограничивать доступ, попробуйте дать только разрешение на выполнение ( chmod g+x /home/dbugger), я не уверен, но я думаю, что это работает.
Эрик Карвалью
Извините, но ни одно из этих решений не сработало :(
Энрике Морено Палатка
chgrp www-data /home/dbuggerв сочетании с методом @DavidGreene заставил его работать на меня
Laurent
Также можно добавить свою группу пользователей к пользователю apache (www-data) sudo usermod -a -G dbugger www-data, после этого вам нужно перезапустить apache.
TIIUNDER
1

Вам не нужно менять разрешения, если вы хотите использовать свой домашний каталог для размещения среды разработки, по крайней мере, вам нужны разрешения на запись для некоторых приложений. Вам нужен модуль apache mod_userdir, и вы можете получить доступ к / home / user_name / public_html / * как этот http: //domain.local/~user_name/dir_name/ * для использования виртуальных хостов, чтобы использовать модуль mod_userdir, вам нужно создать sym ссылка, как это:

$ 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
источник
5
Вы также можете использоватьa2enmod userdir
Joril