обнаружение, если у кого-то установлен selinux / включен httpd_can_network_connect

Когда SELinux установлен, есть параметр httpd_can_network_connect, который часто не позволяет PHP fsockopen () устанавливать исходящие соединения, когда он был создан по запросу, поступающему через HTTP.

Я хотел бы иметь возможность видеть через PHP, если в системе включена SELinux / httpd_can_network_connect. Если это так, я бы представил пользователю предупреждение о том, что этот параметр может повлиять на страницу.

Я установил SELinux на машину с Ubuntu и, кроме того, httpd_can_network_connect даже не кажется, что вариант, который доступен для меня SELinux тем не менее, кажется, установлен, и я не вижу никаких признаков его установки даже в выводе phpinfo () ..

Есть идеи?

5

Решение

Не уверен насчет интеграции 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 из моего тестирования.

5

Другие решения

Существуют некоторые php-привязки для библиотеки libselinux userspace, которая позволяет вам (помимо всего прочего) получать selinux booleans. Увидеть PHP-PECL-SELinux в архиве пакетов проекта fedora. Здесь pecl page.

Среди прочего это определяет selinux_get_boolean_active функция, которая должна выполнить эту работу за вас, она принимает логическое имя и возвращает long или -1 при неудаче.

В Интернете не так много документации, но вы можете обратиться к справочным страницам libselinux и резюме для подписей функций.

Надеюсь это поможет!

1

Чтобы ответить на ваш вопрос: getsebool httpd_can_network_connect, Это восстановит статус рассматриваемого логического значения.

1
По вопросам рекламы [email protected]