Arhn - архитектура программирования

Centos 7/Apache/PHP - mkdir(): Отказано в доступе

Прежде чем кричать ДУБЛИРУЙТЕ! и изгони меня в бездну, выслушай меня. :)

Я разрабатывал интранет-сайт для компании, с которой работаю, и первоначально я разрабатывал его непосредственно с моей рабочей станции под управлением Windows 7/IIS. Когда я был близок к завершению работы над сайтом/приложениями, мне был предоставлен компьютер Centos 7 с Apache, поэтому я начал процесс его переноса на этот система. Я разобрался с большинством мелких проблем, и теперь сайт работает. Однако есть часть сайта, которая взаимодействует с нашей базой данных и создает каталог/файл журнала на основе человека, который вошел в систему. Эта часть использует функцию mkdir(), но у меня возникают проблемы с правами доступа к ней.

mkdir(): Permission denied

Вот что я уже сделал:

  • Поскольку я использую Centos 7, пользователем/группой Apache является apache:apache. Я использовал chown и изменил владельца /var/www/html/ и папки Logs на пользователя/группу apache. Чтобы быть в безопасности, я дважды проверил httpd.conf, а также проверил запущенные процессы, чтобы убедиться, что у меня есть правильный пользователь/группа.
  • Я попытался, только для целей тестирования, изменить разрешения всех этих папок на chmod 777, но получил ту же ошибку.
  • Искал StackOverflow сверху вниз и получал ответы только на те вещи, которые я уже пробовал, но безрезультатно.

Итак, использую ли я chmod или chown для изменения разрешений для папок, к которым осуществляется доступ, я получаю тот же тип ошибки. Чтобы быть в безопасности, я также проверил пользователя PHP, и он также использует пользователя apache.

Если у кого-то может быть дополнительная информация о том, почему он не работает, даже с измененными разрешениями, пожалуйста, просветите меня. Если я случайно пропустил единственную статью, которая объясняла эту конкретную ситуацию, то орите дубликат и изгоните меня в пропасть. ржу не могу :)


ИЗМЕНИТЬ Итак, при дальнейшем тестировании я обнаружил 2 проблемы, которые, по-видимому, вызывают эту общую проблему.

  1. PHP пытается установить разрешения для папки, когда она создается из скрипта, и кажется, что серверу это не нравится, даже если apache является владельцем. После удаления этой части кода ошибка прав доступа исчезает, и я получаю сообщение об ошибке «нет такого файла или каталога».
  2. При тестировании создания каталогов с пользователем Apache через sudo он смог создать каталог без проблем. Однако мой PHP-скрипт создает 2 каталога, а затем файл журнала в последнем созданном. Кажется, что вы не можете создать две директории одновременно?? Например, уже создана папка Logs, и PHP пытается создать в ней два каталога: один для идентификатора пользователя, а затем еще одну папку внутри этого каталога с датой. Итак, после запуска скрипта PHP он должен создать что-то вроде «Журналы/5235/3-3-2015/».

Просто отметим, что я попытался установить рекурсивное значение true для mkdir в PHP, но именно тогда я получаю первоначально отмеченные проблемы с разрешениями. Когда рекурсивный/режим удален, он не получает проблемы с разрешением, но не может создавать вложенные каталоги.


ИЗМЕНИТЬ2

Чтобы проверить свои теории, я удалил вложенность и попытался заставить mkdir создать только 1 каталог, и он выдает те же ошибки, что и раньше. Хотя он принадлежит Apache, и даже если я установлю его на 777, он отбрасывает проблемы с разрешениями.

04.03.2015

  • Вы проверили все журналы? например: журналы SElinux. попробуйте tail -f /var/log/*, чтобы узнать, есть ли там что-нибудь еще. также используйте sudo для тестирования. например: sudo -H -u apache bash -c 'mkdir /tmp/testapache' 04.03.2015
  • @Risyasin Я уже проверил все журналы и получаю ошибки журнала того же типа. Я протестировал создание каталога с помощью Apache через sudo, и он создает каталог без проблем. Однако, возможно, я обнаружил источник проблемы, я обновлю свой исходный пост новой информацией. 04.03.2015
  • @Risyasin Я обновил свой исходный пост новой информацией. В основном, когда mkdir пытается установить рекурсивные разрешения и разрешения по умолчанию, ему отказывают. Когда я удаляю рекурсивный/режим, у него не возникает проблемы с разрешением, но он не создает вложенные каталоги, потому что не думает, что это местоположение существует, поскольку рекурсивный по умолчанию имеет значение false. Как уже упоминалось, я передал право собственности на папки Apache и даже попытался установить для них значение 777 для тестирования. 04.03.2015

Ответы:


1

Возможно, хотя у вас есть разрешения 755/777, SELinux блокирует httpd запись/создание каталогов.

Пытаться:

chcon -R -t httpd_sys_content_t /path/to/www
chcon -R -t httpd_sys_content_rw_t /path/to/www/dir/for/rw

Дополнительная информация: http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

04.03.2015
  • Я попробовал это, и я все еще получаю те же ошибки. Я изучаю SELinux и собираюсь еще немного поковыряться в нем. Я дам вам знать, что я найду. Спасибо за ответ, отличная идея для размышления. 04.03.2015
  • Это была моя ошибка, я поместил первую команду в /var/www/html, а вторую команду в /var/www/html/Logs, когда я должен был сделать это на одну папку раньше для обоих. В любом случае.... СПАСИБО!!!!! :D Это помогло мне. SELinux довольно интересен, и в будущем я уделю ему больше внимания. 04.03.2015
  • Правильный контекст — httpd_sys_rw_content_t, а не httpd_sys_content_rw_t. 12.05.2015
  • У меня это тоже сработало на недавно установленном CentOs 7 + Apache + PHP (FastCGI) 13.12.2018

  • 2

    Не уверен, но ваши бинарные файлы Centos PHP могут иметь нарушенные права доступа к файлам. Есть два способа это исправить.

    • Компиляция PHP с нуля. Я бы предпочел это, так как весь контроль будет вашим.
    • Или изменение вашего php-скрипта для использования функции Umask() PHP. Ссылка на документацию
    04.03.2015
  • Спасибо за дальнейшую помощь. Я собираюсь дать этому шанс и дам вам знать, как это происходит. 04.03.2015
  • У меня не было возможности проверить это, но спасибо за советы/предложения, которые вы мне сегодня дали. Я научился у вас некоторым интересным вещам, и я уверен, что это пригодится в будущем. Кроме того, я бы не нашел свой путь к заключению без вашей помощи. В итоге возникла проблема с тем, как SELinux обрабатывал мой HTTPD. 04.03.2015

  • 3

    Согласно ответу DRU

    Эта проблема связана с SELINUX. Используйте следующую команду

    chcon -R -t httpd_sys_content_rw_t /path/to/www/dir/for/rw

    17.01.2017
  • Чем это отличается от ответа @Dru? 17.01.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..