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

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

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

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

selinux = d.stub("SelinuxPolicy")

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

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

selinux.enabled()
>>> selinux.is_enabled( )
True

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

selinux.get_enforce()
>>> selinux.get_enforce()
1

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

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

selinux.set_enforce(enable)

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

>>> selinux.set_enforce(True)
1

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

>>> selinux.set_enforce( False)
0

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

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

selinux.create_domain(domain_name)
>>> selinux.create_domain("hello_selinux")
True

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

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

selinux.permissive(domain_name)
>>> selinux.permissive("untrusted_app")
True

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

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

selinux.enforce(domain_name)
>>> selinux.enforce("untrusted_app")
True

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

Используйте следующие вызовы API для более детальной записи правил allow и disallow.

selinux.disallow(source, target, tclass, action)
selinux.allow(source, target, tclass, action)

Здесь source и target представляют исходный и целевой контексты соответственно, tclass представляет класс цели, а action — конкретное действие. action поддерживает только * (означает все) или конкретное действие. Все параметры не поддерживают множественные контексты или действия, как в стандартном синтаксисе правил, например {binder system_app}. Здесь вы можете указать только одно имя. Ниже приведен пример операции.

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

Приведенное выше правило означает предоставление hal_camera_default всех прав на операции с каталогом (dir) camera_vendor_data_file. Аналогично, замена на метод disallow будет означать запрет этих прав.

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

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