💾 Archived View for pub.phreedom.club › ~progserega_linux › glog › 2024.04.02_apparmor.gmi captured on 2024-08-18 at 18:08:58. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-05-10)

-=-=-=-=-=-=-

Настройка Apparmor в Debian 12

Статьи по теме:

https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/безопасность/apparmor

https://vasilisc.com/rules_apparmor

Логика

1. Ставим набор сторонних профилей, чтобы было откуда брать примеры:

apt-get install apparmor-profiles

2. Копируем подходящий профиль (слэши заменяем точками, имя профиля - путь к ограничиваемому бинарнику):

cp /etc/apparmor.d/usr.lib.unreal /etc/apparmor.d/opt.Unigine_Superposition-1.1.Superposition

3. Правим путь к файлу бинарника внутри профиля.

4. Перезапускаем apparmor, смотрим логи:

systemctl reload apparmor; journalctl -af _TRANSPORT=audit

5. Запускаем ограничиваемую программу, смотрим что запрещено в логах - учитываем, что если ругается, что нужны права запуска (x),

то в правилах будем писать 'ix', а не просто 'x' (см. правила доступа).

6. по-возможности добавляем классические разрешения для шрифтов, звука и т.п. типа:

#include <abstractions/fonts>
#include <abstractions/X>
#include <abstractions/audio>

7. По таблице "Правила доступа" добавляем прав на дополнительные файлы, пользуемся таблицей шаблонов (см. ниже), а так же

сокращениями для типовых директорий типа home, sys (см. пример профиля ниже).

Просмотр логов:

journalctl -af _TRANSPORT=audit

вывод:

апр 02 18:39:24 sky audit[2103119]: AVC apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=2103119 comm="apparmor_parser"
апр 02 18:39:24 sky audit[2103119]: AVC apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=2103119 comm="apparmor_parser"
апр 02 18:39:24 sky audit[2103119]: AVC apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=2103119 comm="apparmor_parser

Правила доступа:

информацию в файл (полезно для лог-файлов!).

процесса запрещен.

переменные окружения. Если профиля нет, то запуск процесса запрещен.

Использование шаблонов в путях к разрешаемым ресурсам-файлам:

Пример профиля

Для запуска /opt/Unigine_Superposition-1.1/Superposition

# Superposition GPU test AppArmor profile
# Copyright © 2024 progserega
# License-Identifier: GPL3

#include <tunables/global>

profile superposition /opt/Unigine_Superposition-*/Superposition {
  #include <abstractions/fonts>
  #include <abstractions/X>
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/dri-common>
  #include <abstractions/dri-enumerate>
  #include <abstractions/mesa>
  #include <abstractions/nameservice>
  #include <abstractions/nvidia>
  #include <abstractions/vulkan>
  #include <abstractions/private-files-strict>

  network inet dgram,
  network inet stream,
  network inet6 dgram,
  network inet6 stream,

  /etc/libnl-*/classid r,
  /etc/machine-id r,
  /var/lib/dbus/machine-id r,
  @{PROC}/@{pid}/net/psched r,
  @{sys}/devices/system/cpu/{,**} r,
  # gpu:
  /usr/share/libdrm/** r,
  @{sys}/devices/pci*/**/hwmon/ r,
  @{sys}/devices/pci*/**/hwmon/** r,
  @{sys}/devices/pci*/**/*clk* r,
  @{sys}/devices/pci*/**/pp_dpm_pcie r,

  # udev device enumeration, input devices, video
  /etc/udev/udev.conf r,
  /run/udev/data/** r,
  @{sys}/bus/ r,
  @{sys}/class/ r,
  @{sys}/class/drm/ r,
  @{sys}/class/input/ r,
  @{sys}/class/sound/ r,
  @{sys}/devices/**/drm/** r,
  @{sys}/devices/**/input/** r,
  @{sys}/devices/**/sound/**/input*/** r,
  @{sys}/devices/**/sound/**/uevent r,
  @{sys}/devices/pci*/**/config r,
  @{sys}/devices/pci*/**/revision r,

  /opt/Unigine_Superposition-*/Superposition mrix,
  /opt/Unigine_Superposition-*/bin/* mrix,
  /opt/Unigine_Superposition-*/bin/qt/** mr,

  /opt/Unigine_Superposition-*/data/ r,
  /opt/Unigine_Superposition-*/data/** r,

  #/usr/bin/xdg-open mrix,

  owner @{HOME}/.Superposition/** rwk,
}

# vim:syntax=apparmor

🔙 вернуться к началу...