# Lire et écrire les règles Selinux

Cette interface vous permet d'effectuer des opérations de lecture de base et d'écriture standard sur les règles Selinux du système, vous autorisant à définir ou contourner certaines restrictions du système. Les interfaces associées peuvent affecter les fonctionnalités du système, veuillez les utiliser avec prudence. Vous devez avoir une connaissance de Selinux.

## Obtenir une instance d'opération

Avant de commencer, vous devez d'abord obtenir une instance de selinux.

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

## Obtenir l'état de Selinux

Utilisez l'appel d'interface suivant pour savoir si les règles Selinux sont activées.

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

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

Utilisez l'appel d'interface suivant pour savoir si l'état actuel est `enforce`.

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

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

## Définir l'état de Selinux

Utilisez l'appel d'interface suivant pour définir Selinux en mode `enforce` ou `permissive`.

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

Utilisez l'appel d'interface suivant pour le définir en mode `enforce`.

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

Utilisez l'appel d'interface suivant pour le définir en mode `permissive`.

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

## Créer un nouveau domaine

Utilisez l'appel d'interface suivant pour créer un nouveau domaine dans Selinux.

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

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

## Mettre un domaine en mode permissif

Utilisez l'appel d'interface suivant pour définir un domaine Selinux en mode `permissive`.

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

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

## Mettre un domaine en mode enforce

Utilisez l'appel d'interface suivant pour définir un domaine Selinux en mode `enforce`.

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

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

## Affiner les règles de contrôle

Les appels d'interface suivants permettent d'écrire des règles `allow` et `disallow` de manière plus détaillée.

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

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

Ici, `source` et `target` représentent respectivement les contextes source et cible, `tclass` représente la classe cible, et `action` représente l'opération spécifique. `action` ne prend en charge que `*` (représentant toutes les actions) ou une action spécifique. Aucun des paramètres ne prend en charge plusieurs contextes ou actions comme dans la syntaxe de règle standard `{binder system_app}`. Ici, vous ne pouvez fournir qu'un seul nom. Voici un exemple d'opération.


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

La règle ci-dessus signifie autoriser `hal_camera_default` à avoir toutes les permissions d'opération sur le répertoire `camera_vendor_data_file` (`dir`). De même, en utilisant la méthode `disallow`, cela signifie refuser ces permissions.

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

Vous pouvez également fournir une action détaillée comme `search`, comme indiqué ci-dessus.