LINUX.ORG.RU

AppArmor, Gentoo и Python

 , ,


1

1

Хочу изготовить policy для определённых питоно-приложений.

Дёргаю aa-genprof и наблюдаю, что он вместо моего приложения делает полиси для /usr/lib64/python-exec/python-exec2. Вспоминаю, что в Gentoo весь питоно-софт - симлинки на этот самый python-exec. Гугление не принесло результатов. И таки да, сам apparmor также будет предварительно разрешать симлинк чтобы выбрать используемый профиль: https://bugs.launchpad.net/ubuntu/ source/openldap2.3/ bug/203898

Вопрос: как сделать чтобы apparmor различал питоно-софт в генте, и не сломать при этом что-то ещё?


Я не знаю, как работает apparmor, но большинство приложений на питоне - это питоноскрипты, которые передаются на исполнение самому питону. Все системные вызовы выполняет питон, а не скрипт.

andreyu ★★★★★
()

Вопрос: как сделать чтобы apparmor различал питоно-софт в генте, и не сломать при этом что-то ещё?

Я делаю профиль на python-exec, в котором вызывается на исполнение уже конкретный питоно-скрипт. Если надо гарантировать чтобы ничего не сломалось или ужесточить ограничения для конкретного процесса, python-exec нужно делать вложенным профилем, например:

profile /нужный/профиль {
  ...

  # /usr/bin/emerge
  /usr/lib/python-exec/python-exec2 Cx,

  profile /usr/lib/python-exec/python-exec2 {
    #include <abstractions/base>

    /dev/tty[0-9]* rw,
    /dev/pts/[0-9]* rw,
    /usr/lib/python-exec/python-exec2 mr,
    /etc/python-exec/python-exec.conf r,

    /usr/lib/python-exec/python3.5/emerge Px,
  }
}

profile /usr/lib/python-exec/python3.5/emerge {
  ...
  вот тут уже реальные ограничения питоно-скрипта
  в т.ч. запуск самого питона через "ix"
}

Как вариант, профиль на python-exec можно сделать на всю систему с разрешением «/usr/lib/python-exec/python3.5/* Px», но надо заранее сделать профили на все используемые питоно-скрипты в /usr/lib/python-exec/python3.5/...

viewizard ★★
()
Ответ на: комментарий от viewizard

А что же, aa-genprof бесполезным становится когда у меня несколько питоно-софтин в системе крутится?

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

Он не становится, он с самого начала бесполезен на более-менее серьезных и комплексных задачах.

Вообще, в утилитах масса косяков и глюков. Пользоваться ими нужно очень осторожно. Как правило, ядро и парсер развиваются синхронно, а остальные утилиты по остаточному принципу и зачастую вообще не синхронизированы с функционалом парсера.

Советую сразу делать профили руками. С небольшой практикой, это становится занятие простое и достаточно быстрое, с другой стороны, сразу видно какие процессы надо вынести в отдельные профили (Px), какие сделать вложенными профилями (Cx), какие запускать как наследуемые в текущем профиле (ix), какие процессы надо запускать через специальные именованные профили (Px -> имя_профиля), какие дополнительные абстракции создать и использовать (набор локальных абстракций) и т.п. В этом никакой aa-genprof вам не поможет.

viewizard ★★
()
Ответ на: комментарий от viewizard

profile /нужный/профиль {

Делаю я по твоему шаблончику profile /usr/bin/limf, который, как водится, -> ../lib/python-exec/python-exec2. Жомкаю aa-enforce на него. Запускаю limf и вижу, что он не ограничивается, судя по тому что его вызовы не отлавливаются, и в aa-status его не видно. ЧЯДНТ?

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

Делаю я по твоему шаблончику profile /usr/bin/limf, который, как водится, -> ../lib/python-exec/python-exec2.

Профиля для /usr/bin/limf вообще не должно существовать, это же симлинк. «profile /нужный/профиль {» — это профиль процесса, запускающего процесс python-exec (вызывающего симлинк на python-exec), и это 100% будет не «profile /usr/bin/limf».

Жомкаю aa-enforce на него. Запускаю limf и вижу, что он не ограничивается, судя по тому что его вызовы не отлавливаются, и в aa-status его не видно.

А почему aa-enforce? Почему не apparmor_parser? Вы точно разобрались как производится загрузка/перезагрузка профилей и что делают aa-enforce/aa-complain?

viewizard ★★
()
Ответ на: комментарий от viewizard

Профиля для /usr/bin/limf вообще не должно существовать, это же симлинк. «profile /нужный/профиль {» — это профиль процесса, запускающего процесс python-exec (вызывающего симлинк на python-exec), и это 100% будет не «profile /usr/bin/limf».

То есть ты по сути предлагаешь понаделать wrapper'ов для каждой питонософтины и пихнуть их куда-нибудь в PATH?

А почему aa-enforce? Почему не apparmor_parser? Вы точно разобрались как производится загрузка/перезагрузка профилей и что делают aa-enforce/aa-complain?

Потому что какая разница, если результат один и тот же?

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

То есть ты по сути предлагаешь понаделать wrapper'ов для каждой питонософтины и пихнуть их куда-нибудь в PATH?

Я такого не предлагал, я описал как работает у меня. Но вы можете сделать просто профиль на python-exec и скрипты, или сразу просто на скрипты в /usr/lib/python-exec/python*/... тут каждый выкручивает AppArmor в свою сторону, как ему надо, готовых рецептов нет.

viewizard ★★
()
Ответ на: комментарий от viewizard

Я такого не предлагал, я описал как работает у меня.

Окей, то есть у тебя работает через вышеупомянутые самописные wrapper'ы?

Но вы можете сделать просто профиль на python-exec и скрипты, или сразу просто на скрипты в /usr/lib/python-exec/python*/... тут каждый выкручивает AppArmor в свою сторону, как ему надо, готовых рецептов нет.

Сделал отдельный профиль на /usr/lib/python-exec/python3.5/limf, наблюдаю что limf будучи запущенный python-exec'ом не попадает под этот профиль.

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

Окей, то есть у тебя работает через вышеупомянутые самописные wrapper'ы?

Какие самописные враперы? У меня все работает через стандартные средства, ничего в системе не менялось, как поставилось портаджем, так и работает.

Сделал отдельный профиль на /usr/lib/python-exec/python3.5/limf, наблюдаю что limf будучи запущенный python-exec'ом не попадает под этот профиль.

Проверяйте правильность пути, realpath в помощь, AppArmor использует только реальный путь для идентификации процессов.

В выводе aa-status профиль уже начал отображаться?

viewizard ★★
()
Ответ на: комментарий от viewizard

Проверяйте правильность пути, realpath в помощь, AppArmor использует только реальный путь для идентификации процессов.

Ага: не lib, а lib64; спасибки!

L29Ah
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.