# 讀寫 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`。