diff options
Diffstat (limited to 'documentation/content/ru/books/handbook/mac/_index.adoc')
| -rw-r--r-- | documentation/content/ru/books/handbook/mac/_index.adoc | 1048 |
1 files changed, 365 insertions, 683 deletions
diff --git a/documentation/content/ru/books/handbook/mac/_index.adoc b/documentation/content/ru/books/handbook/mac/_index.adoc index e7626c311e..112221a658 100644 --- a/documentation/content/ru/books/handbook/mac/_index.adoc +++ b/documentation/content/ru/books/handbook/mac/_index.adoc @@ -1,12 +1,14 @@ --- -title: Глава 15. Принудительный контроль доступа (MAC) -part: Часть III. Системное администрирование -prev: books/handbook/security +description: 'Эта глава посвящена инфраструктуре MAC и набору модулей политики безопасности, предоставляемых FreeBSD для включения различных механизмов безопасности' next: books/handbook/audit -showBookMenu: true -weight: 19 params: - path: "/books/handbook/mac/" + path: /books/handbook/mac/ +part: 'Часть III. Администрирование системы' +prev: books/handbook/jails +showBookMenu: true +tags: ["MAC", "labels", "security", "configuration", "nagios"] +title: 'Глава 18. Принудительное управление доступом (MAC)' +weight: 22 --- [[mac]] @@ -17,7 +19,7 @@ params: :icons: font :sectnums: :sectnumlevels: 6 -:sectnumoffset: 15 +:sectnumoffset: 18 :partnums: :source-highlighter: rouge :experimental: @@ -48,137 +50,142 @@ include::../../../../../shared/asciidoctor.adoc[] endif::[] [[mac-synopsis]] -== Краткий обзор +== Обзор -FreeBSD 5.X представляет новые расширения системы безопасности от проекта TrustedBSD, основанные на документах POSIX(R).1e. Два из наиболее важных нововведений в механизмах безопасности это списки контроля доступа файловой системы (Access Control Lists, ACLs) и принудительный контроль доступа Mandatory Access Control, MAC). Инфраструктура позволяет загружать новые модули контроля доступа, реализуя новые политики безопасности. Некоторые из них предоставляют защиту ключевых подсистем, защищая определенный сервис, в то время как другие предоставляют исчерпывающую систему безопасности с метками на всех субъектах и объектах. Контроль называется принудительным, поскольку применение контроля производится администраторами и системой, и не зависит от решения пользователей, как это происходит при обычном контроле доступа (Discretionary Access Control, DAC, стандартные файловые и System V IPC права в FreeBSD). +FreeBSD поддерживает расширения безопасности, основанные на документах POSIX(R).1e. Эти механизмы безопасности включают списки контроля доступа к файловой системе (crossref:security[fs-acl,“Списки контроля доступа”]) и принудительный контроль доступа (MAC). MAC позволяет загружать модули контроля доступа для реализации политик безопасности. Некоторые модули обеспечивают защиту узкого подмножества системы, укрепляя определённую службу. Другие предоставляют всеобъемлющую безопасность с метками на всех субъектах и объектах. Обязательная часть определения указывает на то, что применение контроля осуществляется администраторами и операционной системой. Это отличается от механизма безопасности по умолчанию — обычного контроля доступа (Discretionary Access Control, DAC), где применение контроля остаётся на усмотрение пользователей. -Вся эта глава фокусируется на инфраструктуре принудительного контроля доступа и настройке подключаемых модулей, реализующих различные политики безопасности. +Эта глава посвящена инфраструктуре MAC и набору модулей политики безопасности, предоставляемых FreeBSD для включения различных механизмов безопасности. -После прочтения этой главы вы узнаете: +Прочитав эту главу, вы будете знать: -* Какие модули MAC включены в настоящее время в FreeBSD, какие политики с ними связаны. -* Что способны реализовать политики MAC, различие между политиками с метками (label) и без меток. -* Как эффективно настроить систему для использования инфраструктуры MAC. -* Как настроить различные политики, используемые модулями MAC. -* Как реализовать более защищенную среду, используя инфраструктуру MAC и приведенные примеры. -* Как протестировать настройку MAC, чтобы убедиться, что инфраструктура была реализована правильно. +* Терминология, связанная с инфраструктурой MAC. +* Возможности модулей политики безопасности MAC, а также разница между политикой с метками и без меток. +* Соображения, которые необходимо учитывать перед настройкой системы для использования инфраструктуры MAC. +* Какие модули политики безопасности MAC включены в FreeBSD и как их настроить. +* Как реализовать более безопасную среду с использованием инфраструктуры MAC. +* Как проверить конфигурацию MAC, чтобы убедиться в правильном использовании инфраструктуры. -Перед прочтением этой главы вам потребуется: +Прежде чем читать эту главу, вы должны: -* Понимание основ UNIX(R) и FreeBSD (crossref:basics[basics, Основы UNIX]). -* Ознакомиться с основами настройки/компилирования ядра (crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD]). -* Иметь некоторые понятия о безопасности и как она относится к FreeBSD (crossref:security[security, Безопасность]). +* Понимать основы UNIX(R) и FreeBSD (crossref:basics[basics,Основы FreeBSD]). +* Иметь некоторое представление о безопасности и о том, как она относится к FreeBSD (crossref:security[security,Безопасность]). [WARNING] ==== +Неправильная настройка MAC может привести к потере доступа к системе, недовольству пользователей или невозможности использования функций, предоставляемых Xorg. Важно отметить, что нельзя полагаться исключительно на MAC для полной защиты системы. Инфраструктура MAC лишь дополняет существующую политику безопасности. Без грамотных мер безопасности и регулярных проверок система никогда не будет полностью защищена. -Неправильное использование информации этой главы может вызвать потерю доступа к системе, проблемы у пользователей, или невозможность запуска XFree86(TM). Что более важно, MAC не должен восприниматься как полная защита системы. Инфраструктура MAC лишь усиливает имеющуюся систему безопасности: без применения методов защиты и регулярных проверок, система никогда не станет полностью защищенной. - -Необходимо также учесть, что примеры, приведенные в этой главе, это всего лишь примеры. Не рекомендуется дублирование этих настроек для реальных задач. Реализация политик безопасности требует вдумчивого планирования. Тот, кто не понял полностью как все это на самом деле работает, может столкнуться с необходимостью повторной полной перенастройки системы безопасности для многих файлов и каталогов. +Примеры, приведённые в этой главе, предназначены для демонстрации, и их настройки _не_ следует применять в рабочей системе. Внедрение любой политики безопасности требует глубокого понимания, правильного проектирования и тщательного тестирования. ==== -=== Что не будет затронуто - -В этой главе охвачен широкий спектр вопросов безопасности, относящихся к инфраструктуре MAC. однако разработка политик MAC не будет затронута. Несколько модулей, включенных в инфраструктуру MAC, имеют особые характеристики, которые предназначены для тестирования и разработки новых модулей. Это относится к модулям/политикам man:mac_test[4], man:mac_stub[4] и man:mac_none[4]. За дальнейшей информацией по этим модулям и различным предоставляемым ими механизмам, обратитесь к соответствующим страницам справочника. +Хотя в этой главе рассматривается широкий спектр вопросов безопасности, связанных с инфраструктурой MAC, разработка новых модулей политики безопасности MAC не будет освещена. Ряд модулей политики безопасности, включенных в фреймворк MAC, обладают специфическими характеристиками, которые предоставляются как для тестирования, так и для разработки новых модулей. Дополнительную информацию об этих модулях политики безопасности и предоставляемых ими механизмах можно найти в man:mac_test[4], man:mac_stub[4] и man:mac_none[4]. [[mac-inline-glossary]] -== Ключевые термины этой главы - -Перед чтением этой главы необходимо ознакомиться с некоторыми ключевыми терминами. Это возможно разрешит возникающие вопросы и предотвратит перегрузку материала новыми терминами и информацией. +== Ключевые термины + +В документации FreeBSD при обращении к инфраструктуре MAC используются следующие ключевые термины: + +* _отдел (compartment)_: набор программ и данных, которые должны быть разделены или изолированы, при этом пользователи получают явный доступ к определенным компонентам системы. Компартмент представляет собой группу, такую как рабочая группа, отдел, проект или тема. Компартменты позволяют реализовать политику безопасности на основе принципа "необходимо знать". +* _целостность (integrity)_: уровень доверия, который может быть оказан данным. По мере повышения целостности данных возрастает и возможность доверять этим данным. +* _уровень (level)_: увеличенное или уменьшенное значение атрибута безопасности. По мере повышения уровня его безопасность также считается более высокой. +* _метка (label)_: атрибут безопасности, который может быть применён к файлам, каталогам или другим элементам системы. Его можно рассматривать как штамп конфиденциальности. Когда метка назначается файлу, она описывает его свойства безопасности и разрешает доступ только файлам, пользователям и ресурсам с аналогичными настройками безопасности. Значение и интерпретация меток зависят от конфигурации политики. Некоторые политики рассматривают метку как показатель целостности или секретности объекта, тогда как другие могут использовать метки для хранения правил доступа. +* _множественные метки (multilabel)_: это свойство является параметром файловой системы, которое можно установить в однопользовательском режиме с помощью man:tunefs[8], во время загрузки с использованием man:fstab[5] или при создании новой файловой системы. Эта опция позволяет администратору применять различные метки MAC к разным объектам. Данная опция применяется только к модулям политики безопасности, которые поддерживают маркировку метками (далее — маркировку). +* _одиночная метка (single label)_: политика, при которой вся файловая система использует одну метку для контроля доступа к потокам данных. Если параметр `multilabel` не установлен, все файлы будут соответствовать одной и той же настройке метки. +* _объект (object)_: сущность, через которую информация передается под управлением _субъекта_. Это включает каталоги, файлы, поля, экраны, клавиатуры, память, магнитные накопители, принтеры или любые другие устройства хранения или передачи данных. Объект является контейнером данных или системным ресурсом. Доступ к объекту фактически означает доступ к его данным. +* _субъект (subject)_: любая активная сущность, вызывающая передачу информации между _объектами_, например, пользователь, пользовательский процесс или системный процесс. В FreeBSD это почти всегда поток, действующий в процессе от имени пользователя. +* _политика (policy)_: набор правил, определяющий, как достичь поставленных целей. Политика обычно документирует, каким образом следует обращаться с определёнными элементами. В этой главе под политикой понимается набор правил, контролирующих поток данных и информации, а также определяющих, кто имеет доступ к этим данным и информации. +* _верхний уровень (high-watermark)_: этот тип политики позволяет повышать уровни безопасности для доступа к информации более высокого уровня. В большинстве случаев исходный уровень восстанавливается после завершения процесса. В настоящее время в инфраструктуре MAC в FreeBSD отсутствует такой тип политики. +* _нижний уровень (low-watermark)_: этот тип политики позволяет понижать уровни безопасности для доступа к информации с более низким уровнем защиты. В большинстве случаев исходный уровень безопасности пользователя восстанавливается после завершения процесса. Единственный модуль политики безопасности в FreeBSD, использующий этот подход, — это man:mac_lomac[4]. +* _ чувствительность (sensivity)_: обычно используется при обсуждении Многоуровневой Безопасности (Multilevel Security, MLS). Уровень чувствительности описывает, насколько важными или секретными должны быть данные. По мере увеличения уровня чувствительности возрастает и важность секретности, или конфиденциальности, данных. -* _отдел_ (compartment): Отдел это набор программ и данных, которые необходимо отделить, и где пользователи получают явный доступ к отдельным компонентам системы. Отдел представляет группирование, например рабочую группу, департамент, проект или тему. С использованием отделов возможна реализация политики с явно определенным доступом. -* _целостность_ (integrity): Целостность, как ключевая концепция, это уровень доверия, который может быть присвоен данным. Поскольку целостность данных повышается, это дает возможность доверять данным. -* _метка_ (label): Метка является инструментом безопасности, она может быть применена к файлам, каталогам и другим сущностям системы. Ее можно представить как штамп конфиденциальности; метка, помещенная на файл, описывает уровень секретности данного файла и разрешит доступ только файлам, пользователям, ресурсам и т.д. с теми же или меньшими установками безопасности. Некоторые из политик могут обрабатывать метки различными способами; это будет обсуждаться в разделе политик ниже. -* _multilabel_ (множественные метки): свойство `multilabel` это параметр файловой системы, который может быть установлен в однопользовательском режиме с помощью утилиты man:tunefs[8], во время загрузки через файл man:fstab[5], или при создании новой файловой системы. Этот параметр позволяет администратору помещать различные метки MAC на различные объекты. разрешает помещение множественных MAC меток на файлы и каталоги файловой системы. Этот параметр применим только к политикам с метками. -* _объект_ (object): Объект или системный объект это сущность, через которую информация проходит к _субъекту_. Это могут быть каталоги, файлы, поля, экраны, клавиатуры, память, магнитные накопители, принтеры или любые другие устройства хранения/перемещения данных. В сущности это контейнер данных или ресурс системы; доступ к _объекту_ фактически означает доступ к данным. -* _политика_ (policy): Набор правил, определяющих как достичь объекта. _Политика_ обычно документирует обращение с определенными элементами. В этой главе _политика_ будет означать _политику безопасности_; т.е. коллекцию правил, которые будут контролировать поток данных и определять кто будет иметь доступ к этим данным. -+ -* _чувствительность_ (sensitivity): Обычно используется при обсуждении MLS. Уровень чувствительности это термин, используемый для описания того, насколько важны или секретны данные. Увеличение уровня чувствительности означает важность данных. -* _одиночная метка_ (single label): означает, что вся файловая система использует одну метку для определения доступа всего потока данных. Когда файловая система использует эту установку, что происходит всегда, если не установлен параметр `multilabel`, ко всем файлам будет применяться одна и та же установка метки. -* _субъект_ (subject): субъект это любая активная сущность, вызывающая перемещение информации между _объектами_; т.е. пользователь, пользовательский обработчик, системный процесс и т.д. В FreeBSD это почти всегда поток, работающий в процессе или представляющий пользователя. - -[[mac-initial]] -== Описание MAC +[[mac-understandlabel]] +== Метки MAC -Усвоив все эти термины, рассмотрим как MAC повышает безопасность системы в целом. Различные политики, предоставляемые инфраструктурой MAC, могут быть использованы для защиты сети и файловых систем, блокирования доступа пользователей к определенным портам и сокетам, и так далее. Возможно, наилучшее использование политик это сочетание их вместе путем загрузки нескольких модулей одновременно, для создания многослойной защищенной среды. В многослойной среде безопасности несколько политик обеспечивают контролируемость защиты. Это отличается от усиления защиты, когда обычно усиливаются элементы системы, используемой в определенных целях. Единственным недостатком является дополнительная административная нагрузка в случае множественных меток файловой системы, установки сетевого доступа по пользователям, и т.д. +Метка MAC — это атрибут безопасности, который может быть применён к субъектам и объектам в системе. При установке метки администратор должен понимать её последствия, чтобы избежать неожиданного или нежелательного поведения системы. Доступные атрибуты объекта зависят от загруженного модуля политики, так как модули политики интерпретируют свои атрибуты по-разному. -Эти недостатки минимальны по сравнению с длительным эффектом функционирования инфраструктуры; например, возможность выбора политик, необходимых для определенных конфигураций, уменьшает потерю производительности. Возможность удаления поддержки не используемых политик может увеличить общую производительность системы, а также дает гибкость выбора. Хорошая реализация удовлетворит общие требования безопасности и будет эффективно использовать различные политики, предоставляемые инфраструктурой. +Метка безопасности объекта используется как часть решения по контролю доступа в соответствии с политикой. В некоторых политиках метка содержит всю информацию, необходимую для принятия решения. В других политиках метки могут обрабатываться как часть более обширного набора правил. -Система, использующая возможности MAC, должна как минимум гарантировать, что пользователю не разрешается самостоятельно изменять атрибуты безопасности; все утилиты пользователя, программы и скрипты должны работать с ограничениями доступа, налагаемыми выбранной политикой; весь контроль правил доступа MAC находится в руках системного администратора. +Существует два типа политик меток: одноуровневые и многоуровневые. По умолчанию система использует одноуровневые метки. Администратор должен учитывать преимущества и недостатки каждого типа, чтобы реализовать политики, соответствующие требованиям модели безопасности системы. -Право выбора правильных политик безопасности принадлежит только системному администратору. В некоторых случаях может потребоваться ограничение доступа через сеть; для этого могут пригодиться man:mac_portacl[4], man:mac_ifoff[4] и даже man:mac_biba[4]. В других случаях может быть необходима строгая конфиденциальность объектов в файловой системе. Для этого существуют политики man:mac_bsdextended[4] и man:mac_mls[4]. +Политика безопасности с одной меткой разрешает использование только одной метки для каждого субъекта или объекта. Поскольку политика с одной меткой применяет единый набор прав доступа во всей системе, это снижает нагрузку на администрирование, но уменьшает гибкость политик, поддерживающих маркировку. Однако во многих средах политика с одной меткой может быть всем, что требуется. -Выбор политики может быть сделан на основе конфигурации сети. Возможно только определенным пользователям можно разрешить доступ через man:ssh[1] к сети или интернет. В таких ситуациях подойдет политика man:mac_portacl[4]. Но что необходимо сделать для файловых систем? Должен ли доступ к определенным каталогам быть запрещен для других групп или определенных пользователей? Или мы должны ограничить доступ пользователей или утилит к определенным файлам путем классификации определенных объектов? +Политика с одной меткой несколько похожа на DAC, поскольку `root` настраивает политики так, чтобы пользователи попадали в соответствующие категории и уровни доступа. Заметное отличие заключается в том, что многие модули политики также могут ограничивать пользователя `root`. Базовый контроль над объектами затем передаётся группе, но `root` может отозвать или изменить настройки в любое время. -В случае файловой системы, доступ может считаться конфиденциальным для отдельных пользователей, но не для всех. Например, большая команда разработчиков может быть разбита на небольшие группы. Разработчикам проекта A может быть не разрешен доступ к объектам, написанным разработчиками из проекта B. Хотя им может понадобиться доступ к объектам, созданным разработчиками проекта C; это реально встречающаяся ситуация. С помощью различных политик, предоставляемых инфраструктурой MAC, пользователи могут быть разделены на эти три группы и затем получить доступ к соответствующим областям без опасности утечки информации. +Когда это уместно, политику с несколькими метками можно установить на файловой системе UFS, передав `multilabel` в man:tunefs[8]. Политика с несколькими метками позволяет каждому субъекту или объекту иметь свою собственную независимую метку MAC. Решение использовать политику с несколькими метками или одной меткой требуется только для политик, реализующих функцию маркировки, таких как `biba`, `lomac` и `mls`. Некоторые политики, такие как `seeotheruids`, `portacl` и `partition`, вообще не используют метки. -Таким образом, каждая политика имеет уникальный способ взаимодействия с общей безопасностью системы. Выбор политики должен быть основан на хорошо продуманной политике безопасности. Во многих случаях политика должна быть полностью пересмотрена и реализована заново для всей системы. Понимание различных политик, предоставляемых инфраструктурой MAC, поможет администраторам выбрать лучшую политику в своей ситуации. +Использование политики с несколькими метками на разделе и установление модели безопасности с несколькими метками может увеличить административную нагрузку, так как всё в этой файловой системе имеет метку. Это включает каталоги, файлы и даже узлы устройств. -Стандартное ядро FreeBSD не включает параметр MAC; необходимо добавить следующий параметр ядра перед тем, как пробовать какие-либо из примеров или применять информацию этой главы: +Следующая команда установит `multilabel` для указанной файловой системы UFS. Это можно сделать только в однопользовательском режиме и не является обязательным для файловой системы подкачки: -[.programlisting] +[source, shell] .... -options MAC +# tunefs -l enable / .... -Затем необходимо пересобрать и переустановить ядро. - -[CAUTION] +[NOTE] ==== - -Хотя различные страницы справочника для модулей MAC сообщают, что они могут быть встроены в ядро, возможна блокировка доступа системы к сети и другие побочные эффекты. Включение MAC очень похоже на включение брандмауэра, но необходимо быть внимательным, чтобы полностью не заблокировать систему. Необходимо предусмотреть возможность возврата к предыдущей конфигурации, а реализация MAC удаленно должна производиться с особой осторожностью. +Некоторые пользователи столкнулись с проблемами при установке флага `multilabel` на корневом разделе. Если это ваш случай, ознакомьтесь с crossref:mac[mac-troubleshoot, Устранение неполадок инфраструктуры MAC]. ==== -[[mac-understandlabel]] -== Метки MAC +Поскольку политика с несколькими метками устанавливается для каждой файловой системы, она может не потребоваться, если структура файловых систем хорошо продумана. Рассмотрим пример модели безопасности MAC для веб-сервера FreeBSD. На этой машине используется единая метка `biba/high` для всего в стандартных файловых системах. Если веб-сервер должен работать с `biba/low`, чтобы предотвратить возможность записи вверх, его можно установить в отдельную файловую систему UFS [.filename]#/usr/local# с меткой `biba/low`. -Метка MAC это атрибут безопасности, который может быть применен к субъектам и объектам всей системы. +=== Конфигурация меток -При установке метки пользователь должен в точности понимать, что именно она делает. Атрибуты, доступные для объекта, зависят от загруженной политики, а политики интерпретируют свои атрибуты совершенно различным образом. Результатом недостаточного понимания настроек может стать их неправильная реализация, что может привести к неожиданному, и возможно нежелательному поведению системы. +Практически все аспекты настройки модуля политики меток будут выполняться с помощью базовых системных утилит. Эти команды предоставляют простой интерфейс для настройки объекта или субъекта, а также для изменения и проверки конфигурации. -Метка безопасности на объекте используется политикой для определения правил доступа. Для некоторых политик метка сама по себе содержит всю необходимую для этого информацию, в других моделях метки могут обрабатываться как часть большого набора правил, и т.д. +Вся настройка может быть выполнена с помощью `setfmac`, который используется для установки меток MAC на объектах системы, и `setpmac`, который используется для установки меток на субъектах системы. Например, чтобы установить метку MAC `biba` в значение `high` для [.filename]#test#: -Например, установка метки в `biba/low` на файле присвоит этому файлу метку, обрабатываемую политикой Biba со значением "low". +[source, shell] +.... +# setfmac biba/high test +.... -Несколько политик, поддерживающих метки в FreeBSD, предоставляют три определенные предустановленные метки. Это низкая, высокая и равная метки. Хотя они устанавливают контроль различными способами для каждой политики, вы можете быть уверены, что низкая метка задаст минимальные установки, равная метка означает отмену или недействительность, а высокая метка установит максимально возможные настройки в политиках Biba и MLS. +Если конфигурация выполнена успешно, командная строка вернётся без ошибок. Частая ошибка — `Permission denied`, которая обычно возникает при установке или изменении метки на защищённом объекте. Другие условия могут вызывать иные сбои. Например, файл может не принадлежать пользователю, пытающемуся изменить метку объекта, объект может не существовать или быть доступным только для чтения. Обязательная политика не позволит процессу изменить метку файла, возможно, из-за свойств самого файла, процесса или предлагаемого нового значения метки. Например, если пользователь с низким уровнем целостности попытается изменить метку файла с высоким уровнем целостности или если пользователь с низким уровнем целостности попытается изменить метку файла с низкого уровня на высокий, эти операции завершатся неудачей. -При применении в файловой системе одиночной метки, только одна метка может быть использована для объектов. Это вызовет установку одних и тех же прав доступа для всей системы, и во многих случаях это все, что необходимо. Тем не менее, существует несколько ситуаций, в которых на объекты и субъекты файловой системы могут быть установлены множественные метки. В этих ситуациях необходимо с помощью man:tunefs[8] установить параметр `multilabel`. +Системный администратор может использовать `setpmac` для переопределения настроек модуля политики, назначив другую метку вызываемому процессу: -В случае Biba и MLS может быть установлена числовая метка для указания точного уровня иерархического контроля. Этот числовой уровень используется для разделения или сортировки информации по различным группам классификации, разрешающей доступ только к этой группе или группе с более высоким уровнем. +[source, shell] +.... +# setfmac biba/high test +Permission denied +# setpmac biba/low setfmac biba/high test +# getfmac test +test: biba/high +.... -В большинстве случаев системный администратор использует только одну метку на всю файловую систему. +Для уже запущенных процессов, таких как sendmail, обычно используется `getpmac` вместо этого. Эта команда принимает идентификатор процесса (PID) вместо имени команды. Если пользователи пытаются работать с файлом, к которому у них нет доступа, в соответствии с правилами загруженных модулей политики, будет отображаться ошибка `Операция не разрешена (Operation not permitted)`. -_Постойте, но это же похоже на DAC! Я думал, что MAC дает контроль только администратору._ Это утверждение все еще верно, только `root` контролирует и настраивает политики, так что пользователи помещаются в соответствующие категории/уровни доступа. Многие политики могут ограничить также и пользователя `root`. Базовый контроль над объектами затем передается группе, но пользователь `root` может отменить или изменить эти настройки в любое время. Данная иерархическая модель соответствует таким политикам как Biba и MLS. +=== Предопределенные Метки -=== Настройка меток +Несколько модулей политики FreeBSD, поддерживающих функцию меток, предлагают три предопределённых метки: `low`, `equal` и `high`, где: -Практически все действия по настройке политики с метками могут быть выполнены с использованием утилит базовой системы. Эти команды обеспечивают простой интерфейс для настройки объектов или субъектов, или для изменения и проверки настроек. +* `low` считается минимальным уровнем метки, который может быть установлен для объекта или субъекта. Установка этого уровня для объектов или субъектов блокирует их доступ к объектам или субъектам, помеченным как `high`. +* `equal` устанавливает, что субъект или объект отключён или не затронут, и должен использоваться только для объектов, считающихся исключёнными из политики. +* `high` предоставляет объекту или субъекту наивысший уровень доступа, доступный в модулях политик Biba и MLS. -Все настройки могут быть выполнены с использованием утилит man:setfmac[8] и man:setpmac[8]. Команда `setfmac` используется для установки меток MAC на системные объекты, а команда `setpmac` используется для установки меток на системные субъекты. Выполните: +Такие модули политик включают man:mac_biba[4], man:mac_mls[4] и man:mac_lomac[4]. Каждый из предопределённых меток устанавливает различные директивы потока информации. Обратитесь к справочной странице модуля, чтобы определить особенности стандартных конфигураций меток. -[source,shell] -.... -# setfmac biba/high test -.... +=== Числовые метки -Если не произойдет ошибок, будет возвращено приглашение командной строки, как и после команд man:chmod[1] и man:chown[8]. В некоторых случаях может появиться ошибка `Permission denied`, и она обычно появляется при установке или изменении метки на объект с ограничениями. Системный администратор для обхода этой проблемы может использовать следующие команды: +Модули политик Biba и MLS поддерживают числовую метку, которая может быть установлена для указания точного уровня иерархического контроля. Этот числовой уровень используется для разделения или сортировки информации по различным группам классификации, разрешая доступ только к этой группе или к группе более высокого уровня. Например: -[source,shell] +[.programlisting] .... -# setfmac biba/high test -Permission denied -# setpmac biba/low setfmac biba/high test -# getfmac test -test: biba/high +biba/10:2+3+6(5:2+3-20:2+3+4+5+6) .... -Как видно из примера выше, команда `setpmac` может быть использована для изменения установок политики путем присвоения иной метки вызывающему процессу. Утилита `getpmac` обычно используется с существующим на данный момент процессом, таким как sendmail, хотя она принимает PID вместо команды, ее действие аналогично. Если пользователи попытаются манипулировать файлами, к которым у них нет доступа в соответствии с правилами загруженных политик, функцией `mac_set_link` будет выдано сообщение об ошибке `Operation not permitted`. +может интерпретироваться как "Метка/уровень политики Biba 10: отделы 2, 3 и 6: (уровень 5 ..." + +В этом примере первая степень будет считаться эффективной с эффективными отделами, вторая степень — низкой, а последняя — высокой. В большинстве конфигураций такие детальные настройки не требуются, так как они считаются расширенными конфигурациями. -==== Пользователи и установки меток +Системные объекты имеют только текущий уровень и категорию. Системные субъекты отражают диапазон доступных прав в системе, а сетевые интерфейсы используются для контроля доступа. -Пользователям необходимо иметь метки, чтобы их файлы и процессы могли правильно взаимодействовать с определенной в системе политикой безопасности. Это настраивается через файл [.filename]#login.conf# путем использования классов. Каждая политика, использующая метки, реализует установку класса пользователя. +Уровни и категории в паре субъект-объект используются для построения отношения, известного как _доминирование_, при котором субъект доминирует над объектом, объект доминирует над субъектом, ни один не доминирует над другим или оба доминируют друг над другом. Случай «оба доминируют» возникает, когда две метки равны. В силу природы информационных потоков в модели Biba пользователь имеет права на набор категорий, которые могут соответствовать проектам, но объекты также имеют набор категорий. Пользователям может потребоваться ограничить свои права с помощью `su` или `setpmac`, чтобы получить доступ к объектам в категории, от которой они не ограничены. -Пример записи, содержащей все политики, приведенные ниже: +=== Пользовательские метки + +Пользователи должны иметь метки, чтобы их файлы и процессы корректно взаимодействовали с политикой безопасности, определенной в системе. Это настраивается в [.filename]#/etc/login.conf# с использованием классов входа. Каждый модуль политики, использующий метки, будет реализовывать настройку класса пользователя. + +Чтобы установить метку класса пользователя по умолчанию, которая будет применяться MAC, добавьте запись `label`. Ниже приведен пример записи `label`, содержащей каждый модуль политики. Обратите внимание, что в реальной конфигурации администратор никогда не включает все модули политики. Рекомендуется ознакомиться с остальной частью этой главы перед внедрением любой конфигурации. [.programlisting] .... @@ -187,7 +194,7 @@ default:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\ - :manpath=/usr/shared/man /usr/local/man:\ + :manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ @@ -204,125 +211,86 @@ default:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ - :label=partition/13,mls/5,biba/10(5-15),lomac10[2]: + :label=partition/13,mls/5,biba/10(5-15),lomac/10[2]: .... -Параметр `label` используется для установки метки MAC по умолчанию для класса пользователя. Пользователи не смогут изменять это значение, поэтому его можно признать не опциональным. В реальной ситуации администратору никогда не потребуется включать каждую политику. Рекомендуется прочесть главу полностью перед реализацией любой из этих настроек. - -[NOTE] -==== -Пользователи могут изменить свою метку после входа; однако политика накладывает ограничение на это изменение. В примере выше политике Biba указано, что минимальная целостность процесса 5, максимальная 15, а эффективная целостность по умолчанию 10. Процесс будет работать на уровне 10, пока метка не будет изменена, например если пользователь использует команду setpmac, которую Biba ограничит диапазоном, установленным при входе. -==== - -Во всех случаях после изменения [.filename]#login.conf#, база данных "login class capability" должна быть пересобрана с использованием команды `cap_mkdb` и это будет отражено в каждом последующем примере главы. +Хотя пользователи не могут изменить значение по умолчанию, они могут изменить свою метку после входа в систему, в соответствии с ограничениями политики. В приведённом выше примере политика Biba указывает, что минимальный уровень целостности процесса — `5`, максимальный — `15`, а эффективная метка по умолчанию — `10`. Процесс будет выполняться с меткой `10`, пока не решит изменить её, например, если пользователь воспользуется `setpmac`, что будет ограничено политикой Biba в рамках заданного диапазона. -Полезно отметить, что количество пользователей, которым требуются различные классы, во многих сетях может быть велико. Необходимо тщательное планирование, поскольку управление такой сетью может серьезно усложниться. +После любого изменения в файле [.filename]#login.conf# необходимо перестроить базу данных возможностей классов входа с помощью команды `cap_mkdb`. -В будущих версиях FreeBSD появится новый способ связывания пользователей с метками; однако, он будет доступен только через некоторое время после выхода FreeBSD 5.3. +Многие сайты имеют большое количество пользователей, требующих нескольких различных классов пользователей. Требуется тщательное планирование, так как это может стать сложным в управлении. -==== Сетевые интерфейсы и установка меток +=== Метки сетевых интерфейсов -Метки также могут быть установлены на сетевые интерфейсы, для контроля потока данных в сети. Во всех случаях они функционируют аналогично тому, как политики по отношению к объектам. Пользователи с высокими установками, например, `biba`, не смогут получить доступ к сетевым интерфейсам с низкими установками. +Метки могут быть установлены на сетевых интерфейсах для помощи в контроле потока данных в сети. Политики, использующие метки сетевых интерфейсов, работают так же, как политики, применяемые к объектам. Например, пользователи с высокими уровнями в Biba не смогут получить доступ к сетевым интерфейсам с меткой `low`. -Для установки MAC меток на сетевых интерфейсах параметр `maclabel` может быть передан `ifconfig`. Например: +При установке MAC-метки на сетевых интерфейсах, `maclabel` может быть передан в `ifconfig`: -[source,shell] +[source, shell] .... # ifconfig bge0 maclabel biba/equal .... -установит MAC метку `biba/equal` на интерфейс man:bge[4]. При использовании метки, подобной `biba/high(low-high)` вся метка должна быть взята в кавычки, иначе будет выдано сообщение об ошибке. - -Каждая политика, использующая метки, снабжена переменной `sysctl`, которая может быть использована для отключения MAC меток на сетевых интерфейсах. Установка метки в `equal` будет иметь подобный эффект. Просмотрите вывод команды `sysctl`, страницы справочника для политик, или дальнейшую информацию из этой главы по этим переменным. +Этот пример установит метку MAC `biba/equal` на интерфейсе `bge0`. При использовании настройки вида `biba/high(low-high)` всю метку следует заключить в кавычки, чтобы избежать ошибки. -=== Одиночные или множественные метки? +Каждый модуль политики, поддерживающий метки, имеет настраиваемый параметр, который может использоваться для отключения метки MAC на сетевых интерфейсах. Установка метки в значение `equal` даст аналогичный эффект. Для получения дополнительной информации об этих настраиваемых параметрах ознакомьтесь с выводом `sysctl`, справочными страницами политик и информацией в остальной части этой главы. -По умолчанию система будет использовать параметр `singlelabel`. Но что это означает для администратора? Существуют несколько различий между политиками, каждая из которых правильна сама по себе, но имеет свои доводы за и против относительно гибкости модели безопасности системы. +[[mac-planning]] +== Планирование конфигурации безопасности -`singlelabel` (одиночная метка) разрешает использование только одной метки, например `biba/high`, для каждого объекта или субъекта. Ее преимущество в меньшей нагрузке на системного администратора, а недостаток в малой гибкости политик, поддерживающих метки. Многие администраторы в своих политиках безопасности могут предпочесть использование параметра `multilabel`. +Прежде чем внедрять какие-либо политики MAC, рекомендуется этап планирования. На этапе планирования администратор должен учесть требования и цели внедрения, такие как: -С параметром `multilabel` каждый субъект или объект может иметь собственную метку MAC, в то время как со стандартным параметром `singlelabel` возможна только одна метка на весь раздел. Параметры `multilabel` и `singlelabel` требуются только для политик, реализующих метки, включая Biba, Lomac, MLS и SEBSD. +* Как классифицировать информацию и ресурсы, доступные в целевых системах. +* Какую информацию или ресурсы следует ограничить в доступе, а также тип ограничений, которые должны быть применены. +* Какие модули MAC потребуются для достижения этой цели. -Во многих случаях `multilabel` может вообще не потребоваться. Предположим следующую ситуацию и модель безопасности: +Пробный запуск доверенной системы и её конфигурации должен быть выполнен _до_ использования реализации MAC в производственных системах. Поскольку различные среды имеют разные потребности и требования, создание полного профиля безопасности уменьшит необходимость изменений после ввода системы в эксплуатацию. -* FreeBSD веб-сервер, использующий инфраструктуру MAC и набор различных политик. -* Этому компьютеру потребуется лишь одна метка, `biba/high`, для всей системы. Файловой системе не нужен параметр `multilabel`, поскольку по умолчанию работает одиночная метка. -* Но поскольку этот компьютер будет веб сервером, процесс веб сервера должен быть запущен с `biba/low` для предотвращения записи. Политика Biba и то, как она работает, будет обсуждаться позже, поэтому предыдущий комментарий сложно интерпретировать; просто продолжайте чтение. Сервер может использовать дисковый раздел с установленной меткой `biba/low` для большинства, если не для всех своих операций. В этом примере отсутствуют многие детали, такие как ограничения на данные, конфигурация системы и установки пользователей; однако, это лишь предварительный пример. +Рассмотрим, как инфраструктура MAC усиливает безопасность системы в целом. Различные модули политики безопасности, предоставляемые инфраструктурой MAC, могут использоваться для защиты сети и файловых систем или для блокировки доступа пользователей к определённым портам и сокетам. Возможно, наилучшее применение модулей политики — это загрузка нескольких модулей политики безопасности одновременно для создания среды MLS. Такой подход отличается от политики усиления защиты, которая обычно укрепляет элементы системы, используемые только для определённых целей. Недостатком MLS является увеличение административных затрат. -Если используется любая из политик, не поддерживающих метки, параметр `multilabel` не требуется. Сюда включаются политики `seeotheruids`, `portacl` и `partition`. - -Необходимо также отметить, что использование параметра `multilabel` на разделе и установление модели безопасности, основанной на функциональности `multilabel`, может повлечь за собой множество дополнительной административной работы, поскольку всему в файловой системе должны быть присвоены метки. Это включает каталоги, файлы, и даже файлы устройств. - -Следующая команда установит параметр `multilabel` на файловых системах. Это может быть сделано только в однопользовательском режиме: - -[source,shell] -.... -# tunefs -l enable / -.... +Накладные расходы минимальны по сравнению с долгосрочным эффектом от инфраструктуры, который предоставляет возможность выбирать необходимые политики для конкретной конфигурации и минимизирует снижение производительности. Уменьшение поддержки ненужных политик может повысить общую производительность системы, а также обеспечить гибкость выбора. Хорошая реализация должна учитывать общие требования безопасности и эффективно внедрять различные модули политик безопасности, предоставляемые инфраструктурой. -Это не требуется для файловой системы подкачки. +Система, использующая MAC, гарантирует, что пользователь не сможет по своему желанию изменять атрибуты безопасности. Все пользовательские утилиты, программы и скрипты должны работать в рамках ограничений, установленных правилами доступа выбранных модулей политики безопасности, а управление правилами доступа MAC находится в руках системного администратора. -[NOTE] -==== -Некоторые пользователи сталкиваются с проблемами при установке флага `multilabel` на корневой раздел. В данном случае обратитесь к <<mac-troubleshoot>>. -==== +Обязанностью системного администратора является тщательный выбор подходящих модулей политики безопасности. Для среды, где требуется ограничить контроль доступа по сети, модули политик man:mac_portacl[4], man:mac_ifoff[4] и man:mac_biba[4] могут стать хорошей отправной точкой. В среде, где необходима строгая конфиденциальность объектов файловой системы, следует рассмотреть модули политик man:mac_bsdextended[4] и man:mac_mls[4]. -=== Настройка MAC переменными sysctl +Решения о политиках могут приниматься на основе конфигурации сети. Если только определенные пользователи должны иметь доступ к man:ssh[1], модуль политики man:mac_portacl[4] является хорошим выбором. В случае файловых систем доступ к объектам может считаться конфиденциальным для одних пользователей, но не для других. Например, большая команда разработчиков может быть разделена на меньшие проекты, где разработчики из проекта A не должны иметь доступа к объектам, созданным разработчиками из проекта B. Однако оба проекта могут нуждаться в доступе к объектам, созданным разработчиками из проекта C. Используя различные модули политик безопасности, предоставляемые MAC-фреймворком, пользователи могут быть разделены на эти группы и затем получить доступ к соответствующим объектам. -Независимо от загрузки модулей, существует несколько частей MAC, которые могут быть настроены с использованием интерфейса `sysctl`. Эти переменные описаны ниже и во всех случаях значение 1 означает включение, а 0 - отключение: +Каждый модуль политики безопасности имеет уникальный способ обработки общей безопасности системы. Выбор модуля должен основываться на продуманной политике безопасности, которая может потребовать пересмотра и повторной реализации. Понимание различных модулей политики безопасности, предоставляемых инфраструктурой MAC, поможет администраторам выбрать наилучшие политики для их ситуаций. -* `security.mac.enforce_fs` по умолчанию установлена в 1 и включает политики MAC на файловых системах. -* `security.mac.enforce_kld` по умолчанию 1 и включает линкование политик MAC в ядре (см. man: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 на сокетах (см. страницу справочника man:socket[2]). -* `security.mac.enforce_system` по умолчанию 1 и включает политики MAC для действий системы, таких как учет (accounting) и перезагрузка. -* `security.mac.enforce_vm` по умолчанию 1 и включает политики MAC для системы виртуальной памяти. +Остальная часть этой главы посвящена доступным модулям, описанию их использования и настройки, а в некоторых случаях содержит рекомендации по их применению в различных ситуациях. -[NOTE] +[CAUTION] ==== -Каждая политика MAC поддерживает переменные `sysctl`. Они обычно попадают в дерево `security.mac.<policyname>`. Для просмотра всех переменных MAC, используйте следующую команду: - -[source,shell] -.... -# sysctl -da | grep mac -.... - +Внедрение MAC во многом похоже на настройку межсетевого экрана, так как необходимо соблюдать осторожность, чтобы не оказаться полностью заблокированным в системе. Следует предусмотреть возможность возврата к предыдущей конфигурации, а реализацию MAC через удалённое соединение следует выполнять с особой осторожностью. ==== -Это должно быть интерпретировано так, что все основные политики MAC включены по умолчанию. Если модули встроены в ядро, система будет заблокирована, и скорее всего не сможет связаться с локальной сетью или с интернет, и т.д. Поэтому встраивание модулей в ядро не рекомендуется. Не потому, что это ограничит возможность отключения командой `sysctl`, а потому, что включение политик в виде модулей позволит администратору переключать политики системы без необходимости пересборки и переустановки новой системы. - -[[mac-modules]] -== Настройка модулей +[[mac-policies]] +== Доступные политики MAC -Каждый модуль, включенный в инфраструктуру MAC, может быть или встроен в ядро, как упоминалось выше, или загружен в виде модуля ядра. Рекомендуется добавление имени модуля в файл [.filename]#/boot/loader.conf#, этот модуль будет активирован в самом начале загрузки. +Стандартное ядро FreeBSD включает `options MAC`. Это означает, что каждый модуль, входящий в состав инфраструктуры MAC, может быть загружен с помощью `kldload` как модуль ядра во время выполнения. После тестирования модуля добавьте его имя в [.filename]#/boot/loader.conf#, чтобы он загружался при старте системы. Каждый модуль также предоставляет опцию ядра для администраторов, которые предпочитают компилировать собственное ядро системы. -В последующих разделах будут обсуждаться различные модули MAC и их возможности. Реализация этих возможностей в определенных ситуациях также будет обсуждаться в этой главе. Некоторые модули поддерживают использование меток, которые контролируют доступ путем применения правил вида "это разрешено, а это нет". Настройка меток может контролировать доступ к файлам, сетевым коммуникациям и т.д. В предыдущем разделе было показано как флаг `multilabel` может быть установлен на файловые системы для включения контроля доступа по файлам или по разделам. - -Конфигурация с одной меткой не допускает применение нескольких меток в системе, поэтому параметр `tunefs` называется `multilabel`. +FreeBSD включает набор политик, которые охватывают большинство требований безопасности. Каждая политика кратко описана ниже. Последние три политики поддерживают целочисленные настройки вместо трёх стандартных меток. [[mac-seeotheruids]] -=== Модуль MAC seeotheruids - -Имя модуля: [.filename]#mac_seeotheruids.ko# +=== Политика MAC — See Other UIDs -Строка в конфигурации ядра: `options MAC_SEEOTHERUIDS` +Название модуля: [.filename]#mac_seeotheruids.ko# -Параметр загрузки: `mac_seeotheruids_load="YES"` +Строка конфигурации ядра: `options MAC_SEEOTHERUIDS` -Модуль man:mac_seeotheruids[4] копирует и расширяет переменные `sysctl security.bsd.see_other_uids` и `security.bsd.see_other_gids`. Он не требует установки меток и может прозрачно работать с другими модулями. +Опция загрузки: `mac_seeotheruids_load="YES"` -После загрузки модуля, для управления им могут быть использованы следующие переменные `sysctl`: +Модуль man:mac_seeotheruids[4] расширяет настройки `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` может быть не установлена. +После загрузки модуля следующие настройки `sysctl` могут быть использованы для управления его функциями: -Необходимо отметить, что пользователь `root` не является исключением из этой политики. Это одно из самых существенных различий между MAC версией и обычными переменными, существующими по умолчанию: `security.bsd.seeotheruids`. +* `security.mac.seeotheruids.enabled` включает модуль и реализует настройки по умолчанию, которые запрещают пользователям возможность просматривать процессы и сокеты, принадлежащие другим пользователям. +* `security.mac.seeotheruids.specificgid_enabled` позволяет исключить указанные группы из действия этой политики. Чтобы исключить определённые группы, используйте параметр `security.mac.seeotheruids.specificgid=_XXX_ sysctl`, заменив _XXX_ на числовой идентификатор группы, которую нужно исключить. +* `security.mac.seeotheruids.primarygroup_enabled` используется для исключения определённых первичных групп из этой политики. При использовании этого параметра `security.mac.seeotheruids.specificgid_enabled` не может быть установлен. [[mac-bsdextended]] -== Модуль MAC bsdextended +=== Политика MAC — BSD Extended Имя модуля: [.filename]#mac_bsdextended.ko# @@ -330,55 +298,42 @@ default:\ Параметр загрузки: `mac_bsdextended_load="YES"` -Модуль man:mac_bsdextended[4] включает брандмауэр файловой системы. Политика этого модуля является расширением стандартной модели разрешений файловой системы, позволяя администратору создавать набор правил для защиты файлов, утилит и каталогов иерархии файловой системы в стиле брандмауэра. - -Политика может быть создана с помощью утилиты, man:ugidfw[8], синтаксис которой похож на синтаксис man:ipfw[8]. Другие инструменты могут быть написаны с использованием функций библиотеки man:libugidfw[3]. - -При работе с этим модулем необходимо соблюдать особую осторожность; некорректное его использование может заблокировать доступ к отдельным частям файловой системы. +Модуль man:mac_bsdextended[4] обеспечивает файловый межсетевой экран. Он расширяет стандартную модель прав доступа к файловой системе, позволяя администратору создавать набор правил, подобный межсетевому экрану, для защиты файлов, утилит и каталогов в иерархии файловой системы. При попытке доступа к объекту файловой системы происходит перебор списка правил до тех пор, пока не будет найдено соответствующее правило или не будет достигнут конец списка. Это поведение можно изменить с помощью параметра `security.mac.bsdextended.firstmatch_enabled`. Подобно другим модулям межсетевого экрана в FreeBSD, файл с правилами контроля доступа может быть создан и прочитан системой во время загрузки с использованием переменной man:rc.conf[5]. -=== Примеры +Список правил может быть введён с помощью man:ugidfw[8], синтаксис которого похож на man:ipfw[8]. Дополнительные инструменты могут быть написаны с использованием функций из библиотеки man:libugidfw[3]. -После загрузки модуля man:mac_bsdextended[4] для просмотра текущей настройки правил может быть использована следующая команда: +После загрузки модуля man:mac_bsdextended[4] для просмотра текущей конфигурации правил можно использовать следующую команду: -[source,shell] +[source, shell] .... # ugidfw list 0 slots, 0 rules .... -Как и можно было ожидать, правила не определены. Это означает, что доступ полностью открыт. Для создания правила, которое заблокирует доступ всех пользователей, но не повлияет на `root`, просто запустите следующую команду: +По умолчанию никакие правила не определены, и доступ полностью открыт. Чтобы создать правило, которое блокирует доступ для всех пользователей, кроме `root`: -[source,shell] +[source, shell] .... # ugidfw add subject not uid root new object not uid root mode n .... -[NOTE] -==== -В релизах FreeBSD до 5.3, параметр [parameter]#add# не существует. Вместо него необходимо использовать [parameter]#set#. Пример дан ниже. -==== +Хотя это правило просто реализовать, это очень плохая идея, так как оно блокирует всех пользователей от выполнения любых команд. Более реалистичный пример запрещает `user1` любой доступ, включая просмотр каталогов, к домашней директории ``_user2_``: -Это очень плохая идея, поскольку такое правило запретит пользователям использовать даже самые простые команды, такие как `ls`. Более патриотический список правил может быть таким: - -[source,shell] +[source, shell] .... # 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_`. Это включит те ограничения, о которых говорилось выше, для всех пользователей кроме одного. +Вместо `user1` можно использовать `not uid _user2_`, чтобы применять одинаковые ограничения доступа для всех пользователей. Однако пользователь `root` не подвержен влиянию этих правил. [NOTE] ==== -На пользователя `root` эти изменения не повлияют. +Следует проявлять крайнюю осторожность при работе с этим модулем, так как неправильное использование может заблокировать доступ к определенным частям файловой системы. ==== -Материал выше должен дать общую идею как модуль man:mac_bsdextended[4] может быть использован в качестве средства защиты файловой системы. За дальнейшей информацией обращайтесь к страницам справочника man:mac_bsdextended[4] и man:ugidfw[8]. - [[mac-ifoff]] -== Модуль MAC ifoff +=== Политика MAC — подавление интерфейсов Имя модуля: [.filename]#mac_ifoff.ko# @@ -386,18 +341,18 @@ default:\ Параметр загрузки: `mac_ifoff_load="YES"` -Модуль man:mac_ifoff[4] существует только для отключения сетевых интерфейсов в работающей системе и удержания их от отправки пакетов во время начальной загрузки. Это не требует установления в системе каких-либо меток, нет и зависимости от других модулей MAC. +Модуль man:mac_ifoff[4] используется для отключения сетевых интерфейсов на лету и предотвращения их включения во время загрузки системы. Он не использует метки и не зависит от других модулей MAC. -Большая часть управления может быть выполнена через переменные `sysctl`. +Большая часть управления этим модулем осуществляется через следующие настраиваемые параметры `sysctl`: -* `security.mac.ifoff.lo_enabled` включает/выключает весь трафик на loopback (man:lo[4]) интерфейсе. -* `security.mac.ifoff.bpfrecv_enabled` включает/выключает весь трафик на интерфейсе Berkeley Packet Filter (man:bpf[4]). -* `security.mac.ifoff.other_enabled` включает/выключает весь трафик на всех других интерфейсах. +* `security.mac.ifoff.lo_enabled` включает или отключает весь трафик на интерфейсе loopback, man:lo[4]. +* `security.mac.ifoff.bpfrecv_enabled` включает или отключает весь трафик на интерфейсе Berkeley Packet Filter, man:bpf[4]. +* `security.mac.ifoff.other_enabled` включает или отключает трафик на всех остальных интерфейсах. -Одно из наиболее частых использований man:mac_ifoff[4] это сетевой мониторинг в среде, где сетевой трафик не должен быть разрешен во время загрузки. Другое предлагаемое применение это написание скрипта, использующего package:security/aide[] для автоматического блокирования сетевого трафика, если будут обнаружены новые или измененные файлы в защищаемых каталогах. +Одним из наиболее распространённых применений `mac_ifoff(4)` является мониторинг сети в среде, где сетевой трафик не должен разрешаться во время последовательности загрузки. Другое применение — написание скрипта, который использует приложение, например package:security/aide[], для автоматической блокировки сетевого трафика при обнаружении новых или изменённых файлов в защищённых каталогах. [[mac-portacl]] -== Модуль MAC portacl +=== Политика MAC - списки управления доступом к портам Имя модуля: [.filename]#mac_portacl.ko# @@ -405,174 +360,88 @@ default:\ Параметр загрузки: `mac_portacl_load="YES"` -Модуль man:mac_portacl[4] используется для ограничения привязки (binding) к локальным портам TCP и UDP, используя различные переменные `sysctl`. По сути man:mac_portacl[4] делает возможной привязку к привилегированным портам, т.е. к портам с номерами меньше 1024 для не-`root` пользователей. +Модуль man:mac_portacl[4] используется для ограничения привязки к локальным TCP- и UDP-портам, позволяя непривилегированным пользователям (не `root`) привязываться к указанным привилегированным портам ниже 1024. -После загрузки этот модуль включит политику MAC на всех сокетах. Доступны следующие переменные `sysctl`: +После загрузки этот модуль включает политику MAC для всех сокетов. Доступны следующие настраиваемые параметры: -* `security.mac.portacl.enabled` включает/отключает политику целиком. -* `security.mac.portacl.port_high` установит наибольший номер порта, для которого man:mac_portacl[4] включает защиту. -* `security.mac.portacl.suser_exempt`, если установлена в ненулевое значение, исключает пользователя `root` из этой политики. -* `security.mac.portacl.rules` задает действующую политику mac_portacl: см. ниже. +* `security.mac.portacl.enabled` включает или отключает политику полностью. +* `security.mac.portacl.port_high` устанавливает наибольший номер порта, который защищает man:mac_portacl[4]. +* `security.mac.portacl.suser_exempt` при установке в ненулевое значение освобождает пользователя `root` от действия данной политики. +* `security.mac.portacl.rules` задаёт политику в виде текстовой строки формата `правило[,правило,...]`, с любым необходимым количеством правил, где каждое правило имеет вид `тип_идентификатора:идентификатор:протокол:порт`. `тип_идентификатора` может быть `uid` или `gid`. Параметр `протокол ` принимает значения `tcp` или `udp`. Параметр `порт` указывает номер порта, к которому разрешено привязываться указанному пользователю или группе. Для параметров `идентификатор пользователя`, `идентификатор группы` и `порт` можно использовать только числовые значения. -Действующая политика `mac_portacl`, указанная в `security.mac.portacl.rules`, это текстовая строка в форме `rule[,rule,...]` с таким количеством правил, которое требуется. Каждое правило задается в формате: `idtype:id:protocol:port`. Параметр [parameter]#idtype# может принимать значения `uid` или `gid` и используется для интерпретации параметра [parameter]#id#, в качестве id пользователя или группы соответственно. Параметр [parameter]#protocol# используется для определения применимости этого правила к протоколу TCP или UDP, он может принимать значения `tcp` или `udp`. Последний параметр, [parameter]#port#, задает номер порта, к которому разрешается привязка указанного пользователя или группы. +По умолчанию порты ниже 1024 могут использоваться только привилегированными процессами, работающими от имени `root`. Чтобы разрешить непривилегированным процессам привязываться к портам ниже 1024 с помощью man:mac_portacl[4], задайте следующие настраиваемые параметры следующим образом: -[NOTE] -==== -Поскольку набор правил интерпретируется непосредственно ядром, для ID пользователя, группы и номера порта могут быть использованы только числовые значения. Т.е. имена пользователей, групп и сервисов портов не могут быть использованы. -==== - -По умолчанию в UNIX(R)-подобных системах порты с номерами менее чем 1024 могут быть использованы только привилегированными процессами, т.е. теми, что запущены от `root`. С man:mac_portacl[4] для разрешения привязки непривилегированных процессов к портам с номерами ниже 1024 эти стандартные ограничения UNIX(R) должны быть отменены. Это может быть выполнено путем установки переменных man:sysctl[8] `net.inet.ip.portrange.reservedlow` и `net.inet.ip.portrange.reservedhigh` в ноль. - -Обратитесь к примерам ниже или к странице справочника man:mac_portacl[4] за дальнейшей информацией. - -=== Примеры - -Следующие примеры должны осветить обсуждение выше чуть лучше: - -[source,shell] +[source, shell] .... # sysctl security.mac.portacl.port_high=1023 -# sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0 +# sysctl net.inet.ip.portrange.reservedlow=0 +# sysctl net.inet.ip.portrange.reservedhigh=0 .... -Сначала мы настраиваем man:mac_portacl[4] для работы со стандартными привилегированными портами и отмены обычных ограничений UNIX(R) на привязку. +Чтобы предотвратить влияние этой политики на пользователя `root`, установите `security.mac.portacl.suser_exempt` в ненулевое значение. -[source,shell] +[source, shell] .... # sysctl security.mac.portacl.suser_exempt=1 .... -Пользователь `root` должен быть исключен из этой политики, для этого переменная `security.mac.portacl.suser_exempt` установлена в ненулевое значение. Модуль man:mac_portacl[4] теперь настроен на то поведение UNIX(R)-подобных систем по умолчанию. +Чтобы пользователь `www` с UID 80 мог привязываться к порту 80 без необходимости в привилегиях `root`: -[source,shell] +[source, shell] .... # sysctl security.mac.portacl.rules=uid:80:tcp:80 .... -Разрешает пользователю с UID 80 (обычно это пользователь `www`) привязку к порту 80. Теперь пользователь `www` сможет запустить веб сервер даже без привилегии `root`. +Следующий пример разрешает пользователю с UID 1001 привязываться к TCP-портам 110 (POP3) и 995 (POP3s): -[source,shell] +[source, shell] .... # sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995 .... -Разрешит пользователю с UID 1001 привязку к TCP портам 110 ("pop3") и 995 ("pop3s"). Это позволит данному пользователю запустить сервер, принимающий соединения на портах 110 и 995. - -[[mac-labelingpolicies]] -== Политики MAC, использующие метки - -В следующих нескольких разделах будут обсуждаться политики MAC, использующие метки. - -С этого момента обсуждение будет сфокусировано на возможностях man:mac_biba[4], man:mac_lomac[4], man:mac_partition[4], и man:mac_mls[4]. - -[NOTE] -==== -Это лишь примерные настройки, они не должны использоваться непосредственно в реальных задачах. Цель изложения в том, чтобы документировать и показать синтаксис, а также примеры реализации и тестирования. -==== - -Для правильной работы этих политик необходимо выполнить некоторые приготовления. - -[[mac-prep]] -=== Приготовления к использованию политик с метками - -В файл [.filename]#login.conf# необходимо внести следующие изменения: - -* Должен быть добавлен класс `insecure`, или другой подобный класс. Наличие класса `insecure` не обязательно, он приводится здесь в качестве примера; другие конфигурации могут использовать другое имя класса. -* Класс `insecure` должен использовать приведенные ниже настройки и определения. Некоторые из них могут быть изменены, но строка, определяющая метку по умолчанию, необходима и должна быть оставлена. -+ -[.programlisting] -.... -insecure:\ - :copyright=/etc/COPYRIGHT:\ - :welcome=/etc/motd:\ - :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ - :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\ - :manpath=/usr/shared/man /usr/local/man:\ - :nologin=/usr/sbin/nologin:\ - :cputime=1h30m:\ - :datasize=8M:\ - :vmemoryuse=100M:\ - :stacksize=2M:\ - :memorylocked=4M:\ - :memoryuse=8M:\ - :filesize=8M:\ - :coredumpsize=8M:\ - :openfiles=24:\ - :maxproc=32:\ - :priority=0:\ - :requirehome:\ - :passwordtime=91d:\ - :umask=022:\ - :ignoretime@:\ - :label=partition/13,mls/5,biba/low: -.... - -+ -Перед тем, как переключать пользователей на новый класс, необходимо запустить команду man:cap.mkdb[1] на man:login.conf[5]. -+ -Пользователю `root` также необходимо присвоить класс; иначе, почти любой команде, выполняемой от `root`, потребуется использование `setpmac`. -+ -* Убедитесь, что все разделы, на которых будут установлены метки MAC, поддерживают параметр `multilabel`. Нам необходимо сделать это, поскольку многие из примеров здесь содержат различные метки в целях тестирования. Просмотрите вывод команды `mount` в качестве необходимой предосторожности. -* Переключите всех пользователей, которые будут использовать новые механизмы безопасности, на этот класс. Информация по этой процедуре находится в man:pw[8] или man:vipw[8]. - [[mac-partition]] -== Модуль MAC partition +=== Политика MAC — разделы процессов Имя модуля: [.filename]#mac_partition.ko# -Строка настройки ядра: `options MAC_PARTITION` +Строка конфигурации ядра: `options MAC_PARTITION` -Параметр загрузки: `mac_partition_load="YES"` +Опция загрузки: `mac_partition_load="YES"` -Политика man:mac_partition[4] распределяет процессы по "разделам" на основе их MAC меток. Это может быть представлено как особый тип man:jail[8], хотя такое сравнение едва ли подходит. +Политика man:mac_partition[4] помещает процессы в определенные "разделы" на основе их метки MAC. Большая часть настройки этой политики выполняется с помощью man:setpmac[8]. Для этой политики доступна одна настраиваемая переменная `sysctl`: -Этот модуль должен быть добавлен в man:loader.conf[5], чтобы политика была загружена и включена при загрузке системы. +* `security.mac.partition.enabled` включает принудительное применение разделов процессов MAC. -Большая часть настройки этой политики выполняется с помощью утилиты man:setpmac[8], которая будет описана ниже. Для данной политики имеется также следующая переменная `sysctl`: +Когда эта политика включена, пользователи смогут видеть только свои процессы и процессы в своем разделе, но не смогут работать с утилитами за пределами этого раздела. Например, пользователь из класса `insecure` не сможет получить доступ к `top`, а также ко многим другим командам, которые должны запускать процессы. -* `security.mac.partition.enabled` включит MAC разделение процессов. +В этом примере `top` добавляется к набору меток пользователей в классе `insecure`. Все процессы, запущенные пользователями из класса `insecure`, останутся с меткой `partition/13`. -Когда эта политика включена, пользователям разрешено просматривать только собственные процессы, но не разрешено пользоваться определенными утилитами. Например, пользователю из класса `insecure` выше не будет разрешено использование команды `top`, а также многих других команд, которые должны порождать процесс. - -Для присвоения утилитам меток partition используйте утилиту `setpmac`: - -[source,shell] +[source, shell] .... # setpmac partition/13 top .... -Команда `top` будет добавлена к метке, установленной для пользователей класса `insecure`. Обратите внимание, что все процессы, порожденные пользователями класса `insecure`, останутся с меткой `partition/13`. - -=== Примеры - -Следующая команда покажет вашу метку раздела и список процессов: +Эта команда отображает метку раздела и список процессов: -[source,shell] +[source, shell] .... # ps Zax .... -Следующей командой можно просмотреть метку раздела процессов других пользователей и их запущенные процессы: +Эта команда отображает метку раздела процессов другого пользователя и его текущие запущенные процессы: -[source,shell] +[source, shell] .... # ps -ZU trhodes .... [NOTE] ==== -Пользователи могут могут увидеть процессы `root`, если не загружена политика man:mac_seeotheruids[4]. -==== - -Действительно "продвинутая" реализация должна отключать все сервисы через [.filename]#/etc/rc.conf# и запускать их через скрипт, который установит правильный набор меток. - -[NOTE] -==== -Следующие политики поддерживают целочисленные установки вместо трех меток по умолчанию. Эти опции, включая их ограничения, описываются более подробно в страницах справочника модулей. +Пользователи могут видеть процессы с меткой ``root``, если не загружена политика man:mac_seeotheruids[4]. ==== [[mac-mls]] -== Модуль многоуровневой безопасности MAC (MLS) +=== Модуль многоуровневой безопасности MAC Имя модуля: [.filename]#mac_mls.ko# @@ -580,93 +449,99 @@ insecure:\ Параметр загрузки: `mac_mls_load="YES"` -Политика man:mac_mls[4] контролирует взаимодействие субъектов и объектов системы путем применения строгой политики к потоку информации. - -В среде MLS, для каждого субъекта или объекта внутри отдела (compartment) устанавливается "уровень допуска". Поскольку количество уровней допуска может превышать шесть тысяч, для любого системного администратора задача настройки каждого субъекта или объекта может быть слишком сложной. К счастью, существуют "постоянные" метки, которые уже включены в эту политику. +Политика man:mac_mls[4] контролирует доступ между субъектами и объектами в системе, применяя строгую политику управления потоком информации. -Эти метки `mls/low`, `mls/equal` и `mls/high`. Поскольку эти метки подробно описываются в справочнике, здесь мы дадим только краткое описание: +В средах MLS в метке каждого субъекта или объекта устанавливается уровень "допуска" вместе с категориями. Поскольку эти уровни допуска могут достигать значений, превышающих несколько тысяч, тщательная настройка каждого субъекта или объекта была бы сложной задачей. Для снижения административной нагрузки в эту политику включены три метки: `mls/low`, `mls/equal` и `mls/high`, где: -* Метка `mls/low` содержит минимальную настройку, что позволяет доминирование над ней всех других объектов. Все, что помечено с `mls/low`, находится на низком уровне доступа и доступ к более высоким уровням будет запрещен. Кроме того, эта метка предотвратит запись или передачу информации объектам с более высоким уровнем доступа. -* Метка `mls/equal` должна быть помещена на объекты, являющиеся исключением из политики. -* Метка `mls/high` это наибольший возможный уровень доступа. Объекты с этой меткой будут доминировать над всеми другими объектами системы; однако, утечка информации от них к объектам более низкого класса невозможна. +* Все объекты, помеченные меткой `mls/low`, будут иметь низкий уровень доступа и не смогут обращаться к информации более высокого уровня. Эта метка также предотвращает запись или передачу информации от объектов с более высоким уровнем доступа к объектам с более низким уровнем. +* `mls/equal` следует размещать на объектах, которые должны быть освобождены от политики. +* `mls/high` — это наивысший возможный уровень допуска. Объекты с этой меткой будут доминировать над всеми остальными объектами в системе; однако они не допустят утечки информации к объектам более низкого класса. -MLS представляет собой: +MLS предоставляет: -* Иерархические уровни безопасности с набором не иерархических категорий; -* Фиксированные правила: нет чтения сверху, нет записи вниз (субъект может иметь доступ на чтение объектов собственного уровня или ниже, но не выше. Аналогично, субъект может иметь доступ на запись в объекты своего уровня или выше, но не наоборот.); -* Секретность (предотвращение неавторизованного раскрытия данных); -* Основа для разработки систем, одновременно работающих с данными на нескольких уровнях секретности (без утечки информации). +* Иерархический уровень безопасности с набором неиерархических категорий. +* Фиксированные правила `нет чтения вверх, нет записи вниз`. Это означает, что субъект может иметь право чтения объектов на своём уровне или ниже, но не выше. Аналогично, субъект может иметь право записи объектов на своём уровне или выше, но не ниже. +* Секретность, или предотвращение несанкционированного раскрытия данных. +* Основы проектирования систем, которые одновременно обрабатывают данные с разными уровнями конфиденциальности, не допуская утечки информации между секретными и конфиденциальными данными. -Для настройки специальных сервисов и интерфейсов доступны следующие переменные `sysctl`: +Доступны следующие настраиваемые параметры `sysctl`: -* `security.mac.mls.enabled` используется для включения/отключения политики MLS. -* `security.mac.mls.ptys_equal` пометит все устройства man:pty[4] как `mls/equal` во время создания. -* `security.mac.mls.revocation_enabled` используется для запрета доступа к объектам после того, как их метка изменится в меньшую сторону. -* `security.mac.mls.max_compartments` используется для установки максимального количества уровней отделов на объекты; обычно это максимальное количество отделов, разрешенных в системе. +* `security.mac.mls.enabled` используется для включения или отключения политики MLS. +* `security.mac.mls.ptys_equal` помечает все устройства man:pty[4] как `mls/equal` при создании. +* `security.mac.mls.revocation_enabled` отзывает доступ к объектам после изменения их метки на метку более низкого уровня. +* `security.mac.mls.max_compartments` устанавливает максимальное количество уровней отделов (compartment), разрешенных в системе. -Для управления метками MLS существует команда man:setfmac[8]. Для присвоения метки объекту, выполните следующую команду: +Для работы с метками MLS используйте man:setfmac[8]. Чтобы назначить метку объекту: -[source,shell] +[source, shell] .... # setfmac mls/5 test .... -Для получения метки MLS файла [.filename]#test#, выполните следующую команду: +Чтобы получить метку MLS для файла [.filename]#test#: -[source,shell] +[source, shell] .... # getfmac test .... -Выше представлен краткий обзор возможностей политики MLS. Существует метод, связанный с созданием основного файла политики в каталоге [.filename]#/etc#, где будет определена необходимая для политики MLS информация, которая будет передана команде `setfmac`. Этот метод будет описан после рассмотрения всех политик. +Другой подход заключается в создании основного файла политики в [.filename]#/etc/#, который определяет информацию о политике MLS, и передаче этого файла в `setfmac`. + +При использовании модуля политики MLS администратор планирует контролировать поток конфиденциальной информации. Значение по умолчанию `block read up block write down` устанавливает всё в состояние low. Вся информация доступна, и администратор постепенно повышает её конфиденциальность. + +Помимо трех основных вариантов меток, администратор может группировать пользователей и группы по мере необходимости, чтобы блокировать поток информации между ними. Возможно, будет проще рассматривать информацию на уровнях допуска, используя описательные слова, такие как классификации `Confidential` (`Конфиденциально`), `Secret` (`Секретно`) и `Top Secret` (`Совершенно секретно`). Некоторые администраторы вместо этого создают разные группы на основе уровней проектов. Независимо от метода классификации, перед внедрением ограничительной политики должен существовать продуманный план. -Итоги: объект с низким уровнем доступа не может прочесть данные объекта с высоким уровнем доступа. Базовая политика должна устанавливать `mls/high` на всем, что не должно быть прочитано, даже если туда необходимо записывать. На всем, куда нельзя писать, должна быть установлена метка `mls/low`, даже если это необходимо читать. Наконец, на всем остальном установите `mls/equal`. Все пользователи, помеченные как `insecure`, должны иметь метку `mls/low`. +Некоторые примеры ситуаций для модуля политики MLS включают веб-сервер электронной коммерции, файловый сервер с критически важной информацией компании и среды финансовых учреждений. [[mac-biba]] -== Модуль MAC Biba +=== Модуль MAC Biba Имя модуля: [.filename]#mac_biba.ko# Строка конфигурации ядра: `options MAC_BIBA` -Параметр загрузки: `mac_biba_load="YES"` +Опция загрузки: `mac_biba_load="YES"` -Модуль man:mac_biba[4] загружает MAC политику Biba. Эта политика работает в основном так же, как и MLS, за исключением того, что правила потока информации изменены на противоположные. Они предназначены для предотвращения передачи потока секретной информации вверх, в то время как политика MLS предотвращает передачу потока секретной информации вниз; таким образом, большая часть этого раздела применима к обеим политикам. +Модуль man:mac_biba[4] загружает политику MAC Biba. Эта политика похожа на политику MLS, за исключением того, что правила передачи информации слегка изменены в обратном порядке. Это предотвращает поток конфиденциальной информации вниз, тогда как политика MLS предотвращает поток конфиденциальной информации вверх. -В среде Biba, каждому субъекту или объекту присваивается метка "целостности". Эти метки состоят из иерархических уровней и не-иерархических компонентов. При возрастании уровня объекта или субъекта это повышает его целостность. +В средах Biba для каждого субъекта или объекта устанавливается метка «целостности». Эти метки состоят из иерархических уровней и неиерархических компонентов. По мере повышения уровня увеличивается и его целостность. -Поддерживаемые метки `biba/low`, `biba/equal`, и `biba/high`; описаны ниже: +Поддерживаемые метки: `biba/low`, `biba/equal` и `biba/high`, где: -* Метка `biba/low` обеспечивает наименьшую целостность объекта или субъекта. Установка ее на объект или субъект заблокирует их доступ к объектам или субъектам, имеющим более высокую метку. Тем не менее, у них остается доступ на чтение. -* Метка `biba/equal` должна помещаться только на объекты, исключающиеся из политики. -* Метка `biba/high` разрешит запись в объекты с более низкой меткой, но не разрешит чтение из этих объектов. Рекомендуется помещать такую метку на объекты, влияющие на целостность всей системы. +* `biba/low` считается самой низкой целостностью, которую может иметь объект или субъект. Установка этого уровня на объекты или субъекты блокирует их запись в объекты или субъекты с меткой `biba/high`, но не предотвращает чтение. +* `biba/equal` следует размещать только на объектах, которые считаются исключёнными из политики. +* `biba/high` разрешает запись в объекты с более низкой меткой, но запрещает чтение этих объектов. Рекомендуется устанавливать эту метку для объектов, которые влияют на целостность всей системы. -Biba представляет собой: +Biba обеспечивает: -* Иерархические уровни целостности с набором не иерархических категорий; -* Фиксированные правила: нет записи наверх, нет чтения снизу (обратно MLS). Субъект может иметь доступ на запись к объектам своего уровня или ниже, но не выше. Аналогично, субъект может иметь доступ на чтение к объектам своего уровня или выше, но не ниже; -* Целостность (предотвращение неавторизованного изменения данных); -* Уровни целостности (вместо уровней секретности MLS). +* Иерархические уровни целостности с набором неиерархических категорий целостности. +* Фиксированные правила — это `нет записи вверх, нет чтения вниз`, что противоположно MLS. Субъект может иметь право записи в объекты на своём уровне или ниже, но не выше. Аналогично, субъект может иметь право чтения объектов на своём уровне или выше, но не ниже. +* Целостность за счет предотвращения нежелательного изменения данных. +* Уровни целостности вместо уровней чувствительности MLS. -Для управления политикой Biba могут быть использованы следующие переменные `sysctl`: +Следующие настраиваемые параметры могут быть использованы для управления политикой Biba: -* `security.mac.biba.enabled` может использоваться для включения/выключения политики Biba. -* `security.mac.biba.ptys_equal` может использоваться для отключения политики Biba на устройствах man:pty[4]. -* `security.mac.biba.revocation_enabled` включит отмену доступа к объектам, если метка изменена на более высокую, чем у субъекта. +* `security.mac.biba.enabled` используется для включения или отключения принудительного применения политики Biba на целевой машине. +* `security.mac.biba.ptys_equal` используется для отключения политики Biba на устройствах man:pty[4]. +* `security.mac.biba.revocation_enabled` принудительно отзывает доступ к объектам, если их метка изменяется так, чтобы доминировать над субъектом. -Для выполнения настроек политики Biba на системных объектах, применяются команды `setfmac` и `getfmac`: +Для доступа к настройкам политики Biba для системных объектов используйте `setfmac` и `getfmac`: -[source,shell] +[source, shell] .... # setfmac biba/low test # getfmac test test: biba/low .... -Итоги: субъект с низким уровнем целостности не может писать в субъект с высоким уровнем целостности; субъект с высоким уровнем целостности не может читать из субъекта с низким уровнем целостности. +Целостность, которая отличается от конфиденциальности, используется для гарантии того, что информация не будет изменена ненадёжными сторонами. Это включает информацию, передаваемую между субъектами и объектами. Она обеспечивает пользователям возможность изменять или получать доступ только к той информации, к которой у них есть явный доступ. Модуль политики безопасности man:mac_biba[4] позволяет администратору настроить, какие файлы и программы пользователь может просматривать и запускать, гарантируя, что эти программы и файлы считаются системой доверенными для данного пользователя. + +В ходе начального этапа планирования администратор должен быть готов разделить пользователей по категориям, уровням и областям. После включения этого модуля политики система по умолчанию перейдет на высокий уровень метки, и администратору потребуется настроить различные категории и уровни для пользователей. Вместо использования уровней доступа хорошим методом планирования может стать использование тематик. Например, разрешить разработчикам доступ на изменение только к репозиторию исходного кода, компилятору исходного кода и другим инструментам разработки. Остальные пользователи будут распределены по другим категориям, таким как тестировщики, дизайнеры или конечные пользователи, и им будет разрешен только доступ на чтение. + +Субъект с более низким уровнем целостности не может записывать данные в субъект с более высоким уровнем целостности, а субъект с более высоким уровнем целостности не может просматривать или читать объект с более низким уровнем целостности. Установка метки на минимально возможном уровне может сделать объект недоступным для субъектов. Перспективными средами для использования этого модуля политики безопасности могут быть ограниченный веб-сервер, машина для разработки и тестирования, а также репозиторий исходного кода. Менее полезной реализацией будет персональная рабочая станция, машина, используемая в качестве маршрутизатора, или сетевой межсетевой экран. [[mac-lomac]] -== Модуль MAC LOMAC +=== Модуль MAC Low-watermark (нижний порог) Имя модуля: [.filename]#mac_lomac.ko# @@ -674,34 +549,64 @@ test: biba/low Параметр загрузки: `mac_lomac_load="YES"` -В отличие от политики MAC Biba, политика man:mac_lomac[4] разрешает доступ к объектам с более низким уровнем целостности только после уменьшения уровня целостности, чтобы не нарушать каких-либо правил целостности. - -MAC версия политики целостности Low-watermark, чтобы не пересекаться со старой реализацией man:lomac[4], работает почти так же, как и Biba, за исключением использования плавающих меток для поддержки понижения метки субъекта через отдел для вспомогательной градации (auxiliary grade compartment). Этот вспомогательный отдел принимает вид `[auxgrade]`. При включении политики lomac с вспомогательной градацией метка должна выглядеть приблизительно так: `lomac/10[2]`, где номер 2 это вспомогательная градация. +В отличие от политики MAC Biba, политика man:mac_lomac[4] разрешает доступ к объектам с более низким уровнем целостности только после понижения уровня целостности, чтобы не нарушать правила целостности. -Политика MAC LOMAC основана на тотальной пометке всех системных объектов метками целостности, разрешая субъектам читать из объектов с более низкой степенью целостности и с уменьшением метки субъекта для предотвращения последующей записи в объекты с более высокой степенью целостности. Параметр `[auxgrade]` обсуждался выше, таким образом политика может быть более совместимой и требовать меньшей первоначальной настройки, чем Biba. +Политика целостности Low-watermark работает почти идентично Biba, за исключением использования плавающих меток для поддержки понижения уровня субъекта через вспомогательный отдел (compartment) вспомогательных градаций. Этот вторичный отдел имеет вид `[auxgrade]`. При назначении политики с вспомогательной градацией используйте синтаксис `lomac/10[2]`, где `2` — это вспомогательная градация. -=== Примеры +Данная политика основывается на повсеместной маркировке всех системных объектов метками целостности, позволяя субъектам читать из объектов с низкой целостностью, а затем понижая метку субъекта с помощью `[auxgrade]`, чтобы предотвратить последующие записи в объекты с высокой целостностью. Эта политика может обеспечить большую совместимость и потребовать меньше начальной настройки по сравнению с Biba. -Как и для политик Biba и MLS, для установки меток на системные объекты и субъекты могут быть использованы утилиты `setfmac` и `setpmac`: +Как и в политиках Biba и MLS, `setfmac` и `setpmac` используются для назначения меток объектам системы: -[source,shell] +[source, shell] .... # setfmac /usr/home/trhodes lomac/high[low] # getfmac /usr/home/trhodes lomac/high[low] .... -Обратите внимание, что вспомогательная градация здесь `low`, эта возможность предоставляется только политикой MAC LOMAC policy. +Вспомогательная градация `low` — это функция, предоставляемая только политикой MACLOMAC. + +[[mac-userlocked]] +== Блокировка пользователя + +Этот пример рассматривает относительно небольшую систему хранения данных с менее чем пятьюдесятью пользователями. Пользователи будут иметь возможность входа в систему и могут хранить данные и получать доступ к ресурсам. + +Для данного сценария модули политик man:mac_bsdextended[4] и man:mac_seeotheruids[4] могут сосуществовать и блокировать доступ к системным объектам, скрывая при этом пользовательские процессы. + +Начните с добавления следующей строки в [.filename]#/boot/loader.conf#: + +[.programlisting] +.... +mac_seeotheruids_load="YES" +.... + +Модуль политики безопасности man:mac_bsdextended[4] может быть активирован добавлением следующей строки в [.filename]#/etc/rc.conf#: + +[.programlisting] +.... +ugidfw_enable="YES" +.... + +Файл с правилами по умолчанию, хранящийся в [.filename]#/etc/rc.bsdextended#, будет загружен при инициализации системы. Однако стандартные записи могут потребовать изменения. Поскольку предполагается, что данная машина будет обслуживать только пользователей, все строки можно оставить закомментированными, за исключением последних двух, чтобы обеспечить принудительную загрузку системных объектов, принадлежащих пользователям, по умолчанию. + +Добавьте необходимых пользователей на эту машину и перезагрузитесь. Для тестирования попробуйте войти в систему под разными пользователями на двух консолях. Выполните `ps -aux`, чтобы проверить, видны ли процессы других пользователей. Убедитесь, что выполнение man:ls[1] для домашнего каталога другого пользователя завершается ошибкой. + +Не пытайтесь проводить тестирование от пользователя `root`, если специальные параметры ``sysctl`` не были изменены для блокировки доступа суперпользователя. + +[NOTE] +==== +При добавлении нового пользователя его правило man:mac_bsdextended[4] не будет в списке набора правил. Чтобы быстро обновить набор правил, выгрузите модуль политики безопасности и загрузите его снова с помощью man:kldunload[8] и man:kldload[8]. +==== [[mac-implementing]] -== Реализация защищенной среды с MAC +== Nagios в MAC клетке -Нижеследующая демонстрация реализует защищенную среду с использованием различных MAC модулей с соответственно настроенными политиками. Используйте этот пример только для тестирования, он не предназначен для удовлетворения всех требований к защите. Реализация этих политик без понимания принципа их работы неприменима в реальных задачах. +В этом разделе показаны шаги, необходимые для внедрения системы мониторинга сети Nagios в среде MAC. Это пример, который требует от администратора проверки соответствия реализованной политики требованиям безопасности сети перед использованием в рабочей среде. -Перед началом процесса настройки, на каждую файловую систему необходимо установить параметр `multilabel`, который упоминался в начале этой главы. Невыполнение этого требования приведет к ошибкам. +Этот пример требует установки `multilabel` на каждой файловой системе. Также предполагается, что package:net-mgmt/nagios-plugins[], package:net-mgmt/nagios[] и package:www/apache22[] установлены, настроены и корректно работают до попытки интеграции в инфраструктуре MAC. -=== Создание insecure класса пользователя +=== Создайте небезопасный класс пользователя -Начните процедуру добавлением следующего класса пользователя к файлу [.filename]#/etc/login.conf#: +Начните процедуру, добавив следующий класс пользователя в [.filename]#/etc/login.conf#: [.programlisting] .... @@ -710,7 +615,7 @@ insecure:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin -:manpath=/usr/shared/man /usr/local/man:\ +:manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ @@ -727,402 +632,179 @@ insecure:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ -:label=partition/13,mls/5: +:label=biba/10(10-10): .... -и добавлением следующей строки к default классу пользователя: +Затем добавьте следующую строку в раздел класса пользователя по умолчанию: [.programlisting] .... -:label=mls/equal,biba/equal,partition/equal: +:label=biba/high: .... -После завершения этих действий, для пересборки базы данных должна быть выполнена следующая команда: +Сохраните изменения и выполните следующую команду для перестроения базы данных: -[source,shell] +[source, shell] .... # cap_mkdb /etc/login.conf .... -=== Загрузка с необходимыми модулями +=== Настройте пользователей -Добавьте к [.filename]#/boot/loader.conf# следующие строки, чтобы необходимые модули были загружены при старте системы: +Установите пользователя `root` в класс по умолчанию с помощью: -[.programlisting] +[source, shell] .... -mac_biba_load="YES" -mac_mls_load="YES" -mac_seeotheruids_load="YES" -mac_partition_load="YES" +# pw usermod root -L default .... -=== Установка всех пользователей в insecure +Все пользовательские учетные записи, кроме `root`, теперь требуют указания класса входа. Класс входа обязателен, в противном случае пользователям будет отказано в доступе к распространенным командам. Следующий скрипт на `sh` должен помочь: -Всем учетным записям, кроме `root` или системных пользователей теперь потребуется присвоить класс (login class). При отсутствии класса пользователи не смогут получить доступа к обычным командам, таким как man:vi[1]. Следующий скрипт `sh` сделает все необходимое: - -[source,shell] +[source, shell] .... # for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \ - /etc/passwd`; do pw usermod $x -L insecure; done; + /etc/passwd`; do pw usermod $x -L default; done; .... -После этого изменения необходимо запустить команду `cap_mkdb` на файле [.filename]#/etc/master.passwd#. +Затем добавьте учетные записи `nagios` и `www` в класс insecure: -=== Завершение настройки - -Должен быть создан файл контекста; следующий пример взят из примера политики от Robert Watson, он может быть помещен в [.filename]#/etc/policy.contexts#: - -[.programlisting] +[source, shell] .... -# This is the default BIBA/MLS policy for this system. - -.* biba/high,mls/high -/sbin/dhclient biba/high(low),mls/high(low) -/dev(/.*)? biba/equal,mls/equal -# This is not an exhaustive list of all "privileged" devices. -/dev/mdctl biba/high,mls/high -/dev/pci biba/high,mls/high -/dev/k?mem biba/high,mls/high -/dev/io biba/high,mls/high -/dev/agp.* biba/high,mls/high -(/var)?/tmp(/.*)? biba/equal,mls/equal -/tmp/\.X11-unix biba/high(equal),mls/high(equal) -/tmp/\.X11-unix/.* biba/equal,mls/equal -/proc(/.*)? biba/equal,mls/equal -/mnt.* biba/low,mls/low -(/usr)?/home biba/high(low),mls/high(low) -(/usr)?/home/.* biba/low,mls/low -/var/mail(/.*)? biba/low,mls/low -/var/spool/mqueue(/.*)? biba/low,mls/low -(/mnt)?/cdrom(/.*)? biba/high,mls/high -(/usr)?/home/(ftp|samba)(/.*)? biba/high,mls/high -/var/log/sendmail\.st biba/low,mls/low -/var/run/utmp biba/equal,mls/equal -/var/log/(lastlog|wtmp) biba/equal,mls/equal -.... - -Эта политика обеспечит безопасность путем применения ограничений на нисходящий и восходящий потоки информации в применении к каталогам и утилитам, приведенным в левой части файла. - -Он может быть внесен в систему следующими командами: - -[source,shell] -.... -# setfsmac -ef /etc/policy.contexts / -# setfsmac -ef /etc/policy.contexts /usr +# pw usermod nagios -L insecure +# pw usermod www -L insecure .... -[NOTE] -==== -Раскладка вышеприведенной файловой системы может быть различной для разных систем. -==== +=== Создайте файл контекстов -Файл [.filename]#/etc/mac.conf# требует следующих изменений в основном разделе: +Файл контекстов теперь должен быть создан как [.filename]#/etc/policy.contexts#: [.programlisting] .... -default_labels file ?biba,?mls -default_labels ifnet ?biba,?mls -default_labels process ?biba,?mls,?partition -default_labels socket ?biba,?mls -.... - -=== Тестирование настройки - -Добавьте пользователя с помощью команды `adduser` и поместите его в класс `insecure` для этих тестов. - -В примерах ниже тестирование `root` и обычных пользователей будет смешиваться; форма приглашения поможет различить этих пользователей. - -==== Основное тестирование меток - -[source,shell] -.... -% getpmac -biba/15(15-15),mls/15(15-15),partition/15 -# setpmac partition/15,mls/equal top -.... - -[NOTE] -==== -Процесс top будет уничтожен перед тем, как мы запустим другой процесс top. -==== - -==== Тестирование MAC seeotheruids - -[source,shell] -.... -% ps Zax -biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.03 -su (bash) -biba/15(15-15),mls/15(15-15),partition/15 1101 #C: R+ 0:00.01 ps Zax -.... - -Просмотр процессов всех других пользователей должен быть запрещен. - -==== Тестирование MAC partition - -Отключите политику MAC `seeotheruids` для остальных тестов: - -[source,shell] -.... -# sysctl security.mac.seeotheruids.enabled=0 -% ps Zax -LABEL PID TT STAT TIME COMMAND - biba/equal(low-high),mls/equal(low-high),partition/15 1122 #C: S+ 0:00.02 top - biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.05 -su (bash) - biba/15(15-15),mls/15(15-15),partition/15 1123 #C: R+ 0:00.01 ps Zax -.... - -Все пользователи должны видеть каждый процесс в своем разделе (partition). - -==== Тестирование меток Biba и MLS - -[source,shell] -.... -# setpmac partition/15,mls/equal,biba/high\(high-high\) top -% ps Zax -LABEL PID TT STAT TIME COMMAND - biba/high(high-high),mls/equal(low-high),partition/15 1251 #C: S+ 0:00.02 top - biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.06 -su (bash) - biba/15(15-15),mls/15(15-15),partition/15 1157 #C: R+ 0:00.00 ps Zax -.... - -Политика Biba позволяет чтение объектов с более высокими метками. - -[source,shell] -.... -# setpmac partition/15,mls/equal,biba/low top -% ps Zax -LABEL PID TT STAT TIME COMMAND - biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.07 -su (bash) - biba/15(15-15),mls/15(15-15),partition/15 1226 #C: R+ 0:00.01 ps Zax -.... +# This is the default BIBA policy for this system. -Политика Biba не позволяет чтение объектов с более низкими метками; тем не менее, MLS разрешает это. +# System: +/var/run(/.*)? biba/equal -[source,shell] -.... -% ifconfig bge0 | grep maclabel -maclabel biba/low(low-low),mls/low(low-low) -% ping -c 1 192.0.34.166 -PING 192.0.34.166 (192.0.34.166): 56 data bytes -ping: sendto: Permission denied -.... +/dev/(/.*)? biba/equal -Пользователи не могут выполнить ping на `example.com`, или на любой домен по этой причине. +/var biba/equal +/var/spool(/.*)? biba/equal -Для устранения этой ошибки, запустите следующую команду: +/var/log(/.*)? biba/equal -[source,shell] -.... -# sysctl security.mac.biba.trust_all_interfaces=1 -.... +/tmp(/.*)? biba/equal +/var/tmp(/.*)? biba/equal -Она устанавливает метку интерфейса по умолчанию в незащищенный режим, так что политика Biba по умолчанию не будет применена. +/var/spool/mqueue biba/equal +/var/spool/clientmqueue biba/equal -[source,shell] -.... -# ifconfig bge0 maclabel biba/equal\(low-high\),mls/equal\(low-high\) -% ping -c 1 192.0.34.166 -PING 192.0.34.166 (192.0.34.166): 56 data bytes -64 bytes from 192.0.34.166: icmp_seq=0 ttl=50 time=204.455 ms ---- 192.0.34.166 ping statistics --- -1 packets transmitted, 1 packets received, 0% packet loss -round-trip min/avg/max/stddev = 204.455/204.455/204.455/0.000 ms -.... +# For Nagios: +/usr/local/etc/nagios(/.*)? biba/10 -Установив более корректную метку, мы можем использовать `ping`. +/var/spool/nagios(/.*)? biba/10 -Теперь создадим файлы для процедуры тестирования чтения и записи: - -[source,shell] -.... -# touch test1 test2 test3 test4 test5 -# getfmac test1 -test1: biba/equal,mls/equal -# setfmac biba/low test1 test2; setfmac biba/high test4 test5; \ - setfmac mls/low test1 test3; setfmac mls/high test2 test4 -# setfmac mls/equal,biba/equal test3 && getfmac test? -test1: biba/low,mls/low -test2: biba/low,mls/high -test3: biba/equal,mls/equal -test4: biba/high,mls/high -test5: biba/high,mls/equal -# chown testuser:testuser test? +# For apache +/usr/local/etc/apache(/.*)? biba/10 .... -Все эти файлы должны принадлежать пользователю `testuser`. Тесты на чтение: - -[source,shell] -.... -% ls -test1 test2 test3 test4 test5 -% ls test? -ls: test1: Permission denied -ls: test2: Permission denied -ls: test4: Permission denied -test3 test5 -.... +Эта политика обеспечивает безопасность, устанавливая ограничения на поток информации. В данной конкретной конфигурации пользователям, включая `root`, никогда не должно быть разрешено обращаться к Nagios. Конфигурационные файлы и процессы, являющиеся частью Nagios, будут полностью самодостаточными или изолированными. -Доступ на чтение не должен быть разрешен для пар: `(biba/low,mls/low)`, `(biba/low,mls/high)` и `(biba/high,mls/high)`. Теперь несколько тестов на запись: +Этот файл будет прочитан после выполнения `setfsmac` для каждой файловой системы. В этом примере устанавливается политика для корневой файловой системы: -[source,shell] -.... -% for i in `echo test*`; do echo 1 > $i; done --su: test1: Permission denied --su: test4: Permission denied --su: test5: Permission denied +[source, shell] .... - -Подобно тестам на чтение, доступ на запись должен быть запрещен для пар: `(biba/low,mls/high)` и `(biba/equal,mls/equal)`. - -[source,shell] -.... -% cat test? -cat: test1: Permission denied -cat: test2: Permission denied -1 -cat: test4: Permission denied -.... - -А теперь от `root`: - -[source,shell] -.... -# cat test2 -1 -.... - -[[MAC-examplehttpd]] -== Другой пример: Использование MAC для защиты веб сервера - -Будет создано отдельное хранилище для веб данных, к которому пользователи должны иметь доступ. Это позволит `biba/high` управлять доступом к веб данным. - -Начните с создания каталога для хранения веб данных: - -[source,shell] -.... -# mkdir /usr/home/cvs +# setfsmac -ef /etc/policy.contexts / .... -Теперь инициализируйте его командой `cvs`: +Далее добавьте эти изменения в основной раздел файла [.filename]#/etc/mac.conf#: -[source,shell] +[.programlisting] .... -# cvs -d /usr/home/cvs init +default_labels file ?biba +default_labels ifnet ?biba +default_labels process ?biba +default_labels socket ?biba .... -Для начала необходимо включить политику `biba`, добавив `mac_biba_enable="YES"` в [.filename]#/boot/loader.conf#. Предполагается, что ядро скомпилировано с поддержкой MAC. - -Далее установите метку `biba/high` для всей системы по умолчанию. +=== Конфигурация загрузчика -В файл [.filename]#login.conf#, класс default, необходимо внести следующие изменения: +Для завершения настройки добавьте следующие строки в [.filename]#/boot/loader.conf#: [.programlisting] .... -:ignoretime@:\ - :umask=022:\ - :label=biba/high: +mac_biba_load="YES" +mac_seeotheruids_load="YES" +security.mac.biba.trust_all_interfaces=1 .... -Каждого пользователя необходимо поместить в класс по умолчанию; такая команда: +Добавьте следующую строку в конфигурацию сетевой карты, хранящуюся в [.filename]#/etc/rc.conf#. Если основная настройка сети выполняется через DHCP, это может потребовать ручной настройки после каждой загрузки системы: -[source,shell] +[.programlisting] .... -# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \ - /etc/passwd`; do pw usermod $x -L default; done; +maclabel biba/equal .... -быстро решит эту задачу. - -Теперь создадим другой класс, web, копию класса default с меткой, установленной в `biba/low`. +=== Проверка конфигурации -Создайте пользователя для работы с основными веб данными, хранящимися в репозитории cvs. Этого пользователя необходимо поместить в новый класс, `web`. +Сначала убедитесь, что веб-сервер и Nagios не будут запускаться при инициализации системы и перезагрузке. Убедитесь, что `root` не имеет доступа к любым файлам в конфигурационном каталоге Nagios. Если `root` может просматривать содержимое [.filename]#/var/spool/nagios#, значит что-то не так. Вместо этого должна возвращаться ошибка "permission denied". -Поскольку метка по умолчанию `biba/high`, на репозитории она будет той же. Веб данные должны иметь ту же метку, чтобы у пользователей был доступ к ним на чтение/запись. Веб сервер должен иметь доступ к тем же данным, к которым есть доступ у пользователей с меткой `biba/high`, для этого необходимо понизить метку данных. +Если все выглядит нормально, можно запустить Nagios, Apache и Sendmail: -Все, что потребуется, это следующий man:sh[1] скрипт, который может быть запущен из man:cron[8]: - -[.programlisting] +[source, shell] .... -PATH=/bin:/usr/bin:/usr/local/bin; export PATH; -CVSROOT=/home/repo; export CVSROOT; -cd /home/web; -cvs -qR checkout -P htdocs; -exit; +# cd /etc/mail && make stop && \ +setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \ +setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart .... +Тщательно проверьте, чтобы всё работало правильно. Если нет, проверьте файлы журналов на наличие сообщений об ошибках. При необходимости используйте `man:sysctl[8]` для отключения модуля политики безопасности `man:mac_biba[4]` и попробуйте запустить всё снова как обычно. + [NOTE] ==== -Во многих случаях в веб файлы `cvs` необходимо поместить теги Id. -==== - -Этот скрипт теперь может быть помещен в домашний каталог каталог пользователя `web`, необходимо также добавить следующую запись man:crontab[1]: - -[.programlisting] -.... -# Выполнять checkout web данных под меткой biba/low каждые 12 часов: -0 */12 * * * web /home/web/checkout.sh -.... - -Эта запись будет извлекать HTML страницы каждые двенадцать часов. +Пользователь `root` всё ещё может изменять параметры безопасности и редактировать конфигурационные файлы. Следующая команда разрешит понижение уровня политики безопасности для нового запущенного shell: -Метод запуска веб сервера по умолчанию также должен быть изменен для запуска процесса с меткой `biba/low`. Это может быть сделано путем следующего изменения в скрипте [.filename]#/usr/local/etc/rc.d/apache.sh#: - -[.programlisting] +[source, shell] .... -command="setpmac biba/low /usr/local/sbin/httpd" +# setpmac biba/10 csh .... -Настройки Apache должны быть изменены для работы с политикой `biba/low`. В этом случае необходимо указать для хранения лог файлов каталог с меткой `biba/low`, иначе будут возвращены ошибки `access denied`. - -[NOTE] +Чтобы предотвратить это, принудительно ограничьте пользователя диапазоном с помощью man:login.conf[5]. Если man:setpmac[8] попытается выполнить команду вне пределов отдела, будет возвращена ошибка и команда не выполнится. В данном случае установите root в `biba/high(high-high)`. ==== -В этом примере необходимо указать в директиве `docroot` каталог [.filename]#/home/web/htdocs#; или, Apache не сможет найти каталог с документами. -==== - -Необходимо также изменить другие параметры конфигурации, включая PID файл, `Scoreboardfile`, `DocumentRoot`, или любые другие настройки для каталогов, где необходим доступ на запись. При использовании `biba` будет запрещен доступ на запись во все каталоги сервера, на которых нет метки `biba/low`. [[mac-troubleshoot]] -== Решение проблем с инфраструктурой MAC - -На стадии разработки несколько пользователей сообщали о проблемах при обычных настройках. Некоторые из этих проблем приведены ниже: - -=== Параметр `multilabel` не может быть включен на [.filename]#/# +== Устранение проблем с инфраструктурой MAC -Параметр `multilabel` не включается на моем корневом ([.filename]#/#) разделе! +Этот раздел посвящён распространённым ошибкам конфигурации и способам их устранения. -Похоже, что каждый пятидесятый пользователь сталкивается с этой проблемой; на самом деле, и у нас была эта проблема в первых настройках. Дальнейшие наблюдения за этой так называемой "ошибкой" привели меня к мнению, что это результат или некорректной документации, или неправильной интерпретации этой документации. Независимо от того, почему это случилось, для решения этой проблемы могут быть предприняты следующие шаги: +Флаг `multilabel` не сохраняется на корневом ([.filename]#/#) разделе::: +Следующие действия могут помочь устранить эту временную ошибку: [.procedure] ==== -. Отредактируйте [.filename]#/etc/fstab# и установите для корневого раздела параметр только для чтения (`ro`). -. Перегрузитесь в однопользовательский режим. -. Запустите команду `tunefs -l enable` на [.filename]#/#. -. Перегрузите систему в нормальный режим. -. Запустите `mount -urw`[.filename]#/# и измените параметр `ro` обратно на `rw` в [.filename]#/etc/fstab#; перегрузите систему опять. -. Дважды проверьте вывод `mount`, чтобы убедиться, что параметр `multilabel` был установлен на корневой файловой системе. +. Отредактируйте файл [.filename]#/etc/fstab# и установите корневой раздел в `ro` для режима только для чтения. +. Перезагрузитесь в однопользовательском режиме. +. Выполните команду `tunefs -l enable` для раздела [.filename]#/#. +. Перезагрузите систему. +. Выполните `mount -urw`[.filename]#/#, измените `ro` обратно на `rw` в [.filename]#/etc/fstab# и перезагрузите систему снова. +. Перепроверьте вывод команды `mount`, чтобы убедиться, что опция `multilabel` корректно установлена для корневой файловой системы. ==== -=== Не могу запустить XFree86(TM) после MAC - -После настройки системы безопасности MAC, я больше не могу запускать XFree86(TM)! - -Это может быть вызвано политикой MAC `partition` или путем неправильной установки меток одной из политик MAC. Для отладки попробуйте следующее: +После настройки безопасной среды с MAC, Xorg больше не запускается::: +Это может быть вызвано политикой MAC `partition` или ошибкой маркировки в одной из политик маркировки MAC. Для диагностики попробуйте следующее: [.procedure] ==== -. Просмотрите сообщение об ошибке; если пользователь находится в классе `insecure`, проблема может быть в политике `partition`. Попробуйте установить класс пользователя обратно в `default` и пересобрать базу данных командой `cap_mkdb`. Если это не решит проблемы, попробуйте шаг два. -. Дважды проверьте политики с метками. Убедитесь, что политики настроены правильно для рассматриваемого пользователя, приложения XFree86(TM), и устройств в [.filename]#/dev#. -. Если проблема не решена, отправьте сообщение об ошибке и описание вашей системы в список рассылки TrustedBSD, находящийся на веб сайте http://www.TrustedBSD.org[TrustedBSD] или в {freebsd-questions}. +. Проверьте сообщение об ошибке. Если пользователь находится в классе `insecure`, проблема может быть в политике `partition`. Попробуйте вернуть пользователя в класс `default` и пересобрать базу данных с помощью `cap_mkdb`. Если это не решит проблему, перейдите ко второму шагу. +. Перепроверьте, что политики меток правильно установлены для пользователя, Xorg и записей в [.filename]#/dev#. +. Если ни один из этих способов не решит проблему, отправьте сообщение об ошибке и описание окружения на {freebsd-questions}. ==== -=== Error: man:_secure_path[3] cannot stat [.filename]#.login_conf# - -При попытке переключения от `root` на другого пользователя системы, появляется сообщение об ошибке `_secure_path: unable to state .login_conf`. - -Это сообщение обычно показывается, когда у пользователя более высокая метка, чем у пользователя, которым он пытается стать. Например, у пользователя системы `joe` метка по умолчанию `biba/low`. Пользователь `root`, метка которого `biba/high`, не может просматривать домашний каталог пользователя `joe`. Это не зависит от того, использует ли пользователь `root` команду `su joe` или нет. В этом сценарии модель целостности Biba не позволит `root` просматривать объекты с низким уровнем целостности. +Появляется ошибка `_secure_path: unable to stat .login_conf`::: +Этот ошибка может возникать, когда пользователь пытается переключиться с пользователя `root` на другого пользователя в системе. Это сообщение обычно появляется, когда у пользователя установлена более высокая метка, чем у пользователя, в которого он пытается переключиться. Например, если у `joe` метка по умолчанию `biba/low`, а у `root` — `biba/high`, `root` не сможет просмотреть домашний каталог ``joe``. Это произойдет независимо от того, использовал ли `root` команду `su` для переключения на `joe`, так как модель целостности Biba не позволяет `root` просматривать объекты с более низким уровнем целостности. -=== Пользователя `root` нет! - -В нормальном или даже однопользовательском режиме `root` не обнаруживается. Команда `whoami` возвращает 0 (нуль) и `su` возвращает `who are you?`. Что можно сделать? - -Это может произойти, если политика с метками была отключена, или через man:sysctl[8], или путем выгрузки модуля политики. Если политика была постоянно или временно отключена, базу данных login необходимо перенастроить. Дважды проверьте [.filename]#login.conf#, чтобы убедиться, что все параметры `label` были удалены и пересоберите базу данных командой `cap_mkdb`. +Система больше не распознает `root`::: +Когда это происходит, `whoami` возвращает `0`, а `su` выводит `who are you?`. ++ +Это может произойти, если политика меток была отключена через man:sysctl[8] или модуль политики был выгружен. Если политика отключена, необходимо перенастроить базу данных возможностей входа. Проверьте файл [.filename]#/etc/login.conf#, чтобы убедиться, что все опции `label` удалены, и перестройте базу данных с помощью `cap_mkdb`. ++ +Это также может произойти, если политика ограничивает доступ к [.filename]#master.passwd#. Обычно это происходит, когда администратор изменяет файл под меткой, которая конфликтует с общей политикой, используемой системой. В таких случаях система прочитает информацию о пользователе, но доступ будет заблокирован, так как файл унаследовал новую метку. Отключите политику с помощью man:sysctl[8], и всё должно вернуться в норму. |
