AppArmor

AppArmor - это реализация Модуля безопасности линукс по управлению доступом на основе имен. AppArmor ограничивает отдельные программы набором перечисленных файлов и возможностями в соответствии с правилами Posix 1003.1e.

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

Для установки пакета apparmor-profiles наберите в терминале:

sudo apt-get install apparmor-profiles

Профили AppArmor имеют два режима выполнения:

  1. Фиксации/Обучения: нарушения профиля разрешаются и сохраняются в журнале. Полезно для тестирования и разработки новых профилей

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

Использование AppArmor

Пакет apparmor-utils содержит утилиты командной строки, которые можно использовать для изменения режима выполнения AppArmor, поиска статуса профиля, создания новых профилей и т.п.

1. apparmor_status используется для просмотра текущего статуса профиля AppArmor.

sudo apparmor_status

2. aa-complain переводит профиль в режим обучения (complain).

sudo aa-complain /path/to/bin

3. aa-enforce переводит профиль в режим ограничений (enforce).

sudo aa-enforce /path/to/bin

4. Профили AppArmor расположены в каталоге /etc/apparmor.d. Его можно использовать для управления режимом всех профилей. Введите следующую команду для перевода всех профилей в режим обучения:

sudo aa-complain /etc/apparmor.d/*

Перевод всех профилей в режим ограничений:

sudo aa-enforce /etc/apparmor.d/*

5. Команда apparmor_parser используется для загрузки профиля в ядро. Она также может использоваться для повторной загрузки загруженного профиля при использовании опции '-r'. Для загрузки введите:

cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

Для перезагрузки:

cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r

6. /etc/init.d/apparmor служит для перезагрузки всех профилей:

sudo /etc/init.d/apparmor reload

7. Директория /etc/apparmor.d/disable может использоваться совместно с опцией apparmor_parser -R для отключения профиля.

sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/profile.name

Для активации отключенного профиля удалите символическую ссылку на профиль в /etc/apparmor.d/disable/. Затем загрузите профиль используя опцию '-a'.

sudo rm /etc/apparmor.d/disable/profile.name
cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

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

sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove

9. Для повторной активации AppArmor введите:

sudo /etc/init.d/apparmor start
sudo update-rc.d apparmor defaults
Замените profile.name на имя вашего профиля, которым вы хотите управлять. Также необходимо заменить /path/to/bin/ на реальный путь выполненяемого файла. Например, для команды ping используйте /bin/ping

Профили

Профили AppArmor - это простые текстовые файлы, которые расположены в /etc/apparmor.d/. Файлы профиля называются соответственно полному пути до исполняемого файла, которым они управляют, с заменой символа «/» на «.». Например /etc/apparmor.d/bin.ping - это профиль AppArmor для команды /bin/ping.

Существует два основных типа правил, используемых в профиле:

1. Записи путей (Path entries): которые описывают к каким файлам приложение имеет доступ в файловой системе. 2. Записи разрешений (Capability entries): определяют какие права ограничиваемый процесс имеет право использовать.

В качестве примера посмотрим /etc/apparmor.d/bin.ping:

#include <tunables/global>
/bin/ping flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability net_raw,
  capability setuid,
  network inet raw,
  
  /bin/ping mixr,
  /etc/modules.conf r,
}
  1. #include <tunables/global>: включает операторы из других файлов. Это позволяет операторам, относящимся к нескольким приложениям находится в одном общем файле.

  2. /bin/ping flags=(complain): путь к программе, управляемой профилем, также устанавливающий режим обучения.

  3. capability net_raw,: разрешает приложению доступ к возможностям CAP_NET_RAW Posix.1e.

  4. /bin/ping mixr,: разрешает приложению доступ на чтение и выполнение файла.

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

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

1. Разработка плана тестирования: Попробуйте подумать о том как приложение будет выполняться. План тестирования стоит разделить на маленькие тестовые блоки. Каждый тестовый блок должен иметь краткое описание и перечень шагов выполнения. Некоторые стандартные тестовые блоки:

  1. Запуск программы.

  2. Остановка программы.

  3. Перезагрузка программы.

  4. Тестирование всех команд, поддерживаемых сценарием инициализации.

2. Создание нового профиля: Используйте aa-genprof для создания нового профиля. Команда в терминале:

sudo aa-genprof executable

Например:

sudo aa-genprof slapd

3. Чтобы получить ваш новый профиль в составе пакета apparmor-profiles, зарегистрируйте проблему в Launchpad для пакета AppArmor:

  1. Включите ваш план тестирования и тестовые блоки.

  2. Присоедините ваш новый профиль к зарегистрированной проблеме.

Обновление профилей

Когда программа ведет себя неправильно, проанализируйте сообщения отправленные в файлы журналов. Программа aa-logprof может быть использована для сканирования файлов журнала AppArmor для проверки сообщений, их рассмотрения (анализа) и обновления профилей. Команда в терминале:

sudo aa-logprof

Ссылки

  1. Смотрите AppArmor Administration Guide для дополнительных опций настройки.

  2. Для уточнения использования AppArmor с другими выпусками Ubuntu смотрите страницу AppArmor Community Wiki.

  3. Страница OpenSUSE AppArmor - еще одно знакомство с AppArmor.

  4. Хорошее место для вопросов поддержки AppArmor и вовлечения в сообщество Ubuntu Server - IRC канал #ubuntu-server на freenode.