
Понимание AppArmor
AppArmor (Application Armor) — это модуль безопасности для ядра Linux, который позволяет системному администратору ограничивать возможности отдельных программ. AppArmor использует профили безопасности для определения того, к каким ресурсам могут обращаться приложения, тем самым ограничивая потенциальный ущерб от вредоносного кода.
Принцип работы AppArmor
AppArmor работает, связывая каждую программу с профилем безопасности, который определяет ее разрешения. Эти профили могут определять, какие файлы приложение может читать, записывать или выполнять. AppArmor работает в двух режимах:
- Режим принуждения: В этом режиме AppArmor применяет политики, определенные в профилях, и блокирует любой несанкционированный доступ.
- Режим жалоб: В этом режиме AppArmor регистрирует нарушения политики, но не применяет их, позволяя администраторам тестировать профили перед их полным внедрением.
Профили AppArmor
Профили AppArmor — это обычные текстовые файлы, определяющие права доступа для приложений. Эти профили могут быть настроены на разрешение или запрет определенных действий с файлами, каталогами или даже системными ресурсами, такими как доступ к сети.
Пример профиля AppArmor
#include <tunables/global>
/usr/sbin/apache2 {
#include <abstractions/base>
/var/www/html/** r,
/etc/apache2/** r,
/usr/sbin/apache2 mr,
capability net_bind_service,
network inet tcp,
}
В приведенном выше профиле Apache предоставляется доступ на чтение к /var/www/html/
, /etc/apache2/
, и memory-read (mr
) доступ к своим двоичным файлам. Кроме того, ему разрешено связываться с сетевым сервисом через capability net_bind_service
и взаимодействовать с сетевым стеком TCP.
Начало работы с AppArmor в Linux
Установка AppArmor
AppArmor доступен в большинстве дистрибутивов Linux, но его может потребоваться установить и включить. В Ubuntu, например, он обычно установлен по умолчанию. Однако если вам нужно установить его, вы можете сделать это с помощью следующих команд:
$ sudo apt-get update
$ sudo apt-get install apparmor apparmor-utils
Включение и отключение AppArmor
Чтобы проверить, включен ли AppArmor, используйте:
$ sudo aa-status
Чтобы включить AppArmor, вы можете изменить конфигурацию GRUB. Редактировать /etc/default/grub
и добавьте apparmor=1 security=apparmor
к GRUB_CMDLINE_LINUX_DEFAULT
линия:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=1 security=apparmor"
Затем обновите GRUB:
$ sudo update-grub
$ sudo reboot
Чтобы отключить AppArmor, просто удалите или закомментируйте строку apparmor=1 security=apparmor
из конфигурации GRUB и перезагрузитесь.
Управление профилями AppArmor
Профили AppArmor хранятся в /etc/apparmor.d/
. Вы можете создавать, изменять или удалять профили в соответствии с вашими требованиями.
Создание нового профиля AppArmor
Чтобы создать новый профиль, вы можете воспользоваться командой aa-genprof
инструмент. Например, чтобы создать профиль для /usr/bin/evince
приложения:
$ sudo aa-genprof /usr/bin/evince
Следуйте инструкциям на экране, чтобы указать разрешения в процессе работы приложения.
Установка профиля в режим принудительного использования
После создания профиля вы можете перевести его в режим принудительного использования:
$ sudo aa-enforce /etc/apparmor.d/usr.bin.evince
Эта команда гарантирует, что профиль активно применяет свои правила.
Установка профиля в режим жалобы
Если вы хотите протестировать профиль перед внедрением:
$ sudo aa-complain /etc/apparmor.d/usr.bin.evince
В этом режиме AppArmor будет регистрировать любые нарушения, не применяя ограничений.
Понимание SELinux
Security-Enhanced Linux (SELinux) — это еще один фреймворк MAC, который контролирует доступ к файлам, процессам и сетевым ресурсам на основе политик безопасности. Изначально разработанный АНБ, SELinux известен своим тонким контролем безопасности, что делает его подходящим для высокочувствительных сред.
Как работает SELinux
SELinux работает, помечая файлы, процессы и другие системные ресурсы контекстом. Затем политики определяют, какие действия разрешены на основе этих контекстов. SELinux может работать в трех различных режимах:
- Режим принуждения: SELinux применяет свои политики безопасности, отказывая в доступе там, где это явно не разрешено политикой.
- Разрешительный режим: SELinux регистрирует нарушения политики, не применяя их, что полезно для устранения неполадок.
- Отключенный режим: SELinux полностью отключен.
Политики SELinux
Политики SELinux — это комплексные наборы правил, определяющие разрешения доступа для всех субъектов и объектов в системе. Политики обычно делятся на две категории:
- Целевые политики: Они применяются к определенным процессам, в то время как остальная часть системы работает с DAC (Discretionary Access Control).
- Политики MLS (многоуровневая безопасность): Они обеспечивают строгое соблюдение безопасности для всех процессов и используются в средах, требующих высокой безопасности, например в правительственных системах.
Пример политики SELinux
allow httpd_t httpd_sys_content_t:file { read open getattr };
В этом фрагменте политики httpd_t
домену (обычно связанному с сервером Apache) разрешено читать, открывать и получать атрибуты файлов, помеченных символом httpd_sys_content_t
типом.
Начало работы с SELinux в Linux
Установка SELinux
В большинстве дистрибутивов, таких как CentOS, RHEL и Fedora, SELinux установлен и включен по умолчанию. В системах на базе Debian, таких как Ubuntu, он может быть установлен следующим образом:
$ sudo apt-get install selinux-basics selinux-policy-default auditd
$ sudo selinux-activate
$ sudo reboot
Настройка режимов SELinux
Вы можете проверить текущий режим SELinux с помощью команды sestatus
команда:
$ sestatus
Чтобы изменить режим работы SELinux, отредактируйте файл /etc/selinux/config
файл:
SELINUX=enforcing
Доступны следующие варианты:
enforcing
: Обеспечивает выполнение политики SELinux.permissive
: SELinux регистрирует действия, но не применяет политику.disabled
: SELinux отключен.
После внесения изменений перезагрузите систему, чтобы они вступили в силу.
$ sudo reboot
Управление политиками SELinux
Политики SELinux хранятся в /etc/selinux/
и могут управляться с помощью различных инструментов, таких как semanage
, setsebool
, и audit2allow
.
Создание нового модуля политики SELinux
Чтобы создать пользовательский модуль политики, выполните следующие действия:
- Запишите файл внедрения типа (TE):
module mymodule 1.0;
require {
type httpd_t;
type myapp_exec_t;
}
allow httpd_t myapp_exec_t:file execute;
- Скомпилируйте файл TE:
$ checkmodule -M -m -o mymodule.mod mymodule.te
$ semodule_package -o mymodule.pp -m mymodule.mod
- Установите модуль политики:
$ sudo semodule -i mymodule.pp
Это позволит загрузить пользовательскую политику в активную политику SELinux.
Управление булевыми значениями SELinux
Були SELinux позволяют включать и выключать определенные политики. Вы можете перечислить все доступные булины с помощью:
$ sudo getsebool -a
Чтобы изменить значение булевой функции, воспользуйтесь командой setsebool
команду:
$ sudo setsebool httpd_can_network_connect on
Чтобы сделать это изменение постоянным, добавьте -P
опцию:
$ sudo setsebool -P httpd_can_network_connect on
AppArmor против SELinux: Основные различия
Хотя и AppArmor, и SELinux обеспечивают безопасность MAC, они имеют существенные различия, которые влияют на их использование и управление.
Безопасность на основе профилей против безопасности на основе меток
AppArmor использует элементы управления на основе профилей, где для каждого приложения создаются отдельные профили. Эти профили определяют, к каким ресурсам приложение может получить доступ. SELinux, с другой стороны, основан на метках, где каждый файл, процесс и ресурс помечается контекстом безопасности. Политики применяются на основе этих меток.
Простота использования
AppArmor часто считается более простым в использовании благодаря своей простой системе профилей, которая не требует глубоких знаний для создания и управления. SELinux, хотя и является более мощным, имеет более сложную кривую обучения из-за сложной системы политик и маркировки.
Доступность по умолчанию
AppArmor по умолчанию
MAC-система в Ubuntu и некоторых других дистрибутивах на базе Debian. SELinux используется по умолчанию в дистрибутивах на базе Red Hat, таких как CentOS, Fedora и RHEL.
Гранулярность контроля
SELinux предлагает более тонкий контроль по сравнению с AppArmor. Это делает его подходящим для сред, где безопасность имеет первостепенное значение, таких как правительственные или корпоративные системы. AppArmor, хотя и эффективен, не предлагает такого же уровня детального контроля.
Примеры использования AppArmor и SELinux
Выбор между AppArmor и SELinux часто зависит от конкретных требований вашей среды.
Когда использовать AppArmor
- Легкая безопасность: Если вам нужно простое и легкое в управлении средство безопасности, AppArmor — отличный выбор. Он обеспечивает эффективный контроль при минимальных настройках.
- Среды Ubuntu или Debian: Поскольку AppArmor используется в этих системах по умолчанию, его проще внедрить и управлять им.
Когда использовать SELinux
- Среды повышенной безопасности: Для сред, требующих строгого контроля безопасности, SELinux идеально подходит благодаря подробному управлению политиками.
- Системы на базе Red Hat: SELinux глубоко интегрирован в эти системы, что делает его естественным выбором.
Расширенная конфигурация и настройка
И AppArmor, и SELinux можно точно настроить для удовлетворения конкретных требований безопасности. В этом разделе мы рассмотрим методы расширенной настройки обоих инструментов.
Расширенная конфигурация AppArmor
Использование AppArmor с контейнерами
AppArmor может быть особенно полезен для защиты контейнерных сред. Например, вы можете назначить определенные профили контейнерам Docker, чтобы ограничить их возможности.
$ docker run --rm -it --security-opt apparmor=docker-default ubuntu
Эта команда запускает контейнер Docker с параметром docker-default
AppArmor, ограничивая доступ контейнера к хост-системе.
Отладка AppArmor
Для отладки профилей AppArmor можно воспользоваться командой aa-logprof
инструмент, который помогает анализировать журналы и обновлять профили:
$ sudo aa-logprof
Этот инструмент анализирует журналы и предлагает обновить существующие профили на основе зарегистрированных событий.
Расширенная конфигурация SELinux
Настройка ярлыков SELinux
Пользовательские метки можно создавать и применять к файлам или процессам, чтобы обеспечить соблюдение определенных политик. Например, чтобы создать пользовательский ярлык:
$ sudo semanage fcontext -a -t my_custom_t "/custom/path(/.*)?"
$ sudo restorecon -Rv /custom/path
Здесь semanage
команда определяет пользовательский файловый контекст для указанного пути, а restorecon
применяет новую метку.
SELinux в виртуальных средах
SELinux может быть особенно полезен в виртуализированных средах, где изоляция безопасности имеет решающее значение. Например, вы можете применять определенные политики SELinux к виртуальным машинам, чтобы контролировать их доступ к ресурсам хоста.
$ sudo virsh setsebool virt_use_execmem on
Эта команда включает virt_use_execmem
Булево, позволяющее виртуальным машинам выполнять код в памяти, что важно для некоторых рабочих нагрузок.
Устранение неполадок и общие проблемы
Как AppArmor, так и SELinux имеют свой набор проблем. В этом разделе мы рассмотрим общие проблемы и способы их решения.
Общие проблемы с AppArmor
- Конфликты профилей: Если приложение работает не так, как ожидалось, это может быть связано с ограничивающими профилями AppArmor. Переключение профиля в режим жалобы может помочь выявить проблему.
$ sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld
- Анализ журналов: Анализ
/var/log/syslog
сообщений AppArmor может дать представление о том, что именно блокируется.
Общие проблемы с SELinux
- Нарушения политики: SELinux регистрирует нарушения политики в
/var/log/audit/audit.log
. Вы можете использоватьaudit2why
, чтобы понять причину отказа:
$ sudo cat /var/log/audit/audit.log | audit2why
- Разрешительный режим: Если вы часто сталкиваетесь с отказами, переключение SELinux в разрешительный режим может помочь диагностировать проблемы без блокирования операций.
$ sudo setenforce 0
Часто задаваемые вопросы
В чем разница между AppArmor и SELinux?
AppArmor использует подход на основе профилей для определения политик безопасности для приложений, в то время как SELinux использует систему на основе меток для применения политик во всей системе.
Легче ли использовать AppArmor, чем SELinux?
Да, AppArmor обычно считается более простым в использовании, поскольку он требует менее глубоких знаний для создания и управления профилями по сравнению с более сложной системой политик SELinux.
Можно ли использовать AppArmor и SELinux в одной системе?
Хотя технически возможно установить обе программы, не рекомендуется запускать их одновременно, поскольку они могут конфликтовать друг с другом. В большинстве систем используется тот или иной вариант.
Как переключаться между принудительным и разрешительным режимами в SELinux?
Вы можете переключать режимы с помощью команды setenforce
команды. Используйте setenforce 1
для режима принуждения и setenforce 0
для разрешительного режима.
Нужно ли перезагружать систему после установки SELinux?
Да, после установки и активации SELinux необходима перезагрузка, чтобы применить контексты безопасности к системным файлам.
Можно ли использовать AppArmor для защиты контейнеров Docker?
Да, AppArmor может защищать контейнеры Docker, применяя специальные профили, ограничивающие возможности контейнера.
Заключение
AppArmor и SELinux — мощные инструменты в наборе средств безопасности Linux, каждый из которых обладает уникальными преимуществами. AppArmor обеспечивает более дружественный подход к пользователю благодаря своей системе на основе профилей, что делает его идеальным для менее сложных сред. SELinux с его тонким контролем и комплексным применением политик подходит для сред с высоким уровнем безопасности, где необходим строгий контроль доступа. Поняв и правильно настроив эти инструменты, вы сможете значительно повысить уровень безопасности ваших Linux-систем.