В пользовательском модуле есть способ разрешить все разрешения для файлов / каталогов?

Я часто сталкиваюсь с одной и той же проблемой. Мой общий рабочий процесс включает тяжелые вычисления в MATLAB. Иногда я непреднамеренно пытаюсь выделить новую переменную, размер которой превышает объем доступной памяти. Система зависает, и мне обычно приходится жестко перезагружать машину, чтобы вернуться к работе. : P

В моем случае, и это звучит так же, как и в вашем, я не был так сильно озабочен ограничением объема памяти, используемой MATLAB до статического количества - меня интересовало отсутствие замороженной машины, и я был готов пожертвовать моим процессом MATLAB, чтобы сохранить отзывчивость системы.

Вдохновленный ответом на этот пост , я написал следующий сценарий (я назвал его watch_memory.sh):

#!/bin/bash

MONITOR=$(free | grep 'buffers/cache:')
MEM_USED=$(echo $MONITOR | awk '{ print $3 }')
MEM_FREE=$(echo $MONITOR | awk '{ print $4 }')

MEM_PERC=$(( 100*MEM_USED / (MEM_FREE+MEM_USED) ))

while :; do
    if [ "$MEM_PERC" -gt "95" ]
    then
        kill $1
        echo "$1 killed for using too much memory."
        exit
    fi
    sleep 1

    MONITOR=$(free | grep 'buffers/cache:')
    MEM_USED=$(echo $MONITOR | awk '{ print $3 }')
    MEM_FREE=$(echo $MONITOR | awk '{ print $4 }')
    MEM_PERC=$(( 100*MEM_USED / (MEM_FREE+MEM_USED) ))
done

Этот сценарий каждую секунду проверяет процентное количество свободной памяти. Когда система заканчивается, ваш pid "козла отпущения" (переданный в качестве аргумента скрипту) будет убит.

Без изменения приоритета (аккуратности) скрипта на то, чтобы убить козла отпущения, потребовалось около 10-20 секунд, но он все равно работал. Запуск сценария с отрицательным приоритетом привел к мгновенному уничтожению после нарушения (11916 в этом примере - это идентификатор pid, который я хочу убить, если у меня закончится память):

sudo nice -n -5 bash watch_memory.sh 11916

2
05.12.2018, 22:02
1 ответ

Следует рассмотреть возможность использования эталонных макросов политики. Используя макросы эталонной политики, вы можете затем использовать макрос manage_files_pattern, чтобы разрешить полный доступ, например:

manage_files_pattern(my_app_t, my_app_file_t, my_app_file_t)

Существуют также макросы для других часто используемых шаблонов, расположенные в/policy/supportв исходном источнике политики.

Если my_app_tопределяется эталонным модулем политики, скорее всего, уже существует интерфейс, который можно использовать для разрешения доступа. Интерфейсы задокументированы в справочной документации API политики (, предоставленной selinux-policy-docпакетом ), а также доступны онлайн (, однако они немного устарели ).

Самый простой способ создать эталонный модуль политики — использовать make-файл в пакете разработки политик SELinux(selinux-policy-develили аналогичный )вашего дистрибутива, например:make -f /usr/share/selinux/devel/Makefile my_app.pp.

4
27.01.2020, 22:02

Теги

Похожие вопросы