Я переношу некоторые учетные записи хостинга с CentOS 6 с Apache 2.2 на CentOS 7 с Apache 2.4.34. Некоторые из этих учетных записей являются символическими ссылками на файлы через символические ссылки каталога. внутри DocumentRoot для файлов вне DocumentRoot.
Как это:
root:root /var/lib/common/html/
user:user /home/user/app/ => /var/lib/common/html/
user:user /home/user/html/file.html => /home/user/app/file.html
Работает на Apache 2.2. На Apache 2.4 я получаю ответ 403 с отказом в разрешении. Я не могу найти доказательств того, что SymLinkIfOwnerMatch
установлен, только FollowSymLinks
через grepping файлы конфигурации. Ошибка 403 исчезнет, если я установлю /home/user/html/file.html
право собственности на root:root
. (Обратите внимание, что принадлежность символической ссылки каталога "посредник" не имеет значения. Apache в любом случае последует за ней.)
Есть ли ситуации, когда Apache 2.4 всегда требовать, чтобы владение символической ссылкой соответствовало? Кажется, что прямой доступ, mod_rewrite и даже псевдоним обеспечивают соответствие владения, и я не могу понять, почему.
Я понял. Панель управления, которую я использую, предоставляет выпуск Apache с дополнительными исправлениями, а также включает harden-symlinks.patch
файл (источник). Патч предлагает апач UnhardenSymLinks
опция доступна, но когда я попробовал, ошибки apachectl с Option UnhardenedSymLinks not allowed here
. Я пробовал его внутри и вне VirtualHost, внутри каталога, но он нигде не проходит проверку конфигурации.
После небольшого исследования выяснилось, что этот патч популярен среди большинства распространенных панелей управления хостингом. Если вы его используете, вы, скорее всего, используете SymLinksIfOwnerMatch
даже если вы укажете FollowSymLinks
в вашем конфиге.