Руководство FreeBSD
Пред. | Глава 15. Принудительный контроль доступа (MAC) | След.

# 15.8. Модуль MAC portacl

Имя модуля: `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` включает/отключает политику целиком. [1]

- `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) за дальнейшей информацией.

## 15.8.1. Примеры

Следующие примеры должны осветить обсуждение выше чуть лучше:

    # 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.

### Примечания

[1] | Вследствие ошибки переменная `sysctl` `security.mac.portacl.enabled` не будет работать в FreeBSD 5.2.1 или более ранних релизах.

Пред. | Начало | След.
Модуль MAC ifoff | Уровень выше | Политики MAC, использующие метки

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.