16.8. Модуль MAC portacl
Пред. | Глава 16. Принудительный контроль доступа (MAC) | След.

## 16.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` включает/отключает политику целиком. [10]

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

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

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

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

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

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