2015-02-11 5 views
2

Итак, у нас есть приложение django, для которого требуется профиль apparor (мандат клиента). Он работает в виртуальной среде Python, расположенной в /opt/fact-virtual-environment. Само приложение устанавливается в /usr/share/factЗагрузка настройки приложения Django под профилем apparmor

Ниже мой профиль до сих пор (построены в основном с помощью инструмента аа-genprof):

# Last Modified: Tue Jan 20 09:25:09 2015 
#include <tunables/global> 

/usr/bin/fact flags=(audit) { 
    #include <abstractions/apache2-common> 
    #include <abstractions/base> 
    #include <abstractions/bash> 


    capability setgid, 
    capability sys_resource, 

    /usr/local/lib/python2.7/dist-packages/**/ rm, 
    /usr/local/lib/python2.7/dist-packages/** rm, 
    /usr/local/lib/python2.7/site-packages/**/ rm, 
    /usr/local/lib/python2.7/site-packages/** rm, 
    /etc/apparmor.d/** r, 
    #/usr/lib/python2.7/**[^/] r, 

    /usr/bin/sudo Ux, 

    #/usr/bin/strace ux, 
    /bin/bash rix, 
    /bin/dash rix, 
    /bin/uname rix, 
    /dev/tty rw, 
    /etc/default/locale r, 
    #/etc/nsswitch.conf r, 
    #/etc/group r, 
    #/etc/passwd r, 
    /etc/environment r, 
    /etc/login.defs r, 
    /etc/lsb-release r, 
    /etc/fact/fact.ini r, 
    /etc/python2.7/sitecustomize.py r, 
    /etc/security/pam_env.conf r, 
    /lib{,32,64}/** mr, 
    /opt/fact-virtual-environment/**/ mr, 
    /opt/fact-virtual-environment/lib/python2.7/**/ mr, 
    /opt/fact-virtual-environment/lib/python2.7/** mr, 
    /opt/fact-virtual-environment/bin/python rix, 
    /run/utmp rk, 
    /sbin/ldconfig rix, 
    /sbin/ldconfig.real rix, 
    /usr/bin/fact rix, 
    /usr/lib{,32,64}/** mr, 
    /usr/share/fact/**/ r, 
    /usr/share/fact/** r, 
    /usr/share/pyshared/** r, 
    /usr/share/pyshared/**/ r, 
} 

... и команда /usr/bin/fact является простой оберткой:

#!/bin/bash 

## This script is for running the 'fact' command on staging/prod, it sudos to 
## the 'fact' user before executing /opt/fact/bin/fact 

## It is installed as '/usr/bin/fact' 

PYTHONPATH=/usr/share/fact 
PYTHON_BIN=/opt/fact-virtual-environment/bin/python 
DJANGO_SETTINGS_MODULE=fact.settings.staging 

if [ "$USER" != "fact" ]; 
then 
    sudo -u fact $0 $*; 
else 
    PYTHONPATH=${PYTHONPATH} DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE} ${PYTHON_BIN} -m fact.managecommand $*; 
fi 

Я разрешил много разрешений на чтение. Я знаю, что мне не нужен, как и весь /usr/local/lib/*, установленный в попытке отладки. Что-то, что меня очень беспокоит, - это то, что мои профили, похоже, не перезагружаются, когда я запускаю service apparmor reload (или перезагружаюсь). Кажется, я получаю разные результаты, если перезапустить службу по сравнению с aa-complain usr.bin.fact, а затем aa-enforce usr.bin.fact.

Прямо сейчас, когда я запускаю свою команду и проверить системные журналы, я вижу следующее:

Feb 11 15:08:48 spiffy kernel: [1228245.774660] type=1400 audit(1423620528.359:14142): apparmor="DENIED" operation="open" parent=12884 profile="/usr/bin/fact" name="/usr/local/lib/python2.7/site-packages/" pid=12885 comm="python" requested_mask="r" denied_mask="r" fsuid=111 ouid=0 
Feb 11 15:08:48 spiffy kernel: [1228245.774855] type=1400 audit(1423620528.359:14143): apparmor="DENIED" operation="open" parent=12884 profile="/usr/bin/fact" name="/usr/local/lib/python2.7/dist-packages/" pid=12885 comm="python" requested_mask="r" denied_mask="r" fsuid=111 ouid=0 
Feb 11 15:08:48 spiffy kernel: [1228245.775829] type=1400 audit(1423620528.359:14144): apparmor="DENIED" operation="open" parent=12884 profile="/usr/bin/fact" name="/usr/local/lib/python2.7/dist-packages/" pid=12885 comm="python" requested_mask="r" denied_mask="r" fsuid=111 ouid=0 

..и мой питон приложений barfs:

$ fact 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/usr/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "/usr/share/fact/fact/managecommand.py", line 6, in <module> 
    execute_from_command_line(sys.argv) 
    File "/opt/fact-virtual-environment/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/opt/fact-virtual-environment/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute 
    settings.INSTALLED_APPS 
    File "/opt/fact-virtual-environment/local/lib/python2.7/site-packages/django/conf/__init__.py", line 46, in __getattr__ 
    self._setup(name) 
    File "/opt/fact-virtual-environment/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/opt/fact-virtual-environment/local/lib/python2.7/site-packages/django/conf/__init__.py", line 98, in __init__ 
    % (self.SETTINGS_MODULE, e) 
ImportError: Could not import settings 'fact.settings.staging' (Is it on sys.path? Is there an import error in the settings file?): cannot import name current_app 

Этот файл настройки он ищет находится по адресу /usr/share/fact/fact/settings/staging.py

Я совершенно не в восторге от того, почему я не могу заставить это приложение работать под его профилем алермора. Настройки в файле конфигурации должны разрешить это. Что происходит?

ответ

1

Все отказы ищет для этого конкретного каталога: /usr/local/lib/python2.7/dist-packages/

Ваш профиль включает в себя несколько детей этого каталога:

/usr/local/lib/python2.7/dist-packages/**/ rm, 
/usr/local/lib/python2.7/dist-packages/** rm, 
/usr/local/lib/python2.7/site-packages/**/ rm, 
/usr/local/lib/python2.7/site-packages/** rm, 

Но она не включает в этот конкретный каталог. Поэтому добавьте в свой профиль, перезагрузите страницу и попробуйте еще раз:

/usr/local/lib/python2.7/dist-packages/ r, 

AppArmor использует задний /, чтобы определить, если администратор предназначен, чтобы получать списки каталогов по сравнению позволяет файл для чтения.

Благодаря

2

вашего профиля нет прав для чтения каталога /usr/local/lib/python2.7/site-packages/

вам нужно будет добавить /USR/местные/Библиотека /python2.7/site-packages/ r,

Разрешения, предоставленные вашим текущим профилем, позволяют получить доступ ко всему, что находится под /usr/local/lib/python2.7/site-packages/, но не фактический доступ к самому каталогу