Для интерпретируемых языков / vm (например, python, java, shell-скрипты) можно установить apparmor так, чтобы он ограничивал только определенный скрипт или программу? Если да, то как?
Да, это возможно. Он также используется в Ubuntu, особенно по телефону.
Чтобы получить базовый скрипт apparmor, вы можете использовать aa-autodep из пакета apparmor-utils.
Быстрый пример для python:
cat >> ~/myapp << EOF
#! /usr/bin/python
EOF
sudo aa-autodep ~/myapp
cat /etc/apparmor.d/home.<user-name>.myapp
Это даст вам что-то вроде:
# Last Modified: Mon Feb 24 18:31:50 2014
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
#include <abstractions/python>
/home/sam/myapp r,
/usr/bin/python2.7 ix,
}
Тогда вы можете расширить это.
Ну, на самом деле использование «/usr/bin/python2.7 ix» не очень хорошая идея. Поскольку эксплуатируемый код может выполнять python из оболочки, например: python -c 'некоторый злой код'. Это определенно не то, что вы хотите, и полностью нарушает концепцию песочницы (что такое apparmor)
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
/home/sam/myapp r,
/usr/bin/python2.7 Cx -> trusted_domain,
profile trusted_domain {
#include <abstractions/....>
#include <abstraction/python>
... your policy for data, logs, connections, python files...
}
}
Я думаю, что yurii перепутан возможно и думает, что "ix" означает "неограниченный", который был бы "Ux" или "ux". Я не вижу уязвимости Escape здесь с запускающимся Python снова или от оболочки или от подпроцесса.
Больше на выполнении флаги могут быть найдены в https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage