SELinux

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

Получение экземпляра для операций

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

selinux = d.stub("SELinuxPolicy")

Получение состояния SELinux

С помощью следующего вызова интерфейса можно узнать, включены ли правила SELinux.

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

С помощью следующего вызова интерфейса можно получить текущее состояние enforcing.

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

Установка состояния SELinux

С помощью следующего вызова интерфейса можно установить SELinux в состояние enforcing или permissive.

selinux.set_enforce(enable)

С помощью следующего вызова интерфейса устанавливается состояние enforcing.

>>> selinux.set_enforce(True)
1

С помощью следующего вызова интерфейса устанавливается состояние permissive.

>>> selinux.set_enforce(False)
0

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

С помощью следующего вызова интерфейса можно создать новый домен в SELinux.

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

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

С помощью следующего вызова интерфейса можно установить домен SELinux в состояние permissive.

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

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

С помощью следующего вызова интерфейса можно установить домен SELinux в состояние enforcing.

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

Детализированные правила управления

С помощью следующих вызовов интерфейса можно более детально записывать правила 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, как показано выше.