Невозможно скопировать файлы из одного каталога /data/data/ в другой (Root)

Я пытаюсь скопировать один файл из /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 дают тот же результат.

Я просто не вижу, чем файл, который я создал, отличается от того, который я скопировал. Тот же владелец/группа/разрешения.

Ответы (1)

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