Настройка Apparmor в Ubuntu 16.04 | Losst

Настройка Apparmor в Ubuntu 16.04

AppArmor - это система управления доступом к файлам на основе имен (Mandatory Access Control). Недавно мы рассматривали еще одну реализацию такой системы - SELinux. Apparmor работает подобным способом, на основе модуля ядра Linux Security (LSM). Но он сильно отличается от SELinux и в первую очередь своей простотой. Здесь нет никаких ролей и маркеров. Есть только программы и список файлов, к которым они могут иметь доступ. Если SELinux используется по умолчанию в Red Hat, от Apparmor, установлен и активирован по умолчанию в Ubuntu.

В этой статье мы рассмотрим как выполняется настройка Apparmor в Ubuntu 16.04, как контролировать доступ приложений к файлам, а также как создавать свои файлы профилей для новых приложений.

Немного теории

Контроль доступа для программы осуществляется на основе файла профиля. Причем вам необязательно полностью включать или отключать Apparmor, вы можете контролировать доступ только для отдельных приложений.

Профили могут работать в двух режимах:

  • Enforce - ядро гарантирует соблюдение правил, указанных в файле профиля, все нарушения блокируются, а также записываются в файл журнала, где могут быть очень легко просмотрены.
  • Complain - режим обучения, программа будет только регистрировать нарушения ничего не блокируя.

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

Установка Apparmor в Ubuntu 16.04

Я уже сказал, что Apparmor в системе установлен. Но установлены только базовые компоненты, если нам нужны дополнительные профили и инструменты управления, нужно их устанавливать отдельно:

$ sudo apt install apparmor-utils apparmor-profiles

Теперь можем переходить к работе с Apparmor.

Настройка Apparmor в Ubuntu

Перед тем как переходить непосредственно к настройке Apparmor, давайте посмотрим ее состояние. Для этого выполните:

$ apparmor_status

apparmor1

apparrmor

Из снимка видно, что сейчас загружено 57 профилей, 20 из которых находятся в принудительном режиме (enforce), а 37 в режиме обучения.

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

Как видите, профилей не так уж много, но на самом деле их есть больше. Мы установили дополнительные профили в пакете apparmor-profiles, все они находятся в папке /usr/share/doc/apparmor-profiles/extras/. Посмотрите ее содержимое:

$ ls /usr/share/doc/apparmor-profiles/extras/

apparmor3

Здесь доступны как уже привычные серверные профили, так и профили для настольных приложений, например, браузеров и почтовых клиентов.

Имя профиля представляет из себя полный путь к файлу программы в котором наклонная черта заменена на точку, например: usr.bin.skype или usr.bin.man.

Давайте, для примера, скопируем профиль для утилиты man:

$ sudo cp /usr/share/doc/apparmor-profiles/extras/usr.bin.man /etc/apparmor.d/

Смотрим состояние и видим, что теперь у нас есть такой профиль.

apparmor4

Для переключения режима для профиля используются две команды aa-enforce и aa-complain. Давайте включим принудительное выполнение для нашего профиля:

$ sudo aa-enforce man

А чтобы вернуться в режим обучения наберите:

$ sudo aa-comlain man

Но проверить как это работает сейчас мы не можем, man просто так не станет нарушать правила. Давайте скопируем утилиту cp вместо man и проверим, будет ли она копировать файлы в корневом каталоге:

$ sudo touch /test
$ sudo cp /usr/bin/man /usr/bin/man1
$ sudo cp /bin/cp /usr/bin/man
$ sudo man /test /test1

apparmor5

Отказано в доступе, но как такое может быть, ведь мы выполняли команду от суперпользователя? Для Apparmor неважно root это или нет, сказано нет доступа к файлам, значит нет, и все. Возвращаем нашу man на место:

$ sudo cp /usr/bin/man1 /usr/bin/man
$ rm /test

Теперь смотрим лог Apparmor, и видим в конце две записи, об отказе в доступе:

$ tail /var/log/kern.log

apparmor6

Работает. Теперь рассмотрим как создать свой профиль, это тоже должна включать настройка apparmor в Ubuntu, поскольку профили есть далеко не для всех приложений.

Создание профиля в AppArmor

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

#include <tunables/global>

