Обходной путь 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
.)
Вы абсолютно правы в том, что 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/.