Настройка MAC переменными sysctl



Независимо от загрузки модулей, существует несколько частей MAC, которые могут быть настроены с использованием интерфейса sysctl. Эти переменные описаны ниже и во всех случаях значение 1 означает включение, а 0 — отключение:

• security.mac.enforce_fs по умолчанию установлена в 1 и включает политики MAC на файловых системах.

• security.mac.enforce_kld по умолчанию 1 и включает линкование политик MAC в ядре (см. kld(4)).

• security.mac.enforce_network по умолчанию 1 и включает сетевые политики MAC.

• security.mac.enforce_pipe по умолчанию 1 и включает политики MAC для каналов (pipe).

• security.mac.enforce_process по умолчанию 1 и включает политики MAC для процессов, использующих средства межпроцессного взаимодействия.

• security.mac.enforce_socket по умолчанию 1 и включает политики MAC на сокетах (см. страницу справочника socket(2)).

• security.mac.enforce_system по умолчанию 1 и включает политики MAC для действий системы, таких как учет (accounting) и перезагрузка.

• security.mac.enforce_vm по умолчанию 1 и включает политики MAC для системы виртуальной памяти.

Замечание: Каждая политика MAC поддерживает переменные sysctl. Они обычно попадают в дерево security.mac.<policyname>. Для просмотра всех переменных MAC, используйте следующую команду:

# sysctl -da | grep mac

Это должно быть интерпретировано так, что все основные политики MAC включены по умолчанию. Если модули встроены в ядро, система будет заблокирована, и скорее всего не сможет связаться с локальной сетью или с интернет, и т.д. Поэтому встраивание модулей в ядро не рекомендуется. Не потому, что это ограничит возможность отключения командой sysctl, а потому, что включение политик в виде модулей позволит администратору переключать политики системы без необходимости пересборки и переустановки новой системы.

Настройка модулей

Каждый модуль, включенный в инфраструктуру MAC, может быть или встроен в ядро, как упоминалось выше, или загружен в виде модуля ядра. Рекомендуется добавление имени модуля в файл /boot/loader.conf, этот модуль будет активирован в самом начале загрузки.

В последующих разделах будут обсуждаться различные модули MAC и их возможности. Реализация этих возможностей в определенных ситуациях также будет обсуждаться в этой главе. Некоторые модули поддерживают использование меток, которые контролируют доступ путем применения правил вида ''это разрешено, а это нет''. Настройка меток может контролировать доступ к файлам, сетевым коммуникациям и т.д. В предыдущем разделе было показано как флаг multilabel может быть установлен на файловые системы для включения контроля доступа по файлам или по разделам.

Конфигурация с одной меткой не допускает применение нескольких меток в системе, поэтому параметр tunefs называется multilabel.

Модуль MAC seeotheruids

Имя модуля: mac_seeotheruids.ko

Строка в конфигурации ядра: options MAC_SEEOTHERUIDS

Параметр загрузки: mac_seeotheruids_load="YES"

Модуль mac_seeotheruids(4) копирует и расширяет переменные sysctl security.bsd.see_other_uids и security.bsd.see_other_gids. Он не требует установки меток и может прозрачно работать с другими модулями.

После загрузки модуля, для управления им могут быть использованы следующие переменные sysctl:

• security.mac.seeotheruids.enabled включит модуль с настройками по умолчанию. Эти настройки запрещают пользователям просмотр процессов и сокетов, принадлежащих другим пользователям.

• security.mac.seeotheruids.specificgid_enabled позволит исключить определенные группы из этой политики. Для исключения определенной группы, используйте переменную sysctl security.mac.seeotheruids.specificgid=XXX. В примере выше необходимо заменить XXX на числовой ID группы.

• security.mac.seeotheruids.primarygroup_enabled используется для исключения определенной основной группы из этой политики. При использовании этой переменной security.mac.seeotheruids.specificgid_enabled может быть не установлена.

Необходимо отметить, что пользователь root не является исключением из этой политики. Это одно из самых существенных различий между MAC версией и обычными переменными, существующими по умолчанию: security.bsd.seeotheruids.

Модуль MAC bsdextended

Имя модуля: mac_bsdextended.ko

Строка конфигурации ядра: options MAC_BSDEXTENDED

Параметр загрузки: mac_bsdextended_load="YES"

Модуль mac_bsdextended(4) включает брандмауэр файловой системы. Политика этого модуля является расширением стандартной модели разрешений файловой системы, позволяя администратору создавать набор правил для защиты файлов, утилит и каталогов иерархии файловой системы в стиле брандмауэра.

Политика может быть создана с помощью утилиты, ugidfw(8), синтаксис которой похож на синтаксис ipfw(8). Другие инструменты могут быть написаны с использованием функций библиотеки libugidfw(3).

При работе с этим модулем необходимо соблюдать особую осторожность; некорректное его использование может заблокировать доступ к отдельным частям файловой системы.

Примеры

После загрузки модуля mac_bsdextended(4) для просмотра текущей настройки правил может быть использована следующая команда:

# ugidfw list

0 slots, 0 rules

Как и можно было ожидать, правила не определены. Это означает, что доступ полностью открыт. Для создания правила, которое заблокирует доступ всех пользователей, но не повлияет на root, просто запустите следующую команду:

# ugidfw add subject not uid root new object not uid root mode n

Замечание: В релизах FreeBSD до 5.3, параметр add не существует. Вместо него необходимо использовать set. Пример дан ниже.

Это очень плохая идея, поскольку такое правило запретит пользователям использовать даже самые простые команды, такие как ls. Более патриотический список правил может быть таким:

# ugidfw set 2 subject uid user1 object uid user2 mode n

# ugidfw set 3 subject uid user1 object gid user2 mode n

Эти команды запретят весь и любой доступ пользователя user1, включая просмотр подкаталогов, к домашнему каталогу пользователя user2.

Вместо user1 может быть задано not uid user2. Это включит те ограничения, о которых говорилось выше, для всех пользователей кроме одного.

Замечание: На пользователя root эти изменения не повлияют.

Материал выше должен дать общую идею как модуль mac_bsdextended(4) может быть использован в качестве средства защиты файловой системы. За дальнейшей информацией обращайтесь к страницам справочника mac_bsdextended(4) и ugidfw(8).

Модуль MAC ifoff

Имя модуля: mac_ifoff.ko

Строка конфигурации ядра: options MAC_IFOFF

Параметр загрузки: mac_ifoff_load="YES"

Модуль mac_ifoff(4) существует только для отключения сетевых интерфейсов в работающей системе и удержания их от отправки пакетов во время начальной загрузки. Это не требует установления в системе каких-либо меток, нет и зависимости от других модулей MAC.

Большая часть управления может быть выполнена через переменные sysctl.

• security.mac.ifoff.lo_enabled включает/выключает весь трафик на loopback (lo(4)) интерфейсе.

• security.mac.ifoff.bpfrecv_enabled включает/выключает весь трафик на интерфейсе Berkeley Packet Filter (bpf(4)).

• security.mac.ifoff.other_enabled включает/выключает весь трафик на всех других интерфейсах.

Одно из наиболее частых использований mac_ifoff(4) это сетевой мониторинг в среде, где сетевой трафик не должен быть разрешен во время загрузки. Другое предлагаемое применение это написание скрипта, использующего security/aide для автоматического блокирования сетевого трафика, если будут обнаружены новые или измененные файлы в защищаемых каталогах.

Модуль 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 включает/отключает политику целиком. 2

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


Дата добавления: 2018-10-26; просмотров: 250; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!