如何确定哪个rpm安装定义SELinux类型的模块?

时间:2015-10-06 22:51:11

标签: package rpm selinux

我的软件包需要设置一些SELinux规则,以允许我的程序访问某些内容。虽然我知道在设置规则时需要使用哪些类型,但我不确定哪些包安装了这些类型。我想确保我的包依赖于我引用的SELinux类型。有没有办法可以找出哪个包负责安装给定的SELinux类型?

在这个特定的情况下,我正在寻找unconfined_service_t,但一般的解决方案会很棒,因为我相信我会再次点击这个。

1 个答案:

答案 0 :(得分:1)

SELinux模块位于/usr/share/selinux/targeted/目录中。

你必须猜测(稍后会详细说明)它可能是哪个文件。

# cp /etc/selinux/targeted/modules/active/modules/cdrecord.pp /tmp
# file cdrecord.pp 
cdrecord.pp: bzip2 compressed data, block size = 900k
# bunzip2 cdrecord.pp
bunzip2: Can't guess original name for cdrecord.pp -- using cdrecord.pp.out
# dnf install checkpolicy
...
# sedismod cdrecord.pp.out
Reading policy...
libsepol.policydb_index_others: security:  0 users, 3 roles, 42 types, 3 bools
libsepol.policydb_index_others: security: 1 sens, 1024 cats
libsepol.policydb_index_others: security:  51 classes, 0 rules, 0 cond rules
libsepol.policydb_index_others: security:  0 users, 3 roles, 42 types, 3 bools
libsepol.policydb_index_others: security: 1 sens, 1024 cats
libsepol.policydb_index_others: security:  51 classes, 0 rules, 0 cond rules
Binary policy module file loaded.
Module name: cdrecord
Module version: 2.6.0


Select a command:
1)  display unconditional AVTAB
2)  display conditional AVTAB
3)  display users
4)  display bools
5)  display roles
6)  display types, attributes, and aliases
7)  display role transitions
8)  display role allows
9)  Display policycon
0)  Display initial SIDs

a)  Display avrule requirements
b)  Display avrule declarations
c)  Display policy capabilities
l)  Link in a module
u)  Display the unknown handling setting
F)  Display filename_trans rules

f)  set output file
m)  display menu
q)  quit

Command ('m' for menu):  6
...
 staff_cdrecord_t [1]: alias for type cdrecord_t flags:0
...

请说staff_cdrecord_t是我们感兴趣的人。乌拉!

现在只查询提供它的包:

# rpm -qf /etc/selinux/targeted/modules/active/modules/cdrecord.pp
selinux-policy-targeted-3.13.1-105.20.fc21.noarch

所以唯一的问题是你查询的/etc/selinux/targeted/modules/active/modules/文件是什么。那么你要么必须逐个去(除非有人知道某种方式,这是可编写脚本的)或者你必须使用常识。当我查找staff_cdrecord_t时,我将从cdrecord.pp开始。