问题描述
希望禁用某些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