LINUX.ORG.RU

История изменений

Исправление beroal, (текущая версия) :

ЕМНИП, ограничения AppArmor-а действуют и для процессов под рутом. Конечно, надо также запретить изменять профили в памяти ядра. Профили изменяются с помощью программы apparmor_parser. Чтобы делать своё чёрное дело, ей нужны следующие права доступа:

capability mac_admin,
/sys/kernel/security/apparmor/{,**} rw,

Проблема с вашей задачей в другом. AppArmor предназначен для работы с белыми списками прав доступа. То есть, чтобы запретить программам доступ к файлу, надо просто не давать им доступ к файлу в их профилях ☺. Конечно, все программы должны выполняться под своими профилями, а не под unconfined. Так что одной строчкой этого не сделаешь.

Но, думаю, можно что-то соорудить. Вам правильно подсказали, что нужен full system policy. Нужно два профиля: для особенной программы, которая имеет доступ к особенному файлу, и для остальных программ. В профиле для остальных программ надо указать, что особенную программу надо запускать под её профилем. Поскольку этот запуск повышает привилегии, также следует поискать возможные уязвимости в этой особенной программе. Например, если она принимает команды из stdin, то любая программа может послать особенной программе любую команду. Желательно иметь больше сведений о том, чего вы добиваетесь.

Исправление beroal, :

ЕМНИП, ограничения AppArmor-а действуют и для процессов под рутом. Конечно, надо также запретить изменять профили в памяти ядра. Профили изменяются с помощью программы apparmor_parser. Чтобы делать своё чёрное дело, ей нужны следующие права доступа:

  /etc/apparmor{,.d}/{,**} r,

  # Permissions essential for changing the profile set in the kernel memory.
  capability mac_admin,
  /sys/kernel/security/apparmor/{,**} rw,

Проблема с вашей задачей в другом. AppArmor предназначен для работы с белыми списками прав доступа. То есть, чтобы запретить программам доступ к файлу, надо просто не давать им доступ к файлу в их профилях ☺. Конечно, все программы должны выполняться под своими профилями, а не под unconfined. Так что одной строчкой этого не сделаешь.

Но, думаю, можно что-то соорудить. Вам правильно подсказали, что нужен full system policy. Нужно два профиля: для особенной программы, которая имеет доступ к особенному файлу, и для остальных программ. В профиле для остальных программ надо указать, что особенную программу надо запускать под её профилем. Поскольку этот запуск повышает привилегии, также следует поискать возможные уязвимости в этой особенной программе. Например, если она принимает команды из stdin, то любая программа может послать особенной программе любую команду. Желательно иметь больше сведений о том, чего вы добиваетесь.

Исходная версия beroal, :

ЕМНИП, ограничения AppArmor-а действуют и для процессов под рутом. Конечно, надо также запретить изменять профили в памяти ядра. Профили изменяются с помощью программы apparmor_parser. Чтобы делать своё чёрное дело, ей нужны следующие права доступа:

abi <abi/3.0>,

include <tunables/global>

profile aapc /usr/local/bin/aapc {
  include <abstractions/consoles>
  include <rough/base>

  /{usr/,}bin/apparmor_parser ix,

  /etc/apparmor{,.d}/{,**} r,

  # Permissions essential for changing the profile set in the kernel memory.
  capability mac_admin,
  /sys/kernel/security/apparmor/{,**} rw,
}

Проблема с вашей задачей в другом. AppArmor предназначен для работы с белыми списками прав доступа. То есть, чтобы запретить программам доступ к файлу, надо просто не давать им доступ к файлу в их профилях ☺. Конечно, все программы должны выполняться под своими профилями, а не под unconfined. Так что одной строчкой этого не сделаешь.

Но, думаю, можно что-то соорудить. Вам правильно подсказали, что нужен full system policy. Нужно два профиля: для особенной программы, которая имеет доступ к особенному файлу, и для остальных программ. В профиле для остальных программ надо указать, что особенную программу надо запускать под её профилем. Поскольку этот запуск повышает привилегии, также следует поискать возможные уязвимости в этой особенной программе. Например, если она принимает команды из stdin, то любая программа может послать особенной программе любую команду. Желательно иметь больше сведений о том, чего вы добиваетесь.