# Lesen und Schreiben von Selinux-Regeln

Diese Schnittstelle ermöglicht es Ihnen, grundlegende Lese- und reguläre Schreiboperationen auf den Selinux-Regeln des Systems durchzuführen, sodass Sie einige Systemeinschränkungen festlegen oder umgehen können. Die zugehörigen Schnittstellen können die Systemfunktionalität beeinträchtigen, bitte verwenden Sie sie mit Vorsicht. Sie müssen selbst über Kenntnisse von Selinux verfügen.

## Abrufen einer Operationsinstanz

Bevor Sie beginnen, müssen Sie zuerst eine Selinux-Instanz abrufen.

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

## Abrufen des Selinux-Status

Verwenden Sie den folgenden Schnittstellenaufruf, um zu überprüfen, ob Selinux-Regeln aktiviert sind.

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

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

Verwenden Sie den folgenden Schnittstellenaufruf, um zu überprüfen, ob der aktuelle Status "enforce" ist.

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

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

## Festlegen des Selinux-Status

Verwenden Sie den folgenden Schnittstellenaufruf, um Selinux auf "enforce" oder "permissive" zu setzen.

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

Verwenden Sie den folgenden Schnittstellenaufruf, um den Status auf "enforce" zu setzen.

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

Verwenden Sie den folgenden Schnittstellenaufruf, um den Status auf "permissive" zu setzen.

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

## Erstellen einer neuen Domäne

Verwenden Sie den folgenden Schnittstellenaufruf, um eine neue Domäne in Selinux zu erstellen.

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

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

## Festlegen einer Domäne auf Permissive

Verwenden Sie den folgenden Schnittstellenaufruf, um eine Selinux-Domäne auf den Status "permissive" zu setzen.

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

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

## Festlegen einer Domäne auf Enforce

Verwenden Sie den folgenden Schnittstellenaufruf, um eine Selinux-Domäne auf den Status "enforce" zu setzen.

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

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

## Verfeinern von Kontrollregeln

Mit den folgenden Schnittstellenaufrufen können Sie `allow`- und `disallow`-Regeln detaillierter schreiben.

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

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

Dabei stehen `source` und `target` jeweils für den Quell- und Zielkontext, `tclass` für die Zielklasse und `action` für die spezifische Aktion. `action` unterstützt nur `*` (steht für alle) oder eine spezifische Aktion. Keiner der Parameter unterstützt mehrere Kontexte oder Aktionen wie die Standardregelsyntax `{binder system_app}`. Hier können Sie nur einen einzelnen Namen angeben. Unten finden Sie ein Beispiel.

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

Die obige Regel bedeutet, dass `hal_camera_default` alle Operationsberechtigungen für das Verzeichnis `camera_vendor_data_file` (`dir`) erhält. Entsprechend bedeutet die Änderung zur `disallow`-Methode, dass diese Berechtigungen verweigert werden.

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

Sie können auch, wie oben gezeigt, eine detaillierte Aktion wie `search` angeben.