Безопасность в Linux: Как работать с AppArmor

Безопасность в Linux: Как работать с AppArmor

Исторически Linux не разрабатывался с упором на безопасность. Существуют различные решения для безопасности, сфокусированные на разных аспектах Linux, и в результате легко упустить из виду отдельные части безопасности Linux. В качестве решения этой проблемы в 1990-х годах были представлены решения для обязательного контроля доступа. Их несколько. Основные — это SELinux и AppArmor.

  • SELinux — это то, что вы найдете в средах Red Hat.
  • AppArmor — это то, что вы найдете в средах Ubuntu.

В этой статье мы посмотрим, как работать с AppArmor.

Философия AppArmor: Профили (AppArmor) против меток (SELinux)

Чтобы понять AppArmor, нужно сначала понять MAC (Mandatory Access Control). Это система безопасности, которая работает поверх стандартных прав Linux (rwx). Она не спрашивает, кто запускает программу, она спрашивает, что этой программе разрешено делать в принципе.

Здесь и кроется главное отличие двух гигантов:

  • SELinux (Red Hat, Fedora): Это тотальная система безопасности. Ее философия — «запрещено всё, что явно не разрешено». SELinux применяет «метки» (labels) ко каждому файлу и каждому процессу в системе. Он сложен в настройке, но обеспечивает невероятно глубокую, общесистемную защиту.
  • AppArmor (Ubuntu, SUSE): Его философия — «защита конкретных служб». AppArmor не пытается заблокировать всю систему. Вместо этого он использует «профили» (profiles) — простые текстовые файлы, которые описывают, к каким файлам и ресурсам может обращаться конкретная программа (например, /usr/sbin/nginx или /usr/bin/vim).

Вывод: AppArmor намного проще в изучении и настройке, но он защищает только те приложения, для которых существует и активен профиль.

Установка и основные команды

AppArmor — это стандартная служба systemd в Ubuntu.

Проверка статуса:

sudo systemctl status apparmor
# Убедись, что служба ‘active (running)’

Полезные утилиты: Для полноценной работы нам понадобятся дополнительные утилиты. Имена всех утилит AppArmor удобно начинаются с aa-:

sudo apt install apparmor-utils apparmor-profiles apparmor-profiles-extra

Ключевые команды, которые нужно знать:

  • aa-status: Показывает, какие профили загружены и в каком режиме они работают (enforce — принудительный, или complain — режим жалоб/обучения).
  • aa-genprof: Утилита для генерации нового профиля в интерактивном режиме.
  • aa-complain: Переводит профиль в режим «жалоб». В этом режиме AppArmor логирует нарушения, но не блокирует их. Идеально для отладки.
  • aa-enforce: Переводит профиль в принудительный режим. Нарушения блокируются.

Где лежат профили? Все профили хранятся в каталоге /etc/apparmor.d/. Имена файлов соответствуют путям к бинарным файлам, которые они защищают (например, usr.bin.vim.basic).

Практика: Создаём профиль для vim (aa-genprof)

Давайте создадим профиль для редактора vim. Это самый наглядный способ понять, как работает AppArmor. Для этого нам понадобится два терминала.

Терминал 1: Запуск генератора профиля

В первом терминале мы запускаем aa-genprof. Он начнет следить за системой в поисках событий, связанных с vim.

# Убедись, что профиля еще нет (если есть, удали его для теста)
sudo aa-genprof /usr/bin/vim

aa-genprof попросит тебя «потренировать» приложение во втором терминале.

Терминал 2: «Тренировка» приложения

Во втором терминале мы должны выполнить все типичные действия, которые vim должен уметь делать.
# 1. Запускаем vim
vim /etc/motd

# 2. Выполняем действия
# (Например, читаем .vimrc, редактируем /etc/motd, сохраняем его)
# … выходим из vim …

Терминал 1: Сканирование и принятие решений

Возвращаемся в первый терминал и нажимаем S (Scan). aa-genprof просканирует системные логи (journalctl или auditd) и найдет все действия, которые vim пытался выполнить.

Он будет поочередно показывать каждое событие и спрашивать твое решение:
Profile: /usr/bin/vim
Path: /etc/motd
Mode: rw
Severity: unknown

(A)llow / (D)eny / (I)gnore / (G)lob / …

Твои варианты:

  • (A)llow: Разрешить это конкретное действие.
  • (D)eny: Явно запретить это действие.
  • (G)lob: Обобщить правило. Это очень полезно. Если нажать G, aa-genprof может предложить заменить /etc/motd на /etc/*, разрешая vim редактировать любой файл в /etc/.
  • (I)gnore: Пропустить это событие.

Ты повторяешь этот процесс (A, G, I…), пока не разберешь все события. В конце нажимаешь S (Save), чтобы сохранить профиль, и F (Finish), чтобы выйти.

Главный недостаток: «Слепое пятно» AppArmor

Теперь, когда наш профиль для vim создан и активен (aa-status покажет его в режиме enforce), давай проверим его «недостатки».

Тест 1 (Ожидаемый): vim (профилированное приложение) пытается отредактировать свой собственный профиль:

vim /etc/apparmor.d/usr.bin.vim.basic
# Результат: Permission denied!

Вывод: Отлично! AppArmor работает. Он заблокировал vim, не дав ему доступа к файлу, который не был разрешен в профиле.

Тест 2 (Проблема): А теперь попробуем сделать то же самое, но другим, непрофилированным приложением, например, nano или rm:

# Открываем тот же файл в nano
nano /etc/apparmor.d/usr.bin.vim.basic
# ... (Файл успешно открывается и редактируется)

# Удаляем профиль
rm /etc/apparmor.d/usr.bin.vim.basic
# ... (Файл успешно удаляется)

Вывод: AppArmor ничего не сделал.

В чем суть проблемы?

AppArmor — это как охранник, приставленный к конкретному человеку (vim). Он следит только за ним. Он не обращает внимания на других «людей» (nano, rm), у которых нет персонального охранника (профиля).

Это делает AppArmor прикладным, а не комплексным решением безопасности. Он отлично подходит для того, чтобы «запереть» конкретные, смотрящие в интернет службы (веб-сервер, DNS-сервер), но он не обеспечивает тотальной защиты, как SELinux.

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

Комментарии

Комментариев пока нет. Почему бы ’Вам не начать обсуждение?

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

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