/usr/bin/man {
#include <abstractions/base>
#include <abstractions/nameservice>

capability setgid,
capability setuid,

/usr/bin/man r,
/usr/lib/man-db/man Px,

}

Основу профиля составляют адреса файлов, к которым программа может иметь доступ, а также разрешения для этих файлов. Синтаксис такой:

/адрес/файла права

Доступны такие права:

  • r - разрешить чтение
  • w - разрешить запись
  • a - разрешить запись в конец файла
  • px - разрешить запуск новых процессов если для них есть профиль
  • Px - разрешить запуск новых процессов, если для них есть профиль и стереть переменные окружения
  • ix - разрешить запуск нового процесса под профилем текущего
  • m - разрешить загружать исполняемые файлы в память и запускать
  • l - разрешить создавать символические ссылки на исполняемые файлы
  • k - разрешить блокировать файлы
  • ux - не контролировать новые процессы
  • Ux - не контролировать новые процессы и очистить переменные окружения.

Этих полномочий вполне достаточно, для управления правами, но кроме списка файлов и их полномочий, файл профиля содержит еще директивы include и capability.

include позволяет включать другие файлы с разрешениями, они находятся в папке /etc/apparmor.d/abstractions/. Это такие же части профиля, со списком файлов и правами доступа. Они облегчают создание новых профилей.

С capability все немного сложнее. Программа может обращаться к ядру с помощью системных вызовов, эти вызовы Apparmor тоже контролирует. Посмотреть все доступные вызовы вы можете командой man capabilities. В нашем случае мы разрешаем процессу задать свой uid и gid, то есть сменить пользователя и группу, от которого он запущен.

Есть еще папка /etc/apparrmor.d/thunables с переменными, которые могут использоваться в каждом профиле. Но с ними разберемся по ходу. Теперь вы готовы к тому, чтобы создать профиль apparmor. Для примера будем создавать новый профиль для утилиты free. Напомню, что эта утилита показывает доступную оперативную память.

Сначала выполните такую команду, чтобы инициализировать шаблон профиля:

$ sudo aa-autodep free

apparmor7

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

$ sudo aa-genprof free

apparmor8

Программа говорит, что нужно запустить программу в отдельном окне терминала, и выполнить все действия, которые она может делать, затем нажать S. Так и поступаем:

$ free -h

apparmor9

Готово, теперь нажимаем F, чтобы завершить работу утилиты. Дальше включаем принудительный режим:

$ sudo aa-enforce free

И проверяем работоспособность утилиты:

$ free

apparmor12

Если вы меняли профиль вручную, то его необходимо перезагрузить, чтобы изменения вступили в силу, для этого используйте команду:

$ sudo aa-parser имя_профиля -a

Перезагрузить все профили можно командой:

$ sudo service apparmor reload

Вот и все, настройка apparmor в Ubuntu 16.04 завершена.

Отключение Apparmor

Если вам больше не нужен Apparmor, вы не хотите, чтобы программа тратила системные ресурсы или хотите просто отключить ее для отладки, это можно очень просто сделать.

Очищаем кеш профилей и останавливаем сервис управления AppArmor:

$ sudo service apparmor stop

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

$ sudo service apparmor teardown

Вот теперь профили выгружены.

Выводы

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

 

Ваше имя тоже может быть здесь. Как? Пишите для нас! Смотрите подробнее как стать автором Losst.

Оцените статью:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (5 оценок, среднее: 5,00 из 5)
Загрузка...

  3 comments for “Настройка Apparmor в Ubuntu 16.04

  1. Andrey
    Июль 13, 2016 at 12:07 пп

    День добрый!
    Кажется первые скрины не соответсвуют тексту после них.

    • Июль 13, 2016 at 12:53 пп

      Да, вы правы, была неточность, подправил.

  2. AlektroNik
    Август 22, 2016 at 6:42 пп

    Сергей, спасибо за статью.
    А что бет если cp скопировать не вместо man, а вместо asdfghjkl ? Тогда AppArmor не помешает запуску? Или есть режим, в котором все, что не задано профилями блочится, по-моему у SElinux есть такой режим, если не путаю.
    Еслиже такого режима нет, то как посоветуете защищаться в таком случае?

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

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: