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 заборонено"

Чого я пропускаю?


А як щодо /home/dbuggerдозволу?
Ерік Карвальо

Ти маєш на увазі, що я повинен зробити 777 всю свою домашню папку? Це здається переборщити. Навіть зробити 777 HTML не є безпечним рішенням. Я просто роблю це, щоб спробувати визначити корінь проблеми.
Енріке Морено намет

1
apache працює як користувацькі www-дані. Якщо цей користувач не має дозволу на виконання вашого дому, апач не зможе прочитати жоден файл.
Ерік Карвальо

Чи не існує способу додати підпапку мого домашнього каталогу до www-data без того, щоб він мав повний доступ до домашньої папки? Дотримуючись цієї логіки, схоже, мені доведеться також надати доступ до ВСІХ ДОМАШНИХ папок, тому що я повинен був би надати їй доступ до / додому. Це здається занадто багато
Енріке Морено намет

Відповіді:


25

Це працювало для мене

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

Важливим бітом було змінити

Order allow, deny

до

Require all granted 

ви економите мій час, мені не потрібно міняти дозвіл
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 .
Bombe

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щоб зберегти


Перезапустіть апаш ( sudoтут також потрібно):

sudo service apache2 restart

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


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:dbuggerapache, не зможете отримати доступ до жодного файлу всередині вашого будинку. Якщо ви не хочете трохи обмежити доступ, ви можете спробувати дати лише дозвіл на виконання ( chmod g+x /home/dbugger), я не впевнений, але я думаю, що це працює.
Ерік Карвальо

Вибачте, але жодне з цих рішень не спрацювало :(
Енріке Морено Намет

chgrp www-data /home/dbuggerу поєднанні з методом @DavidGreene він працював на мене
Лоран

Можна також додати свою групу користувачів користувачу 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

5
Ви також можете скористатисяa2enmod userdir
Йоріл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.