Implementing-Mandatory-Access-Control-with-SELinux-or-AppArmor-in-Linux

Внедрение контроля доступа с помощью SELinux или AppArmor в Linux — LFCS часть 20

Рубрики:

LFCS

Метки:

, , , , , ,

Чтобы улучшить механизмы безопасности, предоставляемые стандартными разрешениями ugo/rwx и списками контроля доступа, Агентство национальной безопасности США (NSA) разработало метод контроля обязательного доступа (MAC), известный как SELinux (сокращение от Security Enhanced Linux), чтобы ограничить, среди прочего, возможность процессов получать или выполнять другие операции над системными объектами (такими как файлы, каталоги, сетевые порты и т.д.) до наименьшего разрешения, но при этом допускать дальнейшие модификации этой модели.

Другим популярным и широко используемым MAC является AppArmor, который помимо функций, предоставляемых SELinux, включает в себя режим обучения, который позволяет системе «учиться» тому, как работает конкретное приложение, и устанавливать ограничения, настраивая профили для безопасного использования приложений.

В CentOS 7 SELinux встроен в ядро ​​и включен по умолчанию в режиме принудительного исполнения (подробнее об этом в следующем разделе), в отличие от openSUSE и Ubuntu, которые используют AppArmor.

В этой статье мы расскажем о принципах работы SELinux и AppArmor и о том, как использовать один из этих инструментов для ваших целей в зависимости от выбранного вами дистрибутива.

Введение в SELinux и его использование на CentOS 7

Security Enhanced Linux может работать двумя различными способами:

  • Enforcing: SELinux запрещает доступ на основе правил политики SELinux — набор рекомендаций, которые контролируют механизм безопасности.
  • Permissive: SELinux не запрещает доступ, но отказы регистрируются для действий, которые были бы лишены доступа, если они работали в режиме принудительного исполнения.

SELinux также можно и вовсе отключить. Хотя он и не является режимом работы, он по-прежнему является опцией. Однако научиться использовать этот инструмент лучше, чем просто игнорировать и отключить его. Имейте это в виду!

Чтобы отобразить текущий режим SELinux, используйте getenforce. Если вы хотите переключить режим работы, используйте setenforce 0 (чтобы установить его в Permissive) или setenforce 1 (Enforcing).

Поскольку это изменение не сохранится при перезагрузке, вам нужно будет отредактировать файл /etc/selinux/config и установить переменную SELINUX в состояние enforcing, permissive или disabled для его сохранения после перезагрузки:

How-to-Enable-and-Disable-SELinux-Mode

 

 

Если getenforce возвращает Disabled, вам нужно будет отредактировать /etc/selinux/config с требуемым режимом работы и перезагрузиться. В противном случае вы не сможете установить (или переключить) режим работы с помощью setenforce.

Одно из типичных применений setenforce состоит в переключении между режимами SELinux (от enforcing до permissive или наоборот) для устранения неполадок приложения, которое работает неправильно. Если оно продолжает работать в неисправном режиме после того, как вы установили SELinux в режим Permissive, вы можете быть уверены, что столкнулись с проблемой разрешений SELinux.

Два классических случая, когда мы, скорее всего, будем иметь дело с SELinux:

  • Изменение порта по умолчанию, который прослушивает демон или служба.
  • Установка директивы DocumentRoot для виртуального хоста вне /var/www/html.

Давайте рассмотрим эти два случая, используя следующие примеры.

 

ПРИМЕР 1: Изменение порта по умолчанию для демона sshd

Одним из первых, что делают большинство системных администраторов для обеспечения безопасности своих серверов, является изменение порта, который прослушивает демон SSH, в основном для предотвращения сканирования портов и внешних вмешательств. Для этого мы используем директиву Port в /etc/ssh/sshd_config, а затем вводим новый номер порта следующим образом (в этом случае мы будем использовать порт 9999):

 

После попытки перезапуска службы и проверки её статуса мы увидим, что она не запускается:

 

Check-SSH-Service-Status

 

 

Если мы посмотрим на /var/log/audit/audit.log, мы увидим, что sshd не удалось запустить на сервере 9999 с помощью SELinux, поскольку это зарезервированный порт для службы управления JBoss (сообщения журнала SELinux включают в себя слово » AVC «, чтобы их можно было легко идентифицировать среди других сообщений):

 

Check-Linux-Audit-Logs

 

 

На этом этапе большинство людей, вероятно, уже отключили бы SELinux, но мы этого не сделаем. Мы же знаем, что для SELinux есть способ, чтобы изменить порт по умолчанию для демона sshd и всё продолжило работать. Убедитесь, что пакет policycoreutils-python установлен и запущен:

 

policycoreutils-python необходим чтобы просмотреть список портов, в которых SELinux позволяет слушать sshd. На следующем скриншоте мы также видим, что порт 9999 зарезервирован для другой службы, и поэтому мы не можем использовать его для наших целей:

 

Конечно, мы могли бы выбрать и этот порт для SSH, но это только если мы уверены, что нам не нужно будет использовать эту конкретную машину для любых связанных с JBoss сервисов, мы можем затем изменить существующее правило SELinux и назначить этот порт для SSH:

 

