Имя модуля: 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
включает/отключает политику целиком.
[8]
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(R)-подобных системах порты с номерами
менее чем 1024 могут быть использованы только привилегированными
процессами, т.е. теми, что запущены от root
.
С mac_portacl(4) для разрешения привязки непривилегированных
процессов к портам с номерами ниже 1024 эти стандартные ограничения
UNIX(R) должны быть отменены. Это может быть выполнено путем
установки переменных 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(R) на привязку.
#
sysctl security.mac.portacl.suser_exempt=1
Пользователь root
должен быть исключен
из этой политики, для этого переменная
security.mac.portacl.suser_exempt
установлена в ненулевое значение. Модуль mac_portacl(4)
теперь настроен на то поведение UNIX(R)-подобных систем по
умолчанию.
#
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.
[8] Вследствие ошибки
переменная sysctl
security.mac.portacl.enabled
не будет работать
в FreeBSD 5.2.1 или более ранних релизах.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.