# 读写 Selinux 规则

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

## 获取操作实例

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

```python
selinux = d.stub("SelinuxPolicy")
```

## 获取 Selinux 状态

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

```python
selinux.enabled()
```

```python
>>> selinux.is_enabled( )
True
```

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

```python
selinux.get_enforce()
```

```python
>>> selinux.get_enforce()
1
```

## 设置 Selinux 状态

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

```python
selinux.set_enforce(enable)
```

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

```python
>>> selinux.set_enforce(True)
1
```

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

```python
>>> selinux.set_enforce( False)
0
```

## 创建一个新的域

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

```python
selinux.create_domain(domain_name)
```

```python
>>> selinux.create_domain("hello_selinux")
True
```

## 设置域为 permissive

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

```python
selinux.permissive(domain_name)
```

```python
>>> selinux.permissive("untrusted_app")
True
```

## 设置域为 enforce

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

```python
selinux.enforce(domain_name)
```

```python
>>> selinux.enforce("untrusted_app")
True
```

## 细化控制规则

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

```python
selinux.disallow(source, target, tclass, action)
```

```python
selinux.allow(source, target, tclass, action)
```

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


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

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

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

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