Приручение системного Цербера: Полное руководство по настройке AppArmor на Debian

В прошлой статье, «Протокол Невозможной Ошибки», я рассказал вам историю изгнания призрака. Историю о том, как невидимая стена заперла меня снаружи моего собственного сервера, и как я был вынужден пойти на крайние меры — полное отключение системного телохранителя AppArmor.

Это было полевое хирургическое вмешательство. Быстрое, грязное, но необходимое для спасения «пациента». Но жить без иммунной системы — это путь к медленной смерти. Временное решение не должно становиться постоянным.

Эта статья — вторая, заключительная часть того расследования. Здесь мы не просто изгоняем демона. Мы ловим его, заковываем в цепи и заставляем служить нам. Мы превращаем обезумевшего Цербера в верного сторожевого пса. Это не просто инструкция. Это акт восстановления порядка из хаоса. Мы не просто включим рубильник. Мы заставим его работать правильно.

Часть 1: Диагностика. Почему охранник спал на посту?

После того как доступ к серверу был восстановлен, я вернул AppArmor в строй базовой командой sudo systemctl enable --now apparmor. И столкнулся с шокирующей правдой. Я думал, что телохранитель сошел с ума. Оказалось, он просто не пришел на работу.

Вот команда, которая вскрыла всю глубину проблемы:

sudo apparmor_status

И вот что она показала. Это «рентгеновский снимок» больной системы:

apparmor module is loaded.
13 profiles are loaded.
13 profiles are in enforce mode.
   /usr/bin/man
   /usr/sbin/chronyd
   ... (еще несколько системных утилит)
0 processes have profiles defined.

Объяснение на пальцах: Переведу с технического на человеческий.

  • apparmor module is loaded: «Сигнализация в здании установлена и подключена к сети».
  • 13 profiles are loaded: «У нас есть 13 инструкций для охранников, как себя вести».
  • 0 processes have profiles defined: «Ни один из охранников не вышел на свой пост».

Система безопасности была включена, но она охраняла только саму себя и несколько подсобных помещений (man, chronyd). А самые важные объекты — веб-сервер (Apache/Nginx), обработчик PHP, база данных (MySQL) — стояли с распахнутыми настежь дверями. AppArmor просто не знал об их существовании.

Часть 2: Вооружение. Выдаем охраннику полный свод правил.

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

Эта команда — и есть та самая папка с инструкциями.

# Устанавливаем базовые и расширенные профили для AppArmor
sudo apt-get install apparmor-utils apparmor-profiles apparmor-profiles-extra -y

Пояснение:

  • apparmor-utils: Дает нам инструменты для тонкой настройки и диагностики (те самые aa-complain, aa-enforce).
  • apparmor-profiles и apparmor-profiles-extra: Это и есть сокровище. Это огромный набор готовых, проверенных сообществом профилей безопасности для десятков приложений: Apache, Nginx, PHP-FPM, MySQL, Postfix и многих других.

После установки этих пакетов и перезапуска сервиса (sudo systemctl restart apparmor) картина изменилась, но не до конца. Статус показал 42 profiles are loaded, но все еще 0 processes have profiles defined. Охранники получили инструкции, но так и не вышли на посты.

Часть 3: Перезагрузка сознания. Заставляем систему проснуться.

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

Полная, чистая перезагрузка.

sudo reboot

Подводный камень: Может показаться, что это слишком грубый метод, но в данном случае он единственно верный. При старте с нуля операционная система проходит всю цепочку инициализации. Запуская Apache, она видит: «Ага, для тебя теперь есть профиль AppArmor, надевай его». Запуская PHP-FPM, она говорит: «И для тебя есть, будь добр соответствовать». Это гарантирует, что ни один процесс не проскользнет мимо нашего нового контроля.

Часть 4: Момент Истины. Проверка боевой готовности.

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

sudo apparmor_status

И вот он. Вид здоровой, правильно настроенной системы безопасности.

apparmor module is loaded.
42 profiles are loaded.
...
4 processes have profiles defined.
0 processes are in enforce mode.
4 processes are in complain mode.
   /usr/sbin/dnsmasq (728) dnsmasq
   /usr/sbin/php-fpm8.2 (627) php-fpm
   /usr/sbin/php-fpm8.2 (1323) php-fpm
   /usr/sbin/php-fpm8.2 (1324) php-fpm

Расшифровка победы:

  • 4 processes have profiles defined: Есть! Охранники вышли на посты. AppArmor теперь активно контролирует 4 процесса, включая три наших процесса PHP-FPM.
  • 4 processes are in complain mode: Это идеальное состояние после установки. Режим complain (жалобы) не блокирует подозрительные действия, а лишь записывает их в лог. Это позволяет убедиться, что профиль не мешает нормальной работе сайта, прежде чем переводить его в жесткий режим enforce.

Эпилог. Крепость построена.

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

Этот опыт доказывает фундаментальную истину: безопасность — это не флажок «включено/выключено». Это процесс. Это знание. Это понимание того, как работает твой собственный инструмент.

Теперь Цербер не просто прикован к воротам. Он накормлен, обучен и знает в лицо каждого, кому разрешен вход. А для всех остальных у него есть только один ответ — молчаливая и непробиваемая стена системной защиты. И на этот раз эта стена работает на нас.

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

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