Selinux 规则读写

本接口可以让您对系统的 Selinux 规则进行基本的读和常规写入操作,让您可以设置或绕过一些系统限制。相关接口可能会影响系统功能,请谨慎使用。您自己需要具备对 Selinux 的了解。

获取操作实例

在开始之前,您需要先获取一个 selinux 实例。

selinux = d.stub("SelinuxPolicy")

获取 Selinux 状态

通过如下的接口调用来获取是否已经启用了 Selinux 规则。

selinux.enabled()
>>> selinux.is_enabled( )
True

通过如下的接口调用来获取当前是否是 enforce 状态。

selinux.get_enforce()
>>> selinux.get_enforce()
1

设置 Selinux 状态

通过如下的接口调用来设置 Selinux 为 enforce 或 permissive。

selinux.set_enforce(enable)

通过如下的接口调用来设置为 enforce。

>>> selinux.set_enforce(True)
1

通过如下的接口调用来设置为 permissive。

>>> selinux.set_enforce( False)
0

创建一个新的域

通过如下的接口调用来在 Selinux 中创建一个新的域。

selinux.create_domain(domain_name)
>>> selinux.create_domain("hello_selinux")
True

设置域为 permissive

通过如下的接口调用来设置一个 Selinux 域为 permissive 状态。

selinux.permissive(domain_name)
>>> selinux.permissive("untrusted_app")
True

设置域为 enforce

通过如下的接口调用来设置一个 Selinux 域为 enforce 状态。

selinux.enforce(domain_name)
>>> selinux.enforce("untrusted_app")
True

细化控制规则

通过如下的接口调用来可以更加细致的写入 allow 与 disallow 规则。

selinux.disallow(source, target, tclass, action)
selinux.allow(source, target, tclass, action)

其中的 source, target 分别代表源和目标上下文,tclass 代表目标类,action 代表具体操作,action 仅支持 *(代表所有)或具体动作。所有参数均不支持多个上下文或者动作如 {binder system_app} 这种标准规则写法,在这里您只能提供单个名称,下面是示例操作。

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "*")

如上的规则代表,允许 hal_camera_defaultcamera_vendor_data_file 目录 (dir) 的所有操作权限,同样,改为 disallow 方法则代表拒绝这些权限。

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "search")

您也可以像上面这样提供一个细化的动作如 search