Product SiteDocumentation Site

7.2.2. Как работают ограниченные службы?

Службы могут работать в нескольких режимах. Для того, чтобы обеспечить режимы, необходимо сообщить SELinux как необходимо запускать службы. Это может быть достигнуто через Булевы переменные, которые позволяют частям политики SELinux изменяться в рабочем режиме, без понимания написания политики SELinux. Это позволяет вносить изменения, такие, как доступ к файловым системам NFS, без перегрузки или рекомпиляции политики SELinux. Также запуск служб на нестандартном порту требует изменения политики с помощью команды semanage.
Например для разрешения Apache HTTP Server связываться с MySQL, переключите Булево значение httpd_can_network_connect_db в состояние включено (on):
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
Если доступ заблокирован для определенной службы, используйте команды getsebool и grep, для просмотра есть ли Булевы переменные для предоставления доступа. Например, используйте команду getsebool -a | grep ftp для поиска соответствующих Булевых значений для FTP:
$ /usr/sbin/getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
Для просмотра Булевых значений и определения включены они или выключены, выполните команду /usr/sbin/getsebool -a. Для просмотра списка Булевых значений и определения их назначения, а также их состояния, выполните команду /usr/sbin/semanage boolean -l от имени пользователя root. Дополнительная информация о списках и конфигурировании Булевых значений доступна в разделе: Раздел 5.6, «Булевые значения (Переключатели)»
Номера портов
В зависимости от конфигурации политики, службам может быть разрешено работать только на определенном диапазоне портов. Попытка изменить порт службы без изменения политики, может привести к невозможности запуска службы. Например, выполните команду semanage port -l | grep http от имени пользователя root для просмотра разрешенных портов относящихся к http:
# /usr/sbin/semanage port -l | grep http
http_cache_port_t              tcp      3128, 8080, 8118
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
Тип порта http_port_t определяет порт, который Apache HTTP Server может слушать, которые, в нашем случае, TCP 80, 443,488, 8008, 8009 и 8443. Если администратор сконфигурировал httpd.conf так, что httpd слушает порт 9876 (Listen 9876), но политика не обновлена в соответствии с этим изменением, то команда service httpd start завершится с ошибкой:
# /sbin/service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:9876
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:9876
no listening sockets available, shutting down
Unable to open logs
						            [FAILED]
Отказ в доступе SELinux будет схож со следующим событием, записанным в /var/log/audit/audit.log:
type=AVC msg=audit(1225948455.061:294): avc:  denied  { name_bind } for  pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
Для разрешения httpd слушать порт, который не перечислен в типе http_port_t, выполните команду semanage port для добавления порта в политику[13]:
# /usr/sbin/semanage port -a -t http_port_t -p tcp 9876
Опция -a добавляет новую запись; опция -t определяет тип, а опция -p определяет протокол. Последний аргумент - это номер добавляемого порта.


[13] Команда semanage port -a добавляет запись в файл /etc/selinux/targeted/modules/active/ports.local. Примечание: по умолчанию, этот файл может быть просмотрен только пользователем root.