Установка номера порта в файле модуля selinux

Я пытаюсь собрать небольшой модуль selinux, чтобы углубить свое понимание selinux. Я определил небольшой демон-подобный тип приложения с собственным port_type. Следующий код является сокращенной версией, заменяющей мой собственный тип приложения на httpd_t:

module mymodule 1.0;

require {
        type httpd_t;
        attribute port_type;
        class tcp_socket name_bind;
}

#============= my_port_t ==============

type my_port_t, port_type;
allow httpd_t my_port_t:tcp_socket name_bind;

Теперь я хотел бы поместить в модуль (или сгенерированный пакет) фактический номер(ы) порта для my_port_t. Цель - избежать явного вызова semanage, например, такого:

semanage port -a -t my_port_t -p tcp 9011

Я знаю, что semanage делает номер порта постоянным, но я бы предпочел иметь один файл, который обо всем позаботится. Таким образом, распространение модуля на многих системах будет намного проще.

Как я могу это сделать? Пока что я не нашел решения. Может, я неправильно подхожу к этому?

1
задан 26 June 2017 в 13:49
1 ответ

portcon является директивой для этой цели, но, согласно статье Маркировка порта в загружаемом модуле политики, это невозможно вне базового модуля. Официальная документация порткона SELinux говорит то же самое («Политика модуля: нет»).

Однако это относится только к традиционным модулям .te. SELinux теперь также поддерживает CIL (Common Intermediate Language), где поддерживается. Предположительно, вам необходимо использовать EL 7.3 или более позднюю версию или Fedora 23 или более позднюю версию.

Итак, в вашем случае само определение порта будет выглядеть так:

; Declare a my_port_t type
(type my_port_t)
; Assign the type to the object_r role
(roletype object_r my_port_t)

; Assign the right set of attributes to the port
(typeattributeset defined_port_type my_port_t)
(typeattributeset port_type my_port_t)

; Declare tcp:9011 as my_port_t
(portcon tcp 9011 (system_u object_r my_port_t ((s0) (s0))))

Это, однако, решает только проблему с определением типа порта. Согласно Fundamental SELinux Concepts, оставшаяся часть политики будет такой же простой, как:

; Allow httpd_t to bind to my_port_t
(allow httpd_t my_port_t (tcp_socket (name_bind)))

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

(portcon tcp 922 (system_u object_r ssh_port_t ((s0)(s0))))

Вы можете сохраните этот файл как, скажем, foobar-ssh.cil, затем вы можете установить и проверить результаты следующим образом:

# semodule -i foobar-ssh.cil
# semodule -l | grep foobar
foobar-ssh
# semanage port -l | grep ssh
ssh_port_t                     tcp      22, 922
1
ответ дан 2 March 2021 в 12:24

Теги

Похожие вопросы