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, как показано выше.