Подслушивает подключение к то же самое для SELinux?

Тогда просто не запускайте диспетчер отображения, например gdm .

systemctl disable gdm
2
09.05.2017, 13:13
1 ответ

Что касается SELinux, «прослушивание» и «подключение к» не то же самое. Это две разные вещи, и чтобы иметь возможность делать что-либо, процесс должен иметь правильное разрешение.В случае привязки к порту и подключения к порту этими разрешениями являются name_bind и name_connect соответственно.

В данном случае нас интересуют разрешения класса. Но опять же, как обычно бывает с SELinux, нам не хватает одной части информации — разрешений для какого класса? Я чувствую, что должен быть лучший способ найти это, но я еще не сталкивался с ним. Так что давайте использовать то, что мы знаем:

sesearch -d -A -t http_port_t
Found 81 semantic av rules:
    allow cloud_init_t http_port_t : tcp_socket name_connect ;
    ...

Это покажет нам все разрешающие правила, где http_port_t является целью. К счастью, мы можем заметить, что все они работают с одним и тем же классом — tcp_socket. И это имеет смысл. Теперь проверим все разрешения, которые есть у класса tcp_socket (это, насколько я знаю, определено в самой политике).

seinfo -ctcp_socket -x
  • -c выводит классы объектов (обратите внимание, что между флагом и именем не должно быть пробела)
  • -x выводит дополнительную информацию (в данном случае собственно то, что нас интересует in — разрешения!)

Здесь будут перечислены все разрешения, применимые к классу tcp_socket — среди них name_bind и name_connect, которые являются значениями LISTEN ON и CONNECT TO из вашего вопроса.

Предположим, вы хотите использовать haproxy — haproxy имеет тип SELinux haproxy_t. Теперь посмотрим, какие разрешения имеет haproxy для портов, определенных в http_port_t:

sesearch -d -A -s haproxy_t -t http_port_t
Found 1 semantic av rules:
    allow haproxy_t http_port_t : tcp_socket { name_bind name_connect } ;

Это показывает нам, что у haproxy есть разрешения name_bind и name_connect.Таким образом, какой бы порт вы ни добавили в http_port_t, это позволит haproxy привязываться и подключаться к указанному порту (однако все другие типы, использующие http_port_t, также смогут использовать свои соответствующие разрешения на указанном порту! Например, openvpn сможет получать и отправлять сообщения, и связываться и подключаться).

Если бы вместо http_port_t haproxy использовал определенные типы для каждого разрешения, скажем, haproxy_connect_port_t и haproxy_bind_port_t с разрешениями name_connect и name_bind соответственно, тогда, если вы добавили порт только в haproxy_connect_port_t, он смог бы подключаться только к указанному порту, а не слушать /привязать к нему.

1
27.01.2020, 22:18

Теги

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