Для выполнения этой работы рекомендуется установить дистрибутив Ubuntu (или любой другой, который йподдерживает работу AppArmor)
Существует 2 режима работы AppArmor:
Для настройки режимов используется ряд утилит, которые необходимо установить:
sudo apt install apparmor-utils
В режиме enforce
система AppArmor будет ограничивать работу приложения согласно профилю и сообщать о попытках нарушения установленных правил, а в режиме complain
– только сообщать о нарушениях правил, позволяя приложению выполнять любые запрашиваемые действия.
AppArmor устанавливается и загружается по умолчанию. Он использует профили приложений для определения какие файлы и права доступа требуются приложению. Некоторые пакеты устанавливают свои собственные профили, а дополнительные профили можно найти в пакете apparmor-profiles
.
sudo apt install apparmor-profiles
После утановки профилей, появляются новые записи в выводе команды apparmor_status
.
Для того, чтобы начать контролировать приложение с помощью AppArmor
, необходимо поместить профиль приложения в директорию /etc/apparmor.d/
:
cp /path/to/usr.bin.app /etc/apparmor.d/
Больше профилей доступно в директории /usr/share/apparmor/extra-profiles/
После чего приложение можно перезапустить:
kill -9 $APP_PID; /usr/sbin/app
Логгирование производится в файл: /var/log/syslog
.
Вывести всю информацию по AppArmor можно с помощью следующей команды:
sudo cat /var/log/syslog | grep apparmor
Содержимое файла /etc/apparmor.d/bin.ping
:
#include <tunables/global>
profile ping /{usr/,}bin/{,iputils-}ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability net_raw,
capability setuid,
network inet raw,
network inet6 raw,
/{,usr/}bin/{,iputils-}ping mixr,
/etc/modules.conf r,
# Site-specific additions and overrides. See local/README for details.
#include <local/bin.ping>
}
Все достаточно понятно, кроме флагов mixr. Описание значений флагов ниже:
1.1. Создайте копию утилиты ping
(из директории /bin/
), а вместо нее скопируйте утилиту cp
(/bin/cp -> /bin/ping
). После этого переведите профиль bin.ping
в режим enforce
. Создайте в домашней директории файл и попробуйте его скопировать с помощью утилиты ping
(которая, по факту, является копией утилиты cp
).
Объясните, что произошло. Посмотрите журнал, что там за сообщения (относительно этой операции), что они значат?
1.2. Переведите профиль bin.ping
в режим complain
. Повторите действия из шага 1.1. Что изменилось? Объясните. Какие теперь записи в журнале?
1.3. Верните утилиту ping
на свое место.
1.4. Переведите профиль bin.ping
в режим enforce
. Попробуйте воспользоваться утилитов (из шага 1.1.) my_ping
.
Объясните, что произошло. Посмотрите журнал, что там за сообщения (относительно этой операции)?
2.1. Установите Docker
Создайте группу docker
, добавьте в нее своего пользователя. При необходимости перезагрузите систему.
2.2. Создайте Docker-конетейнер с ubuntu:
docker container run --rm -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu sh
Что значат ключи:
- --cap-add
- seccomp=unconfined
Какой профиль AppArmor загружен?
Создайте два новых каталога (внутри контейнера), смонтируйте первый каталог в другой каталог (подробнее, mount --bind
)
Что происходит?
3.1. Скачайте материалы для ЛР из репозитория Docker:
git clone https://github.com/docker/labs.git
cd labs/security/apparmor/wordpress
3.2. Опишите, какие контейнеры предлагается создать (docker-compose.yml). Создайте контейнеры с помощью docker-compose
3.3. Проверьте работоспособность WordPress, выбрав язык и установив какие-либо плагины.
Все ли работает?
3.4. Удалите созданные контейнеры.
3.5. Добавьте wparmor профиль в файл конфигурации.
Вставьте:
security_opt:
- apparmor=wparmor
Вместо закомментированных строк.
Опишите правила в wparmor
.
3.6. Отредактируйте файл wparmor так, чтобы запретить использование каталогов в var/www/html/wp-content
за исключением директории uploads
. Спарсите новый файл (apparmor_parse
).
3.7. Повторите шаги 3.2. и 3.3. и опишите результат.
Можете ли вы устанавливать плагины и загружать другой контент?
4.1. Выберите произвольное приложение с открытым исходным кодом (приложение может сразу поставляться в виде docker-образа или вы можете создать образ самостоятельно). Приложение должно быть подобрано таким образом, чтобы было удобно настроить политику AppArmor для него. Разверните приложение, опишите процесс выполнения развертывания.
4.2. Придумайте и опишите политику AppArmor, продемонстрируйте ее работу.