# Чтение и запись правил Selinux

Данный API позволяет выполнять базовые операции чтения и стандартной записи правил Selinux, что дает возможность настраивать или обходить некоторые системные ограничения. Соответствующие вызовы API могут повлиять на функциональность системы, поэтому используйте их с осторожностью. Предполагается, что вы знакомы с принципами работы Selinux.

## Получение экземпляра для работы

Прежде чем начать, вам необходимо получить экземпляр selinux.

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

## Получение статуса Selinux

Используйте следующий вызов API, чтобы определить, включены ли правила Selinux.

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

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

Используйте следующий вызов API, чтобы определить, находится ли система в режиме enforce.

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

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

## Установка статуса Selinux

Используйте следующий вызов API, чтобы установить для Selinux режим enforce или permissive.

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

Используйте следующий вызов API, чтобы установить режим enforce.

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

Используйте следующий вызов API, чтобы установить режим permissive.

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

## Создание нового домена

Используйте следующий вызов API, чтобы создать новый домен в Selinux.

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

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

## Установка домена в режим permissive

Используйте следующий вызов API, чтобы установить для домена Selinux режим permissive.

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

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

## Установка домена в режим enforce

Используйте следующий вызов API, чтобы установить для домена Selinux режим enforce.

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

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

## Детальная настройка правил контроля

Используйте следующие вызовы API для более детальной записи правил 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` всех прав на операции с каталогом (`dir`) `camera_vendor_data_file`. Аналогично, замена на метод `disallow` будет означать запрет этих прав.

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

Вы также можете указать более конкретное действие, такое как `search`, как показано выше.