Добавить в корзинуПозвонить
Найти в Дзене
mamaich

Как я пользуюсь утилитой sepolicy-inject

Данный пост - заметки для себя. Есть набор утилит setools-android. Где я брал - не помню, но пусть будет эта тема XDA. Есть устройство, с root, с включенным selinux. Я выключаю selinux загружая такой .ko (драйвер): данный драйвер я загружаю из init.rc командой "insmod путь_к_ko". И всё работает. Но на некоторых процессах, скорее всего, стартованных до insmod - SeLinux остается включенным. И, например, выполняя команду setprop sys.usb.config adb получаем ошибку "Unable to set property 'sys.usb.config' to 'adb' from uid:0 gid:2000 pid:5834: SELinux permission check failed": на строку выше наблюдаем сообщение SeLinux: selinux: avc: denied { set } for property=sys.usb.config pid=5834 uid=0 gid=2000 scontext=u:r:shell:s0 tcontext=u:object_r:exported_system_radio_prop:s0 tclass=property_service permissive=0 Берем утилиту sepolicy-inject, и передаем ей в качестве параметров:
-s - третье слово из scontext
-t - третье слово из tcontext
-c - слово из tclass
-p - то, что указано между фигурны

Данный пост - заметки для себя.

Есть набор утилит setools-android. Где я брал - не помню, но пусть будет эта тема XDA.

Есть устройство, с root, с включенным selinux. Я выключаю selinux загружая такой .ko (драйвер):

https://pastebin.com/ZeXXgff5 (как видите, драйвер расчитан на 32-битный Андроид)
https://pastebin.com/ZeXXgff5 (как видите, драйвер расчитан на 32-битный Андроид)

данный драйвер я загружаю из init.rc командой "insmod путь_к_ko". И всё работает. Но на некоторых процессах, скорее всего, стартованных до insmod - SeLinux остается включенным. И, например, выполняя команду

setprop sys.usb.config adb

получаем ошибку "Unable to set property 'sys.usb.config' to 'adb' from uid:0 gid:2000 pid:5834: SELinux permission check failed":

-2

на строку выше наблюдаем сообщение SeLinux:

selinux: avc: denied { set } for property=sys.usb.config pid=5834 uid=0 gid=2000 scontext=u:r:shell:s0 tcontext=u:object_r:exported_system_radio_prop:s0 tclass=property_service permissive=0

Берем утилиту sepolicy-inject, и передаем ей в качестве параметров:
-s - третье слово из
scontext
-t - третье слово из tcontext
-c - слово из tclass
-p - то, что указано между фигурными скобками.

В данном случае команда будет выглядеть так:

sepolicy-inject -s shell -t exported_system_radio_prop -c property_service -p set -l

-l - означает, что настройки требуется загрузить и применить сразу же.
Еще у
sepolicy-inject есть ключ -Z, он разрешает все действия для указанного контекста. Например, часто бывает полезна такая конструкция:

sepolicy-inject -Z kernel -l

Этой командой разрешаем ядру выполнять любые действия, которые обычно блокируются selinux.


Почему информация, описанная выше бесполезна?
Как оказалось, можно в строке параметров ядра поменять "androidboot.selinux=enforcing" на "androidboot.selinux=permissive" и этого достаточно безо всякого драйвера, так как устройство с довольно старым Андроид.