Как настроить SELinux для разрешения исходящих подключений из CGI-скрипта?

Вопрос или проблема

Я мигрирую на новый веб-сервер, на котором настроен SELinux (работает на Centos 5.5). Я настроил его так, чтобы он мог выполнять CGI скрипты без проблем, но некоторые из старых скриптов на базе Perl не могут подключиться к удаленным веб-сервисам (таким как RSS-каналы и т.п.).

Запуск: grep perl /var/log/audit/audit.log дает:

type=SYSCALL msg=audit(1299612513.302:7650): arch=40000003 syscall=102 success=no exit=-13 a0=3 a1=bfb3eb90 a2=57c86c a3=10 items=0 ppid=22342 pid=22558 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=235 comm="index.cgi" exe="/usr/bin/perl" subj=root:system_r:httpd_sys_script_t:s0 key=(null)

Как мне кажется из моего ускоренного курса по SELinux, похоже, что он активно блокирует исходящее соединение, но как мне настроить его, чтобы позволить CGI скриптам делать исходящие запросы?

Вам, вероятно, нужно включить SELinux boolean httpd_can_network_connect:

Запустите под root:

# setsebool -P httpd_can_network_connect 1

Ответ или решение

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

Теория

SELinux — это система мандатного управления доступом (MAC), разработанная для повышения безопасности системы Linux. Она предоставляет более строгий контроль доступа, чем традиционные системы управления доступом, такие как DAC (Discretionary Access Control). Это достигается за счет разделения процессов и ресурсов системы на домены и типы, что позволяет администратору точно определять, какие процессы могут взаимодействовать с определенными ресурсами.

В вашей ситуации SELinux ограничивает возможность CGI-скриптов, выполняемых через веб-сервер (Apache в вашей конфигурации), инициировать исходящие сетевые соединения. Это делается посредством назначенных доменов безопасности, которые контролируют взаимодействие между процессами и системными ресурсами. В данном случае CGI-скрипт работает в домене httpd_sys_script_t, который по умолчанию имеет ограниченный доступ к сети.

Для разрешения таких операций в SELinux используются "булевы переменные" (booleans), которые позволяют включать или отключать определенные функции безопасности в системе.

Пример

Вы столкнулись с типичной ситуацией, когда SELinux блокирует сетевую активность CGI-скриптов. Лог-аудит указывает на проблему с системным вызовом, что подтверждает отказ в соединении:

type=SYSCALL msg=audit(1299612513.302:7650): arch=40000003 syscall=102 success=no exit=-13 a0=3 a1=bfb3eb90 a2=57c86c a3=10 items=0 ppid=22342 pid=22558 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=235 comm="index.cgi" exe="/usr/bin/perl" subj=root:system_r:httpd_sys_script_t:s0 key=(null)

Этот лог указывает на то, что процесс не может выполнить сетевой системный вызов. Решение состоит в активации соответствующей SELinux boolean-переменной, которая разрешает таких поведения.

Применение

Чтобы разрешить исходящие сетевые соединения для CGI-скриптов, выполняемых через Apache, нужно включить boolean httpd_can_network_connect. Эта булева переменная управляет способностью HTTPD-сервиса (включая скрипты, работающие в его контексте) инициировать исходящие сетевые соединения.

Чтобы применить это решение, выполните следующие шаги:

  1. Проверьте текущее состояние переменной. Это можно сделать с помощью следующей команды:

    getsebool httpd_can_network_connect

    Это даст вам знать, включена ли переменная или нет.

  2. Включите переменную. Используйте команду setsebool для включения:

    setsebool -P httpd_can_network_connect 1

    Использование флага -P делает это изменение постоянным, оно будет сохраняться после перезагрузки системы.

  3. Перезапустите Apache, чтобы убедиться, что все изменения вступили в силу, и убедиться, что перезапуск веб-сервера приведет к обновлению всех его процессов.

    systemctl restart httpd

Дополнительные замечания

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

  • Проводить такие изменения с пониманием, какие конкретно процессы и ресурсы получают расширенные права доступа.
  • Мониторить логи системы сразу после внесения изменений, чтобы убедиться в отсутствии непредвиденных последствий.
  • При необходимости, использовать инструмент audit2allow, который может помочь в создании пользовательских политик SELinux, если стандартные boolean-переменные не решают вашу проблему.

Таким образом, активация переменной httpd_can_network_connect является основным шагом для разрешения исходящих подключений от CGI-скриптов, работающих на сервере с активированной системой SELinux.очный контроль доступа, чем традиционные системы управления доступом, такие как DAC (Discretionary Access Control). Это достигается за счет разделения процессов и ресурсов системы на домены и типы, что позволяет администратору точно определять, какие процессы могут взаимодействовать с определенными ресурсами.

В вашей ситуации SELinux ограничивает возможность CGI-скриптов, выполняемых через веб-сервер (Apache в вашей конфигурации), инициировать исходящие сетевые соединения. Это делается посредством назначенных доменов безопасности, которые контролируют взаимодействие между процессами и системными ресурсами. В данном случае CGI-скрипт работает в домене httpd_sys_script_t, который по умолчанию имеет ограниченный доступ к сети.

Для разрешения таких операций в SELinux используются "булевы переменные" (booleans), которые позволяют включать или отключать определенные функции безопасности в системе.

Оцените материал
Добавить комментарий

Капча загружается...