dadv: (Default)
[personal profile] dadv

Традиционно Unix-системы позволяют непривилегированным процессам открывать для прослушивания (listen) только TCP-порты с номерами от 1024 и выше. Порт номер 1023 и все меньшие считаются "привилегированными" и доступны только суперпользователю. Такое разграничение гарантировало, например, что непривилегированный пользователь не может занять своим процессом, скажем, 25-й порт в тот момент, когда системный SMTP-процесс по какой-то причине оказался отключен, и принимать чужую почту. Кроме защиты подобного рода такое жесткое ограничение создавало и неудобства: например, чтобы дать процессу http-сервера возможность слушать порт 80, приходилось запускать его с правами суперпользователя и надеяться на качество кода http-сервера, который должен как можно раньше после занятия порта "сбросить" привилегии до статуса обычного пользователя.

Но "правило порта 1023" в FreeBSD уже давно не более чем дефолт. sysctl net.inet.ip.portrange.reservedhigh определяет максимальный номер "привилегированного" порта, по умолчанию содержит значение 1023, которое можно поменять. Модуль ядра mac_portacl, будучи загруженным, по умолчанию дублирует эту защиту (sysctl security.mac.portacl.port_high тоже равен 1023), поэтому после его загрузки "традиционную" защиту можно отключить, выставив sysctl net.inet.ip.portrange.reservedhigh=0. При этом непривилегированные процессы по-прежнему не имеют права занимать порты ниже 1024, если им не разрешить этого явно и выборочно. Например:

sysctl security.mac.portacl.rules=uid:88:tcp:80

Такое правило разрешает процессу пользователя с UID=88 (непривилегированному) занимать порт 80, если он свободен. Никаких прав суперпользователя при этом процесс не получает.

В FreeBSD 8.0 и новее модуль mac_portacl можно загрузить в любой момент, так как подсистема MAC (mandatory access control) включена в ядро по умолчанию (options MAC в конфигурации ядра). В более ранних версиях может потребоваться включение этой опции и пересборка ядра. А вообще этот модуль доступен, начиная с версии 5.1-RELEASE (2003), в стабильной ветке с 5.3-RELEASE (2004) и документирован в Handbook и в man-странице mac_portacl(4).

(В более ранних версиях системы обеспечить обработку непривилегированным процессом запросов, приходящих на порт с номером до 1023, можно так: ipfw fwd 127.0.0.1,8080 tcp from any to $myip 80 (или to me 80). При этом процесс запускается на порту 8080, а пакеты к нему доставляет ядерная часть ipfw, подменяя служебную информацию в сокете так, что приложение считает, что запрос изначально пришел в порт 8080. Ответные пакеты также обрабатываются ядром "прозрачно" для приложения и всё работает.)

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios