# 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` のような詳細なアクションを提供することもできます。