У меня проблемы с настройкой Apache в Ubuntu. Я следил за этим руководством .
# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built: Feb 22 2011 18:33:02
Мой общедоступный каталог / var / www может успешно обслуживать и выполнять размещенные в нем страницы PHP. Однако я хочу создать символическую ссылку в / var / www, которая указывает на каталог в моей домашней папке и обслуживать страницы там.
[root /var/www]# ll
total 36
drwxr-xr-x 3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about
Когда я пытаюсь открыть в браузере / о программе, я получаю
Forbidden
You don't have permission to access /about on this server.
Насколько мне известно, я дал достаточные привилегии файлам, которые хочу обслуживать:
[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume
Мне известна опция FollowSymLinks, и я полагаю, что она установлена в моем файле / etc / apache2 / sites-enabled / 000-default:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Есть идеи, что мне может не хватать?
chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/about
который предоставляет эти разрешения только приложению apache (_www), что немного безопаснее, чем "другое".Ошибка 403 также может быть вызвана зашифрованной файловой системой, например символической ссылкой на зашифрованную домашнюю папку .
Если ваша символическая ссылка указывает на зашифрованную папку, пользователь apache (например, www-data) не может получить доступ к содержимому, даже если права доступа apache и файла / папки установлены правильно. Доступ пользователя www-data можно проверить с помощью такого вызова:
Для этого есть обходные пути / решения, например, добавление пользователя www-data в вашу частную группу (предоставляет зашифрованные данные веб-пользователю) или путем создания незашифрованной rsynced папки (вероятно, довольно безопасной). Я сам, вероятно, выберу решение rsync во время разработки.
/ubuntu/633625/public-folder-in-an-encrypted-home-directory
Удобный инструмент для моих целей - lsyncd . Это позволяет мне работать непосредственно в моей зашифрованной домашней папке и иметь возможность практически мгновенно видеть изменения на веб-странице apache. Синхронизация запускается изменениями в файловой системе, вызывая rsync. Поскольку я работаю только с небольшими веб-страницами и скриптами, синхронизация выполняется очень быстро. Я решил использовать короткую задержку в 1 секунду перед запуском rsync, хотя можно установить задержку в 0 секунд .
Установка lsyncd (в Ubuntu):
Запуск фоновой службы:
источник
sudo -u www-data ...
отличный способ проверить, есть ли проблема с разрешениями! Обратите внимание, что пользователем может быть www-data, apache или что-то еще в зависимости от вашего дистрибутива.У меня была аналогичная проблема, которую я долгое время не мог решить на моем новом сервере. В дополнение к ответу palacsint, хороший вопрос: вы используете Apache 2.4? В Apache 2.4 есть другой механизм для установки разрешений, которые не работают при использовании вышеуказанной конфигурации, поэтому я использовал решение, описанное в этом сообщении в блоге .
По сути, мне нужно было преобразовать мой файл конфигурации из:
кому:
Обратите внимание, как строки Order и allow были заменены на Require all grant.
источник
access_compat
модуле. Если этот модуль включен, первая часть вряд ли будет работать должным образом. Если его там нет, то попытка запустить Apache2 должна завершиться ошибкой./etc/httpd/conf/httpd.conf
Не существует в моей системе, а также каталог/etc/httpd/
не существует./etc/apache2/apache2.conf
существует для меня.Что касается этого вопроса, я только что понял, почему мой vhost выдал мне этот 403.
Я проверил ВСЕ возможности по этому вопросу и другим, но безуспешно. Это почти сводит меня с ума.
Я настраиваю сервер с развертыванием выпусков, аналогичным способу Capistrano, через символические ссылки, и когда я попытался получить доступ к папке DocRoot (которая теперь является символической ссылкой на папку с текущим выпуском), он дал мне 403.
Мой vhost:
и мой основной файл httpd.conf был (установка Apache 2.4 по умолчанию):
Оказывается, основное определение опций имело приоритет над моими полями vhosts (для меня это противоречит интуиции). Итак, я изменил его на:
и Эврика! (обратите внимание на знак плюса перед FollowSymLinks в ОСНОВНОМ файле httpd.conf. Надеюсь, это поможет какой-нибудь другой заблудшей душе.
источник
Как я обнаружил в своей ситуации, есть еще один способ, по которому символические ссылки могут вас подвести. Если у вас есть система SELinux в качестве сервера, а символические ссылки указывают на папку, смонтированную по NFS (другие файловые системы могут давать аналогичные симптомы), вы
httpd
можете увидеть неправильный контекст и отказаться от обслуживания содержимого целевых папок.В моем случае контекст SELinux
/var/www/html
(который можно получить с помощьюls -Z
) равенunconfined_u:object_r:httpd_sys_content_t:s0
. Символьные ссылки в/var/www/html
будут иметь тот же контекст, но их целевой контекст, являющийся папкой, смонтированной по NFS, будетsystem_u:object_r:nfs_t:s0
.Решение - добавить
fscontext=unconfined_u:object_r:httpd_sys_content_t:s0
кmount
опциям (например# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>
).rootcontext
не имеет значения иdefcontext
отклоняется NFS.context
Сам по себе не пробовал .источник
Сначала отключите selinux (vim / etc / selinux / config)
vim /etc/httpd/conf/httpd.conf отредактируйте следующие строки для символических ссылок и индексации каталогов:
Если файл .htaccess, то AllowOverride all
источник
/etc/httpd/
моей системе нет папки?Для тех, у кого возникли проблемы после обновления до 14.04 /ubuntu/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04, поскольку root был изменен перед обновлением = / var / www после обновления = / var / www / html
источник
В дополнение к изменению разрешений, как указано в других ответах, мне пришлось перезапустить apache, чтобы он вступил в силу:
источник
Еще одна ловушка на случай, если вам понадобится
AllowOverride All
:Где - то глубоко в дереве фс, старый ,
.htaccess
имеющийOptions Indexes
вместо того
Options +Indexes
все, что потребовалось, чтобы небрежно отключить
FollowSymLinks
набор в конфигурации сервера и вызвать здесь таинственный 403.источник
При включенной опции FollowSymLinks:
вам нужно, чтобы все каталоги в символической ссылке выполнялись пользователем, который использует httpd.
поэтому для этого общего варианта использования:
Вы можете проверить права владельца с помощью namei :
В моем случае
to
каталог был исполняемым только для моего пользователя:Разрешить выполнение другими, решить эту проблему:
Смотрите, что неисполняемый каталог может быть другим, или вам нужно воздействовать на группы вместо других, это зависит от вашего случая.
источник