Имя модуля: mac_portacl.ko
Строка конфигурации ядра: MAC_PORTACL
Параметр загрузки: mac_portacl_load="YES"
Модуль mac_portacl(4)
используется для ограничения привязки (binding) к локальным портам TCP и UDP, используя
различные переменные sysctl. По сути mac_portacl(4) делает
возможной привязку к привилегированным портам, т.е. к портам с номерами меньше 1024 для
не-root пользователей.
После загрузки этот модуль включит политику MAC на
всех сокетах. Доступны следующие переменные sysctl:
-
security.mac.portacl.enabled включает/отключает политику
целиком.
-
security.mac.portacl.port_high установит наибольший номер
порта, для которого mac_portacl(4)
включает защиту.
-
security.mac.portacl.suser_exempt, если установлена в
ненулевое значение, исключает пользователя root из этой
политики.
-
security.mac.portacl.rules задает действующую политику
mac_portacl: см. ниже.
Действующая политика mac_portacl, указанная в security.mac.portacl.rules, это текстовая строка в форме rule[,rule,...] с таким количеством правил, которое требуется.
Каждое правило задается в формате: idtype:id:protocol:port.
Параметр idtype может принимать значения uid или gid и используется для
интерпретации параметра id, в качестве id пользователя или
группы соответственно. Параметр protocol используется для
определения применимости этого правила к протоколу TCP
или UDP, он может принимать значения tcp или udp. Последний параметр, port, задает номер порта, к которому разрешается привязка
указанного пользователя или группы.
Замечание: Поскольку набор правил интерпретируется непосредственно ядром, для
ID пользователя, группы и номера порта могут быть использованы только числовые значения.
Т.е. имена пользователей, групп и сервисов портов не могут быть использованы.
По умолчанию в UNIX®-подобных системах порты с
номерами менее чем 1024 могут быть использованы только привилегированными процессами,
т.е. теми, что запущены от root. С mac_portacl(4) для
разрешения привязки непривилегированных процессов к портам с номерами ниже 1024 эти
стандартные ограничения UNIX должны быть отменены. Это
может быть выполнено путем установки переменных sysctl(8) net.inet.ip.portrange.reservedlow и net.inet.ip.portrange.reservedhigh в ноль.
Обратитесь к примерам ниже или к странице справочника mac_portacl(4) за
дальнейшей информацией.
Следующие примеры должны осветить обсуждение выше чуть лучше:
# sysctl security.mac.portacl.port_high=1023
# sysctl net.inet.ip.portrange.reservedlow=0
net.inet.ip.portrange.reservedhigh=0
Сначала мы настраиваем mac_portacl(4) для
работы со стандартными привилегированными портами и отмены обычных ограничений UNIX на привязку.
# sysctl security.mac.portacl.suser_exempt=1
Пользователь root должен быть исключен из этой политики, для
этого переменная security.mac.portacl.suser_exempt установлена
в ненулевое значение. Модуль mac_portacl(4) теперь
настроен на то поведение UNIX-подобных систем по
умолчанию.
# sysctl security.mac.portacl.rules=uid:80:tcp:80
Разрешает пользователю с UID 80 (обычно это
пользователь www) привязку к порту 80. Теперь пользователь www сможет запустить веб сервер даже без привилегии root.
# sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995
Разрешит пользователю с UID 1001 привязку к
TCP портам 110 (``pop3'') и 995 (``pop3s''). Это
позволит данному пользователю запустить сервер, принимающий соединения на портах 110 и
995.