Как лучше всего добавить/обновить правила fcontext для многих путей?

Обходной путь ulimit -s unlimitedне полностью решил мою проблему. Был дополнительный сбой, вызванный защитой стека gcc :

.

# cat TESTING/snep.out 
*** stack smashing detected ***:  terminated
IOT Trap
 Tests of the Nonsymmetric Eigenvalue Problem routines

Чтобы отключить защиту от разрушения стека, измените строку CFLAGS в файле make.inc на:

 CFLAGS    = -O3 -I$(TOPDIR)/INCLUDE -fno-stack-protector

Затем make cleanи make all.

Очень возможно, что детектор разрушения стека gcc обнаруживает здесь настоящие ошибки памяти, некоторые комментарии в этом отчете об ошибке предполагают, что некоторые из тестов имеют off -на -1 ошибки, когда индексирует некоторые массивы, поэтому, возможно, стоит попробовать более позднюю версию lapack, которая включает исправления этой ошибки, и, если это все еще не исправлено, поднять ошибку вверх по течению.

(Между прочим, я также столкнулся с другой ошибкой сборки :она не может быть собрана с помощью параллельного make, то есть make -j16 all, но работает со стандартным одиночным процессом make all.)

0
01.10.2021, 13:01
1 ответ

Вы абсолютно правы в том, что semanage fcontextработает медленно. Но с другой стороны, он никогда не предназначался для последовательного запуска в пакетном режиме.

Поэтому я бы посоветовал вам создать свою собственную политику SELinux. Для производных RHEL это включает установку пакета policycoreutils-devel(, который, в свою очередь, будет сопровождатьselinux-policy-devel).

Здесь есть две возможности. Первый вариант быстрый и грязный. Второй вариант более трудоемкий, но даст вам больше мощности.

Вариант 1 -простой пакет политик с использованием make

Допустим, у вас есть каталог /unixsetest, содержащий один файл с именем testfile, оба имеют файловый контекст SELinux по умолчаниюdefault_t:

$ ls -laZ /unixsetest
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0.
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 testfile

Теперь предположим, что вы хотите, чтобы testfileполучил контекст файла admin_home_t, и вы не хотите использовать semanage fcontextпо причинам, указанным в вашем вопросе.

Создайте файл с именемunixsetest.te(типа Enforcement )со следующим содержимым:

policy_module(unixsetest, 1.0)

Создайте файл с именемunixsetest.fc(определения контекста файла )со следующим содержимым:

/unixsetest(/.*)?   --  gen_context(system_u:object_r:admin_home_t,s0)

Теперь скомпилируйте это в собственную политику SELinux, введя:

$ make -f /usr/share/selinux/devel/Makefile
Compiling targeted unixsetest module
/usr/bin/checkmodule:  loading policy configuration from tmp/unixsetest.tmp
/usr/bin/checkmodule:  policy configuration loaded
/usr/bin/checkmodule:  writing binary representation (version 19) to tmp/unixsetest.mod
Creating targeted unixsetest.pp policy package
rm tmp/unixsetest.mod.fc tmp/unixsetest.mod

и установите его:

$ semodule -i unixsetest.pp

Подтвердите загрузку:

$ semodule -l | grep unixsetest
unixsetest      1.0

Подтвердите, что контексты файлов загружены в базу данных определений контекстов файлов:

$ semanage fcontext -l | grep admin_home_t
/root(/.*)?                                        all files          system_u:object_r:admin_home_t:s0
/unixsetest(/.*)?                                  regular file       system_u:object_r:admin_home_t:s0

(обратите внимание, что первая строка является частью базовой политики ОС SElinux, а вторая — это та, которую мы добавили через наш файл пользовательской политики)

Теперь примените контексты файлов, используяrestorecon:

$ restorecon -Rv /unixsetest/
restorecon reset /unixsetest/testfile context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:admin_home_t:s0

Сработало:

 ls -laZ /unixsetest
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0.
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 testfile

Вариант 2 -сложная политика (пакет RPM )с использованием sepolicy -создание набора инструментов

Теперь у вас есть доступ к инструменту sepolicy-generate. Запустите man sepolicy-generate, чтобы проверить, на что он способен. Он специально предназначен для установки на основе RPM и тесно интегрирует установку политики с установкой вашего пакета.

Вы создаете политику из шаблона, запустив sepolicy generateс соответствующим параметром, указывающим, что вы хотите сделать:

       Confined Applications

       sepolicy generate --application [-n NAME] [-u USER ]command [-w WRITE_PATH ]
       sepolicy generate --cgi [-n NAME] command [-w WRITE_PATH ]
       sepolicy generate --dbus [-n NAME] command [-w WRITE_PATH ]
       sepolicy generate --inetd [-n NAME] command [-w WRITE_PATH ]
       sepolicy generate --init [-n NAME] command [-w WRITE_PATH ]

       Confined Users

       sepolicy generate --admin_user [-r TRANSITION_ROLE] -n NAME
       sepolicy generate --confined_admin -n NAME [-a ADMIN_DOMAIN] [-u USER] [-n NAME] [-w WRITE_PATH]
       sepolicy generate --desktop_user -n NAME [-w WRITE_PATH]
       sepolicy generate --term_user -n NAME [-w WRITE_PATH]
       sepolicy generate --x_user -n NAME [-w WRITE_PATH]

       Miscellaneous Policy

       sepolicy generate --customize -d DOMAIN -n NAME [-a ADMIN_DOMAIN]
       sepolicy generate --newtype -t type -n NAME
       sepolicy generate --sandbox -n NAME

Пакет политик будет состоять из следующих 5 файлов:

       Type Enforcing File NAME.te
       This file can be used to define all the types rules for a particular domain.

       Note: Policy generated by sepolicy generate will automatically add a permissive DOMAIN  to
       your  te  file.   When  you  are  satisfied that your policy works, you need to remove the
       permissive line from the te file to run your domain in enforcing mode.

       Interface File NAME.if
       This file defines the interfaces for the types generated in the te file, which can be used
       by other policy domains.

       File Context NAME.fc
       This file defines the default file context for the system, it takes the file types created
       in the te file and associates file paths to the types.  Tools like restorecon and RPM will
       use these paths to put down labels.

       RPM Spec File NAME_selinux.spec
       This  file  is  an  RPM  SPEC  file  that  can be used to install the SELinux policy on to
       machines and setup the labeling. The spec file also installs the interface file and a  man
       page  describing  the  policy.   You  can use sepolicy manpage -d NAME to generate the man
       page.

       Shell File NAME.sh
       This is a helper shell script to compile, install  and  fix  the  labeling  on  your  test
       system.   It  will also generate a man page based on the installed policy, and compile and
       build an RPM suitable to be installed on other machines

Конечно, вас особенно интересуют файлы.fc.

Существуют хорошие учебные пособия, которые могут вам помочь. Я особенно рекомендую документацию RH по адресуhttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/writing-a-custom-selinux-policy_using-selinuxи https://linuxconcept.com/tutorial/extending-generated-selinux-policies/.

1
03.10.2021, 08:08

Теги

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