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_default
对 camera_vendor_data_file
目录 (dir
) 的所有操作权限,同样,改为 disallow
方法则代表拒绝这些权限。
>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "search")
您也可以像上面这样提供一个细化的动作如 search
。