После этого мы можем использовать команду semanage для проверки правильности назначения порта и опцию -lC (сокращение от «list custom»):

 

Assign-Port-to-SSH

 

 

Теперь мы можем перезапустить SSH и подключиться к сервису с помощью порта 9999. Обратите внимание, что это изменение сохранится даже после перезагрузки.

ПРИМЕР 2: Установка директивы DocumentRoot вне /var/www/html для виртуального хоста

Если вам нужно настроить виртуальный хост Apache, используя каталог, отличающийся от /var/www/html, как в случае с DocumentRoot (скажем, например, /websrv/sites/gabriel/public_html), выполните:

 

Apache откажется обслуживать контент, потому что index.html был помечен SELinux как default_t, а Apache не может получить доступ к такому типу файла:

 

Labeled-as-default_t-SELinux-Type

 

 

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

 

Check-Logs-for-SELinux-Issues

 

 

Чтобы изменить метку /websrv/sites/gabriel/public_html рекурсивно на httpd_sys_content_t, выполните:

 

Вышеупомянутая команда предоставит доступ для Apache только к этому каталогу и всему его содержимому.

Наконец, чтобы применить изменения политики, выполните следующие действия:

 

Теперь вы должны иметь доступ к данному каталогу:

 

Check-Logs-for-SELinux-Issues

 

 

Для получения дополнительной информации о SELinux рекомендуем ознакомится с: «Fedora 22, SELinux and Administrator guide«.

 

 

Введение в AppArmor и использование его на OpenSUSE и Ubuntu

Метод контроля обязательного доступа AppArmor основана на профилях, определенных в текстовых файлах, где установлены определенные разрешения и правила контроля доступа. Данные профили используются для установки ограничений на взаимодействия приложений с процессами и файлами в системе.

Набор профилей предоставляется в готовом виде операционной системой, в тоже время некоторые могут быть установлены автоматически при установке приложения, либо установлены вручную администратором системы.

Как и SELinux, AppArmor запускает профили в двух режимах. В режиме enforce (принудительного применения) приложениям предоставляются минимальные разрешения, необходимые для их запуска, тогда как в режиме complain AppArmor позволяет приложению выполнять ограниченные действия и сохраняет «жалобы», возникающие в результате этих операций, в журнал (/var/log/kern.log, /var/log/audit/audit.log и другие журналы внутри /var/log/apparmor).

Эти журналы будут отображаться построчно с указанными в строках ошибками, которые произойдут, если профиль будет запущен в режиме enforce. Таким образом, вы можете попробовать запустить приложение в режиме complain и настроить его поведение перед его запуском в AppArmor в режиме принудительного исполнения.

Текущее состояние AppArmor можно посмотреть, используя:

 

Check-AppArmor-Status

 

 

Приведенный выше скриншот указывает, что профили /sbin/dhclient, /usr/sbin/ и /usr/sbin/tcpdump находятся в режиме принудительного исполнения (это по умолчанию реализовано в Ubuntu).

Поскольку не все приложения поддерживают связанные профили AppArmor, пакет aparmor-profiles, предоставляет другим приложения такие связи для корректной работы AppArmor. По умолчанию они настроены на запуск в режиме complain, чтобы системные администраторы могли их протестировать и выбрать, какие из них им необходимы.

Мы будем использовать профили apparmor, поскольку написание собственных профилей выходит за рамки сертификации LFCS. Однако, поскольку профили представляют собой текстовые файлы, вы можете просматривать их и изучать их при подготовке к созданию собственных профилей в будущем.

Профили AppArmor хранятся внутри /etc/apparmor.d. Давайте рассмотрим содержимое этого каталога до и после установки профилей apparmor:

 

View-AppArmor-Directory-Content

 

 

Если вы снова запустите sudo apparmor_status, вы увидите более длинный список профилей в режиме complain. Теперь вы можете выполнить следующие операции:

Для переключения профиля, находящегося в режиме принудительного исполнения, на режим complain, вам необходимо:

 

и наоборот (complain -> enforce):

 

В вышеуказанных случаях допускается использование подстановочных знаков. Например:

 

поместит все профили внутрь /etc/apparmor.d в режим complain.

 

переключит все профили в режим принудительного ввода (enforce).

Чтобы полностью отключить профиль, создайте символическую ссылку в каталоге /etc/apparmor.d/disabled:

 

Для получения дополнительной информации об AppArmor обратитесь к официальной странице вики AppArmor или к документации, предоставленной Ubuntu.

 

Итоги 

В этой статье мы рассмотрели основы SELinux и AppArmor, двух известных MAC. Когда использовать тот или иной? Чтобы избежать трудностей, придерживайтесь того MAC, что поставляется с выбранным вами дистрибутивом. В любом случае MAC поможет вам установить ограничения на процессы и доступ к системным ресурсам для повышения безопасности на ваших серверах.

Стать сертифицированным системным администратором Linux, курсы Linux

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасности от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

LFCS

Метки:

, , , , , ,

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню