Semanage – это инструмент, используемый для настройки определенных элементов политики SELinux без изменения или перекомпиляции источников политик.
Он включает в себя сопоставление имен пользователей Linux с пользовательскими идентификаторами SELinux и сопоставлениями контекста безопасности для таких объектов, как сетевые порты, интерфейсы и хосты.
По умолчанию SELinux позволяет только известным службам связываться с известными портами.
Если мы хотим изменить службу для использования нестандартного порта, нам нужно будет изменить тип порта с помощью команды semanage.
В этой статье мы рассмотрим команду semanage и узнаем, как перечислить, создать/добавить и удалить типы портов в RPM-дистрибутивах, таких как CentOS и RedHat.
Перечисление портов с помощью Semanage
Основная команда для перечисления всех портов
# semanage port -l SELinux Port Type Proto Port Number afs3_callback_port_t tcp 7001 afs3_callback_port_t udp 7001 afs_bos_port_t udp 7007 afs_fs_port_t tcp 2040 afs_fs_port_t udp 7000, 7005 afs_ka_port_t udp 7004 afs_pt_port_t tcp 7002 afs_pt_port_t udp 7002 ...
Чтобы указать номера портов определенного порта, например http, используйте следующую команду:
# semanage port -l | grep -w http_port_t http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
Аналогично для mysqld
# semanage port -l | grep -w mysqld_port_t mysqld_port_t tcp 1186, 3306, 63132-63164
Чтобы найти имена портов с определенным номером порта, используйте следующую команду:
# semanage port -l | grep 53 apertus_ldp_port_t tcp 539 apertus_ldp_port_t udp 539 dns_port_t tcp 53 dns_port_t udp 53
Создание или добавление портов с помощью Semanage
В этом примере мы создадим новый порт для http и назначим его на tcp-порт 2222.
Параметр -a заключается в добавлении нового порта, опция -t указывает тип SELinux, а параметр -p – указать протокол (в этом случае tcp).
# semanage port -a -t http_port_t -p tcp 2222
для просмотра вновь созданного порта мы используем команду list с параметром -C для отображения только настроек.
# semanage port -lC
Номер и тип порта SELinux
http_port_t tcp 2222
Чтобы назначить диапазон номеров для определенного порта, используйте команду:
# semanage port -a -t http_port_t -p tcp 2223-2225
Теперь мы видим диапазон портов:
# semanage port -lC SELinux Port Type Proto Port Number http_port_t tcp 2223-2225
Если вы попытаетесь добавить еще одну запись с теми же значениями, что и раньше, вы получите ошибку:
ValueError: Port tcp/2222 already defined
Чтобы переопределить существующий порт, который уже был создан, используйте параметр -m для изменения:
# semanage port -m -t unreserved_port_t -p tcp 2222
Теперь, если мы перечислим все порты, мы увидим изменение:
# semanage port -lC SELinux Port Type Proto Port Number unreserved_port_t tcp 2222
Удаление портов с помощью Semanage
Мы используем опцию -d для удаления записи порта. Чтобы удалить unreserved_port_t на tcp-порту 2222, мы используем команду:
# semanage port -d -t unreserved_port_t -p tcp 2222
Чтобы удалить диапазон портов, используйте команду:
# semanage port -d -t http_port_t -p tcp 2223-2225
Если вы запустите команду настроенного списка и ничего не вернули, запись будет удалена.
Использование Semanage-Permmissive
Эта способность Semanage используется для добавления или удаления разрешающих модулей политики SELinux.
Чтобы перечислить все разрешающие модули, используйте параметр -l:
# semanage permissive -l Customized Permissive Types Builtin Permissive Types sanlk_resetd_t hsqldb_t systemd_hwdb_t blkmapd_t ipmievd_t targetd_t
Чтобы создать httpd_t разрешающий домен, используйте параметр -a:
# semanage permissive -a httpd_t
Теперь давайте проверим все разрешительные модули:
# semanage permissive -l Customized Permissive Types httpd_t Builtin Permissive Types sanlk_resetd_t hsqldb_t systemd_hwdb_t blkmapd_t ipmievd_t
Чтобы удалить permissive , который мы только что создали, мы используем параметр -d.
# semanage permissive -d httpd_t libsemanage.semanage_direct_remove_key: Removing last permissive_httpd_t module (no other permissive_httpd_t module exists at another priority).
В этой статье мы увидели, как перечислить, добавить и удалить порты, используя инструмент semanage для дистрибутивов Linux на основе RPM.
Если ваша система имеет графический интерфейс, вы можете установить пакет policycoreutils-gui через yum, а затем запустить команду system-config-selinux, чтобы открыть версию графического интерфейса пользователя и настроить типы портов SELinux в меню «Network port».