Когда SELinux установлен, есть параметр httpd_can_network_connect, который часто не позволяет PHP fsockopen () устанавливать исходящие соединения, когда он был создан по запросу, поступающему через HTTP.
Я хотел бы иметь возможность видеть через PHP, если в системе включена SELinux / httpd_can_network_connect. Если это так, я бы представил пользователю предупреждение о том, что этот параметр может повлиять на страницу.
Я установил SELinux на машину с Ubuntu и, кроме того, httpd_can_network_connect даже не кажется, что вариант, который доступен для меня SELinux тем не менее, кажется, установлен, и я не вижу никаких признаков его установки даже в выводе phpinfo () ..
Есть идеи?
Не уверен насчет интеграции selinux с PHP. Вы можете использовать команду оболочки.
$getenforce = trim(shell_exec("getenforce"));
if ($getenforce == "Disabled" or $getenforce == "Permissive") {
// good to go
}
Хотя getenforce может существовать не во всех системах Linux, поэтому вы можете как-нибудь протестировать эту функцию. Вот что может сработать для этого:
exec("getenforce", $getenforce, $return);
if ($return or ($getenforce[0] == "Disabled" or $getenforce[0] == "Permissive")) {
// good to go
}
Так как возвращаемое значение должно быть больше 0, если пользователь либо не имеет доступа, либо команда getenforce не существует.
Примечание: в моей системе getenforce находится в / usr / sbin, поэтому вам может понадобиться
Укажите полный путь к getenforce, если sbin не указан в пути пользователя.
Похоже, нет никаких ограничений на работу не суперпользователей
Getenforce из моего тестирования.
Существуют некоторые php-привязки для библиотеки libselinux userspace, которая позволяет вам (помимо всего прочего) получать selinux booleans. Увидеть PHP-PECL-SELinux в архиве пакетов проекта fedora. Здесь pecl page.
Среди прочего это определяет selinux_get_boolean_active
функция, которая должна выполнить эту работу за вас, она принимает логическое имя и возвращает long
или -1 при неудаче.
В Интернете не так много документации, но вы можете обратиться к справочным страницам libselinux и резюме для подписей функций.
Надеюсь это поможет!
Чтобы ответить на ваш вопрос: getsebool httpd_can_network_connect
, Это восстановит статус рассматриваемого логического значения.