如何在BUILDROOT中更新SELINUX的modules.conf?

问题描述

希望禁用某些SELinux模块(设置为off),并在modules.conf中创建其他模块。当我尝试将更改添加为modules.conf补丁时,我没有看到一种更新Modules.conf的明显方法,但是由于Modules.conf文件已被构建并且不仅仅由BR下载,因此它失败了,因此无法使用像其他一样在refpolicy目录下进行修补:

构建窗口输出

refpolicy 2.20190609修补程序使用补丁应用0001-refpolicy-update-modules-conf.patch: 找不到要在输入第3行打补丁的文件

我确实在日志中看到有一个support / sedoctool.py可以自动生成policy / modules.conf文件,以便该文件不像ref策略中的大多数其他内容一样可修补。

buildroot / output / build / refpolicy-2.20190609 / Makefile的相关部分:

# policy building support tools
support := support
genxml := $(PYTHON) $(support)/segenxml.py
gendoc := $(PYTHON) $(support)/sedoctool.py

<...snip...>

########################################
#
# Create config files
#
conf: $(mod_conf) $(booleans) generate$(booleans) $(mod_conf): conf.intermediate.INTERMEDIATE: conf.intermediate
conf.intermediate: $(polxml)
        @echo "Updating $(booleans) and $(mod_conf)"
        $(verbose) $(gendoc) -b $(booleans) -m $(mod_conf) -x $(polxml)

hsmlinux build.log的一部分,显示正在运行的sedoctool.py(gendoc):

更新policy / booleans.conf和policy / modules.conf ... / build-buildroot-sawshark / buildroot / output / host / usr / bin / python3 support / sedoctool.py -b policy / booleans.conf -m policy / modules.conf -x doc / policy.xml

我敢肯定,有一种标准的方法可以做到这一点,但似乎在我能找到的任何地方都没有记载。

谢谢。

解决方法

证明sedoctool.py脚本正在读取doc / policy.xml。查看sedoctool.py:

#modules enabled and disabled values
MOD_BASE = "base"
MOD_ENABLED = "module"
MOD_DISABLED = "off"

<...>

def gen_module_conf(doc,file_name,namevalue_list):
        """
        Generates the module configuration file using the XML provided and the
        previous module configuration.
        """
        # If file exists,preserve settings and modify if needed.
        # Otherwise,create it.
<...snip...>
                        mod_name = node.getAttribute("name")
                        mod_layer = node.parentNode.getAttribute("name")
<...snip...>
                        if mod_name and mod_layer:
                                file_name.write("# Layer: %s\n# Module: %s\n" % (mod_layer,mod_name))
                                if required:
                                        file_name.write("# Required in base\n")
                                file_name.write("#\n")

                               if [mod_name,MOD_DISABLED] in namevalue_list:
                                        file_name.write("%s = %s\n\n" % (mod_name,MOD_DISABLED))
                                # If the module is set as enabled.
                                elif [mod_name,MOD_ENABLED] in namevalue_list:
                                        file_name.write("%s = %s\n\n" % (mod_name,MOD_ENABLED))
                                # If the module is set as base.
                                elif [mod_name,MOD_BASE] in namevalue_list:
                                        file_name.write("%s = %s\n\n" % (mod_name,MOD_BASE))

因此sedoctool.py具有以下出色功能:“#如果文件存在,请保留设置并根据需要进行修改。”可以通过完整的文件补丁程序在此处将整个模块和modules.conf添加到此处,并将不需要的模块设置为“ off”:refpolicy-2.20190609 / policy / modules.conf,脚本将根据需要的策略根据需要进行更新。 / p>

一个更详细的信息是,在refpolicy Makefile(构建)的下一阶段中,将在开始时删除带有更新的modules.conf,这与sedoctool保留已修补版本的modules.conf的功能发生了冲突。 ..so在Makefile的Building阶段修补了删除操作。

[7m >>> refpolicy 2.20190609建筑物^ [

<...>

rm -f policy / modules.conf

refpolicy-2.20190609中的Makefile中有我修补的这一行,因为我们正在修补自己的modules.conf:

裸:干净 <...> $(详细)rm -f $(mod_conf)

该补丁看起来像:

--- BUILDROOT/Makefile  2020-08-17 13:25:06.963804709 -0400
+++ FIX/Makefile  2020-08-17 19:25:29.540607763 -0400
@@ -636,7 +636,6 @@
        $(verbose) rm -f $(modxml)
        $(verbose) rm -f $(tunxml)
        $(verbose) rm -f $(boolxml)
-       $(verbose) rm -f $(mod_conf)
        $(verbose) rm -f $(booleans)
        $(verbose) rm -fR $(htmldir)
        $(verbose) rm -f $(tags)

顺便说一句, 在pp1:q!:

中使用完整的新文件创建补丁
diff -crB --new-file pp0 pp1 > pp0.patch

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...