H00035: доступ к «file.php» запрещен, как правильно настроить SELinux?

496
ReynierPM

В последние дни я боролся с этой проблемой, и до сих пор не могу найти никакого решения. Проблема в нескольких словах: (сообщение об ошибке):

H00035: доступ к index.php запрещен, так как отсутствуют разрешения на поиск для компонента пути

Где это приложение работает?

  • хост Windows 10
  • это виртуальная машина, работающая внутри VirtualBox и управляемая Vagrant
  • CentOS Linux выпуск 7.5.1804 (Core)
  • Apache / 2.4.33 (IUS)
  • PHP 7.2.6 (нет, это имеет значение, но на всякий случай)
  • SELinux: принуждение

Что я уже пробовал:

  • Запустил следующие команды в поле: Это сработало? НЕТ (найдено здесь )

    find /var/www -type d -exec chmod 755 {} \; find /var/www -type f -exec chmod 664 {} \; 
  • Запустил следующие команды в поле: Это сработало? НЕТ (найдено здесь )

    chcon -R -t httpd_sys_content_t /var/www 

Здесь все перепробовал, сработало? NO .

Что я пробовал и работает? Отключить SELinux !!! Так что наверняка это мисс конфигурация SELinux.

Разрешения на /var/wwwвыглядит следующим образом:

# namei -mo /var/www/api/public/index.php f: /var/www/api/public/index.php dr-xr-xr-x root root / drwxr-xr-x root root var drwxrwxr-x vagrant vagrant www drwxrwxr-x vagrant vagrant api drwxrwxr-x vagrant vagrant public -rwxrwxr-- vagrant vagrant index.php 

Что еще я могу попробовать здесь, чтобы исправить проблему? Я знаю, что легкий путь - это «отключить SELinux», но я не хочу этого делать, поэтому было бы лучше узнать, как все делать правильно :)

Эта коробка была построена с использованием Puphpet, и я могу поделиться ей. Дайте мне знать, если вам это нужно для тестирования.

ОБНОВЛЕНИЕ № 1:

Ответ @ hbruijn дал мне идею сменить владельца vagrantна Apache, www-dataи H00035он исчез, однако я получил нового.

// Before synced_folder: folder1: owner: vagrant group: vagrant source: ../../www/html target: /var/www sync_type: default  // After synced_folder: folder1: owner: www-data group: www-data source: ../../www/html target: /var/www sync_type: default 

Ошибка как сейчас:

(13) Отказано в доступе: [клиент 192.168.50.1:2048] AH00529: /var/www/api/public/.htaccess pcfg_openfile: невозможно проверить файл htaccess, убедитесь, что он доступен для чтения и что '/ var / www / api / public / 'исполняемый

Это результат ответа @ hbruijn:

# ls -lZ /var/www/ drwxrwxr-x. www-data www-data system_u:object_r:vmblock_t:s0 api/ -rwxrwxr--. www-data www-data system_u:object_r:vmblock_t:s0 index.html* 

Я снова find /var/www -type f -exec chmod 664 {} \;выполнил ту же команду: но она ничего не изменила, что означает, что разрешения остаются такими же, как и раньше.

Есть идеи?

0

2 ответа на вопрос

1
HBruijn

Проблема, вероятно, коренится в том факте, что вы представляете часть файловой системы хоста в виде данных / var / www в виртуальной машине VirtualBox.

Очевидно, что в Windows нет атрибутов, необходимых для предоставления контекста SELinux.

Таким образом, ваша виртуальная машина использует вместо этого контекст безопасности по умолчанию.

Контекст безопасности по умолчанию для «неизвестной» файловой системы не является контекстом, который хорошо согласуется с работой веб-сервера.
Проверьте с ls -lZ /var/www/. Вашему веб-серверу нужно что-то вроде

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html 

и в настоящее время вы, вероятно, получаете что-то другое, как:

drwxrwxrwx. vagrant vagrant system_u:object_r:vmblock_t:s0 /var/www/api 

Вы можете попытаться вручную принудительно настроить правильный контекст SELinux в качестве опции монтирования:

mount -o remount,context="system_u:object_r:httpd_sys_content_t:s0" /var/www 

и если это работает как задумано (проверьте с ls -Z), вы, вероятно, можете добавить, что в опциях монтирования есть / etc / fstab или ваш vagrant файл

Команда завершается с ошибкой `# mount -o remount, context =" system_u: object_r: httpd_sys_content_t: s0 "/ var / www неизвестный параметр mount relaytime`, не уверенный в том, как это исправить ReynierPM 5 лет назад 0
Также не могли бы вы взглянуть на мое обновление в ОП? ReynierPM 5 лет назад 0
0
JoeWalt

restorecon -vRF /var/wwwвосстановит контекст безопасности по умолчанию для всех файлов ниже / var / www. Если вы не изменили политики selinux, это следует исправить. Как примечание, если вы переместили файлы в другое место, вы можете изменить эти контексты, выполнив:

semanage fcontext -a -e /var/www /somewhere/www restorecon -vRF /somewhere/www 

В вашем случае это не должно быть полезно, потому что / var / www уже определил метки по умолчанию (например, контексты), а другой каталог - нет, поэтому вы должны изменить их, а затем применить их. Вы можете получить представление о путях к отображению контекста с помощью grep www /etc/selinux/targeted/contexts/files/file_contexts:

Кроме того, chmod влияет только на дискреционные элементы управления (права доступа к файлам), но не на обязательные элементы управления (политики) selinux. Оба должны быть правильными, чтобы это работало, но если вы отключили selinux, и это сработало, вам не нужно делать это снова.

Кроме того, / var / log / messages должна регистрировать все ошибки selinux и сообщать вам объект, который блокирует доступ. Если вы сделаете временный 'setenforce 0', который изменит selinux на разрешающий режим, так что все действия будут работать, но вы все равно получите ошибки журнала, которые вы можете исправить все, прежде чем снова включить его. Если это не помогло, посмотрите на установку пакетов setroubleshoot и setroubleshoot-server, которые предоставят вам еще больше информации.

Похожие вопросы