Назад | Перейти на главную страницу

SELinux ограничивает доступ к Apache / PHP

Я установил минимальную систему CentOS с Apache, PHP и SELinux в конфигурации по умолчанию:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      29

Если я хочу изменить корневой каталог Apache, я должен переименовать этот новый каталог, иначе SELinux заблокирует доступ. Но я обнаружил, что с помощью сценариев PHP можно сделать гораздо больше, чем я ожидал. Например, я могу без предупреждений выполнять следующие действия:

Однако я получаю предупреждения AVC, когда пытаюсь прочитать атрибуты /etc/shadow или когда я пытаюсь получить доступ к домашнему каталогу.

Во-первых, это нормально? И как я могу настроить SELinux, чтобы ограничить больше действий PHP?

Я использую CentOS 7, и моя версия selinux-policy - 3.13.1-23.el7_1.7. (Я также пробовал то же самое с Fedora и получил те же результаты)

Каждый должен уметь читать /etc/passwd и напишите /var/tmp. Так что это не проблема.

Версия ядра тоже не проблема, если вы действительно устанавливаете обновления, используете Ksplice и т. Д.

Что касается исходящих сетевых подключений, вы можете ограничить это, поскольку некоторые веб-сайты не нуждаются в таких подключениях. Но иногда они это делают, например, большинству веб-сайтов необходимо подключиться к базе данных. Вы можете управлять этим с помощью логических значений SELinux, например:

# semanage boolean -l | grep httpd_can_network
httpd_can_network_relay        (off  ,  off)  Allow httpd to can network relay
httpd_can_network_connect_db   (off  ,  off)  Allow httpd to can network connect db
httpd_can_network_connect      (off  ,  off)  Allow httpd to can network connect
httpd_can_network_memcache     (off  ,  off)  Allow httpd to can network memcache
httpd_can_network_connect_cobbler (off  ,  off)  Allow httpd to can network connect cobbler

Настройка httpd_can_network_connect разрешает все исходящие сетевые подключения куда угодно; другие более строгие и позволяют подключаться только к каждой конкретной службе.


Также помните, что если вы используете nginx и php-fpm, этот php не ограничивается SELinux до CentOS 6.6 и 7.

С моей точки зрения /etc/passwd должны быть доступны для чтения всеми пользователями системы.

Ваш php-скрипт запускается с пользователем apache, поэтому нормально, что скрипт может читать /etc/passwd

В виртуальном хосте apache я использую "php_admin_value open_basedir /var/www/example.com" ты можешь сделать то же самое для upload_tmp_dir и session.save_path

Вам нужна команда системы блокировки в php? Проверить директиву php

disable_functions =

Это?