В компании мало людей, и особенно не хватает студентов-разработчиков C. Я могу переместить их только туда, где это необходимо! Запишите полную конфигурацию системы Android, запустите приложение и настройте разрешения Selinux!
1. Добавьте приложение в каталог поставщика, скомпилируйте и сгенерируйте исполняемый файл test_abc в /system/bin/;
Я начал с обращения к модификациям в Интернете, но обнаружил, что исполняемый файл test_abc после компиляции не может быть упакован в /system/bin;
aaa@abc-0C:~/work/ATOS_Q/vendor/test cat Android.mkLOCAL_PATH := (call my-dir)PRODUCT_PACKAGES += \ test_abcinclude (call all-makefiles-under,(LOCAL_PATH))
Файлы в каталоге test_abc\:
Android.mk
test_abc.c
Файл Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
test_abc.c
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils
LOCAL_C_INCLUDES += \
bionic \
LOCAL_MODULE := test_abc
LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := 64
include $(BUILD_EXECUTABLE)
В test_abc.c есть основной метод, который работает с файлами и сокетами;
Решение проблемы, связанной с невозможностью упаковать test_abc в путь system/bin, состоит в том, чтобы переместить весь путь test_abc в путь производителя qcom:
aaa@abc-0C:~/work/ATOS_Q/vendor/qcom/bonito/test_abc pwd/home1/gwb/work/ATOS_Q/vendor/qcom/bonito/test_abcaaa@abc-0C:~/work/ATOS_Q/vendor/qcom/bonito/test_abc lsAndroid.mk test_abc.c
23 #lyz add for test 24 include vendor/xdja/test_abc/Android.mk
2. Добавьте определение разрешений test_abc:
aaa@abc-0C:~/work/ATOS_Q$ vi device/google/bonito-sepolicy/vendor/qcom/sdm710/file_contexts 60 #lyz add for test 61 /system/bin/test_abc u:object_r:test_abc_exec:s0
3. Добавьте автозагрузку и измените ./system/core/rootdir/init.rc.
#lyz add for test service test_abc /system/bin/test_abc class main oneshot seclabel u:r:test_abc:s0
4. Добавьте файл:
aaa@abc-0C:~/work/ATOS_Q$ cat device/google/bonito-sepolicy/vendor/qcom/common/test_abc.te type test_abc, domain, coredomain; type test_abc_exec, file_type, system_file_type, exec_type; init_daemon_domain(test_abc)
5. Скомпилируйте и проверьте, проверьте журнал загрузки dmesg:
[ 9.191761] init: cannot setexeccon('u:r:test_abc_exec:s0') for test_abc: Invalid argument
Проблема должна заключаться в том, что путь к test_abc.te неверен, из-за чего init не распознает метку «u:r:test_abc_exec:s0» при запуске.
Измените четвертый шаг, переместите файл test_abc.te по пути /device/google/bonito-sepolicy/private, перекомпилируйте версию, скачайте и запустите; aaa@xdja-0C:~/work/ATOS_Q/device/google/bonito-sepolicy/private$ pwd /home1/gwb/work/ATOS_Q/device/google/bonito-sepolicy/private
6. Проверьте журнал загрузки dmesg, и, наконец, появится ожидаемый журнал запретов:
Line 2077: [ 9.178268] type=1400 audit(258.270:14): avc: denied { dac_override } for comm="test_abc" capability=1 scontext=u:r:test_abc:s0 tcontext=u:r:test_abc:s0 tclass=capability permissive=0 Line 2078: [ 9.178488] type=1400 audit(258.273:16): avc: denied { dac_override } for comm="test_abc" capability=1 scontext=u:r:test_abc:s0 tcontext=u:r:test_abc:s0 tclass=capability permissive=0 duplicate messages suppressed Line 2079: [ 9.178500] type=1400 audit(258.273:17): avc: denied { create } for comm="test_abc" scontext=u:r:test_abc:s0 tcontext=u:r:test_abc:s0 tclass=tcp_socket permissive=0 Line 2158: [ 9.609626] type=1400 audit(258.273:17): avc: denied { create } for comm="test_abc" scontext=u:r:test_abc:s0 tcontext=u:r:test_abc:s0 tclass=tcp_socket permissive=0
7. Измените test_abc.te, добавив соответствующие разрешения для test_abc, скомпилируйте версию и повторите проверку:
#============= test_abc ==============
allow test_abc self:capability dac_override;
allow test_abc self:tcp_socket create;
8. Решите проблему, связанную с невозможностью рутирования /system:
E:\source\dual_os>adb root restarting adbd as root E:\source\dual_os>adb remount W Disabling verity for /system E Skipping /system W Disabling verity for /vendor E Skipping /vendor W Disabling verity for /product E Skipping /product W No partitions to remount /system/bin/remount exited with status 7 remount failed Ошибка корневого системного пути!
решать:
Сначала войдите в режим разработчика и включите опцию OEM.
Затем adb перезагрузите загрузчик
Затем прошивка fastboot и разблокировка
Затем fastboot getvar разблокируется
Ожидание результата обычно показывает «да». Если нет, возможно, Baidu придется решить проблему.
Затем перезапустите, затем adb root, adb Disable-Verity, затем перезапустите adb remount и вы сможете его смонтировать.
Не удалось перемонтировать adb, вы можете использовать diable-verity
C:\Users\li>adb disable-verity
verity is already disabled
using overlayfs
Now reboot your device for settings to take effect
E:\source\dual_os>adb root restarting adbd as root E:\source\dual_os>adb remount remount succeeded E:\source\dual_os>
E:\source\dual_os>adb push E:\source\dual_os\test_abc /system/bin 120 KB/s (11560 bytes in 0.093s) E:\source\dual_os>adb shell reboot E:\source\dual_os>
В Selinux много концепций, и их до сих пор очень сложно понять! И вам нужно иметь базовые знания о ядре Linux. Короче говоря, одно дело — открыть два канала Рена и Ду. Узнать больше всегда не вредно!
----------------------------------2021/12/09-----------------
Измените правило никогда не разрешать:
--- a/system/sepolicy/public/domain.te
+++ b/system/sepolicy/public/domain.te
@@ -1191,6 +1191,7 @@ neverallow {
-init
-runas
-zygote
+ -abc_service
} shell:process { transition dyntransition };
/system/sepolicy# cat public/abc_service.te
type abc_service, domain;
type abc_service_exec, system_file_type, exec_type, file_type;
system/sepolicy# cat private/abc_service.te
typeattribute abc_service coredomain;
init_daemon_domain(abc_service)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: prebuilts/api/29.0/private/file_contexts
modified: prebuilts/api/29.0/public/domain.te
modified: private/compat/26.0/26.0.ignore.cil
modified: private/compat/27.0/27.0.ignore.cil
modified: private/compat/28.0/28.0.ignore.cil
modified: private/file_contexts
modified: public/domain.te
Untracked files:
(use "git add <file>..." to include in what will be committed)
prebuilts/api/29.0/private/abc_service.te
prebuilts/api/29.0/public/abc_service.te
private/abc_service.te
public/abc_service.te
--- a/system/sepolicy/private/compat/27.0/27.0.ignore.cil
+++ b/system/sepolicy/private/compat/27.0/27.0.ignore.cil
@@ -187,6 +187,8 @@
wm_trace_data_file
wpantund
wpantund_exec
+ abc_service
+ abc_service_exec
wpantund_service
wpantund_tmpfs))
Ссылка:
https://source.android.google.cn/security/selinux/customize
https://www.cnblogs.com/schips/p/android_add_custom_service_when_system_init.html