インタプリタ/ vm言語(たとえば、python、Java、Shellスクリプト)の場合、特定のスクリプトまたはプログラムのみを制限するようにapparmorを設定できますか?もしそうなら、どのように?
はい、可能です。 Ubuntu、特に電話でも使用されています。
基本的なapparmorスクリプトを取得するには、apparmor-utilsパッケージのaa-autodepを使用できます。
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 'some evil code'。これは間違いなくあなたが望むものではなく、サンドボックスの概念を完全に破ります(鎧は何ですか)
#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」である「unconfined」を意味すると考えています。ここでは、シェルまたはサブプロセスからpythonを再度起動した場合のエスケープの脆弱性はありません。
実行フラグの詳細については、 https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage をご覧ください。