Я пытаюсь скопировать один файл из /data/data/com.application1/myfile
в/data/data/com.application2/myfile
Файл поступает с владельцем и группой, установленными для приложения, из которого он был получен. Затем я сменил владельца и сгруппировал запускающее его приложение (приложение SSH).
Разрешения меняются, но мне все равно отказывают в доступе. Я пытался использовать chattr -i myfile
, но проблема все еще существует. Даже chmod 777
все равно дает отказ в доступе.
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/whoami
u0_a149
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/ls -la
-rwx------ u0_a149 u0_a149 10 2018-06-23 16:23 myfile
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/echo test > testfile
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/ls -la
-rwx------ u0_a149 u0_a149 10 2018-06-23 16:23 myfile
-rw------- u0_a149 u0_a149 5 2018-06-23 16:37 testfile
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/cat testfile
test
user@htc_m8:/data/data/org.galexander.sshd/home $ /system/bin/cat myfile
cat: myfile: Permission denied
У меня установлен busybox, но в примере я использую собственные команды, однако команды busybox дают тот же результат.
Я просто не вижу, чем файл, который я создал, отличается от того, который я скопировал. Тот же владелец/группа/разрешения.
Android работает в режиме «SELinux». Подробнее здесь Концепции SELinux
Это означает, что в дополнение к стандартным разрешениям Linux к нему также прикреплены дополнительные атрибуты.
Запуск attr -l myfile
показал следующееAttribute "selinux" has a 38 byte value for myfile
С помощью /system/bin/ls -alZ
вы можете увидеть значение атрибута selinux.
-rwx------ u0_a141 u0_a141 u:object_r:app_data_file:s0 myfile
-rw------- u0_a141 u0_a141 u:object_r:app_data_file:s0:c512,c768 testfile
В файле, который я скопировал, в конце отсутствовали некоторые дополнительные данные, c512,c768
я предполагаю, что это что-то вроде идентификатора приложения.
Запуск su -c restorecon myfile
исправил это и восстановил файл с правильным значением атрибута. Ссылка: Объяснение команды chcon - Post