# Leer y escribir reglas de Selinux

Esta interfaz le permite realizar operaciones básicas de lectura y escritura convencional en las reglas de Selinux del sistema, permitiéndole configurar o eludir algunas restricciones del sistema. Las interfaces relacionadas pueden afectar la funcionalidad del sistema, por favor, úselas con precaución. Es necesario que usted tenga conocimientos sobre Selinux.

## Obtener una instancia de operación

Antes de comenzar, necesita obtener una instancia de selinux.

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

## Obtener el estado de Selinux

Utilice la siguiente llamada de interfaz para obtener si las reglas de Selinux están habilitadas.

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

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

Utilice la siguiente llamada de interfaz para obtener si el estado actual es enforce.

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

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

## Establecer el estado de Selinux

Utilice la siguiente llamada de interfaz para establecer Selinux en modo enforce o permissive.

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

Utilice la siguiente llamada de interfaz para establecerlo en modo enforce.

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

Utilice la siguiente llamada de interfaz para establecerlo en modo permissive.

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

## Crear un nuevo dominio

Utilice la siguiente llamada de interfaz para crear un nuevo dominio en Selinux.

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

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

## Establecer un dominio como permissive

Utilice la siguiente llamada de interfaz para establecer un dominio de Selinux en estado permissive.

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

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

## Establecer un dominio como enforce

Utilice la siguiente llamada de interfaz para establecer un dominio de Selinux en estado enforce.

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

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

## Refinar las reglas de control

Mediante las siguientes llamadas de interfaz, puede escribir reglas de `allow` y `disallow` de manera más detallada.

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

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

Donde `source` y `target` representan los contextos de origen y destino respectivamente, `tclass` representa la clase de destino, y `action` representa la operación específica. `action` solo admite `*` (que representa todo) o una acción específica. Ninguno de los parámetros admite múltiples contextos o acciones como en la sintaxis de reglas estándar `{binder system_app}`; aquí solo puede proporcionar un único nombre. A continuación se muestra una operación de ejemplo.


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

La regla anterior significa permitir a `hal_camera_default` todos los permisos de operación sobre el directorio (`dir`) `camera_vendor_data_file`. De manera similar, cambiar al método `disallow` significaría denegar estos permisos.

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

También puede proporcionar una acción más detallada como `search`, como se muestra arriba.