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

AppArmor - реализация способа ограничения процессов в linux, основанная на структурированном описании того, что программе позволено, а что нет.

Что такое firejail - реализация механизма песочницы, позволяющая изолировать процессы от основной системы.

В каком-то смысле firejail и apparmor дополняют друг друга и их можно использовать совместно

Установка AppArmor sudo pacman -S apparmor Правим загрузку sudo gedit /etc/default/grub добавляем в GRUB_CMDLINE_LINUX_DEFAULT параметр lsm GRUB_CMDLINE_LINUX_DEFAULT="lsm=landlock,lockdown,yama,apparmor,bpf ... Обновляем загрузочную запись sudo grub-mkconfig -o /boot/grub/grub.cfg Включение в автозагрузку и запуск сервиса sudo systemctl enable apparmor.service sudo systemctl start apparmor.service Уходим на перезагрузку reboot Проверяем статус AppArmor после загрузки системы aa-enabled

AppArmor применяет к процессам ограничения на основе перечня правил, описывающих параметры доступа и сохраняемых в профилирующих файлах в каталоге /etc/apparmor.d

Профили AppArmor для часто используемых программ скачиваем по ссылке https://github.com/nibags/apparmor-profiles Распаковываем, переписываем в /etc/apparmor.d Файл профиля для программы /path/to/app будет иметь имя path.to.app Рассмотрим для примера firefox Тестовый режим sudo aa-complain /etc/apparmor.d/usr.bin.firefox

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

Исправляем последовательно возможные ошибки согласно пояснениям программы.

Часто встречаются следующие ошибки, допускаемые составителями профилей: используются отсутствующие файлы - удаляем такую строку, профиль ссылается сам на себя (бесконечная рекурсия) - удаляем и так далее, отсутствует слово profile перед путем к программе - дописываем, делается попытка описать профиль для другой программы внутри профиля - убираем целиком вложенный профиль и т.п.

Удобно вносить правки с помощью редактора gedit, т.е. sudo gedit /etc/apparmor.d/usr.bin.firefox Запускаем заново. sudo aa-complain /etc/apparmor.d/usr.bin.firefox

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

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

Запускаем программу, запускаем aa-status в терминале и видим, что добавленное приложение в тестовом режиме. В этом режиме программа может делать не разрешенные действия, и они будут журналироваться.

Путем анализа журнала можно подобрать ограничения для программы. Проверка того, что профиль подключен sudo apparmor_status | grep firefox Проанализировать действия программы в тестовом и боевом режиме (enforce, когда подсистема appArmor запрещает делать все, что явно Вами не разрешено) можно так 1) Зачистим журнал sudo journalctl --rotate sudo journalctl --vacuum-time=1s 2) Запустим программу, выполним в ней действия, закроем ее. Поищем по ключевому слову в журнале сообщения apparmor journalctl -xe | grep "apparmor" | less или если удобно работать с файлом journalctl -xe | grep "apparmor" >> apparmor-log.txt Применить ограничения действительным образом можно с помощью sudo aa-enforce /etc/apparmor.d/usr.bin.firefox О правилах подробно почитать можно в документе https://en.opensuse.org/SDB:AppArmor_geeks

Если в enforce режиме программа падает, не запускается - наберитесь терпения, запустите ее из терминала, проверьте журнал apparmor, переведите программу в тестовый complain режим, внесите правки в профиль и попробуйте снова запустить приложение в enforce режиме. Часто причиной тому может стать доступ к вспомогательным библитекам.

Что делать, если профиля нет нигде в сети? Можно собрать с помощью aa-genprof и aa-logprof Можно пойти другим путем - создать на базе профиля другой программы, отредактировав его. Забрать профиль для telegram для enforce режима можно по ссылке https://github.com/ArtNazarov/app_armor_telegram_profile, ( проверено на 3.7.3 telegram-desktop в Archlinux ) Установка firejail sudo pacman -S firejail Настройку можно выполнить командой sudo firecfg На примере хранилки паролей keepass, если нужно отобрать доступ программы к сети, запускаем программу с ключом net none firejail --net=none keepassxc Запуск firefox внутри firejail можно выполнить так firejail firefox В firejail есть так называемый приватный режим, с более жесткими ограничениями. firejail --private firefox Можно прописать путь, в котором будет временно размещать файлы песочница. firejail --private=~/temp firefox Нужно понимать, что приватный режим самой песочницы не тоже самое, что приватный режим firefox. Чтобы сделать запуск приватного сеанса firefox внутри приватного сеанса firejail, используем firejail --private firefox --private-window Список процессов в песочнице firejail --list или firejail --top Завершение приложения в песочнице по его PID (номеру процесса в системе) firejail --shutdown=PID Отмечу, что эквивалентом --net=none является ограничение deny network в AppArmor, также не забываем и возможности контроля доступа к сети с помощью фаервола ufw. Настройка пунктов меню KDE правая кнопка по Пуску, редактировать меню. переходим к программе, основные параметры, команда. Например, для firefox можно внести следующее kdialog --msgbox "In firejail!" & firejail /usr/lib/firefox/firefox %u kdialog нужен для предупреждения, что программу запускают в песочнице.

Теги документа