Настоящий root не может ничего изменить в исходных файлах /system!

На моем корневом устройстве под управлением Android 4.2.2 установлены следующие инструменты:

  1. Эмулятор терминала
  2. БизиБокс Бесплатно

В эмуляторе терминала suкоманда успешно меняет пользователя на реального root:

root@hwH30-U10:/ # id -u
uid=0(root) gid=0(root)

Тогда я remount /systemкак R/W:

root@hwH30-U10:/ # mount | grep system
/emmc@android /system ext4 rw,realtime,noauto_da_alloc,commit=1,data=ordered 0 0

Тогда я даже:

root@hwH30-U10:/ # chmod 777 /system

Но я не могу ничего изменить, например, разрешения или содержимое /systemисходных файлов, таких как /system/build.prop!

Я уверен, что разрешения и монтирования в порядке, потому что я могу создать новый файл /system/tmp.prop, изменить его содержимое и разрешения с помощью эмулятора терминала.

Я действительно понятия не имею, почему эти операции не разрешены, в то время как с точки зрения Linux все в порядке, чтобы root мог выполнять эти изменения!

Есть ли жестко запрограммированная дополнительная защита внутри Android, например, в ядре?

Как это понять, пожалуйста?

Каков результат выполнения chmod? Пробовали ли вы какое-либо приложение-проводник, например ES File Explorer, в корневом режиме, чтобы изменить права доступа к файлам? Какое у вас приложение для управления root и версия Android?
Я без проблем использую SuperSU, 3C Toolbox и BusyBox на Marshmallow и KitKat.
@TamoghnaChowdhury, chmodговорит Operation not permitted. и да, ES File Explorer в корневом режиме, FileExpert и многие другие приложения ничего не могут изменить! Мое приложение для управления root работает KingRootна Android 4.2.2 (как я уже упоминал, id -uон Terminal Emulatorговорит мне, что я действительно root с идентификатором 0).
Может быть, есть какие-то меры SELinux? Не уверен, lsподдерживает ли это устройство на месте, но вы можете попробовать его с любым из параметров -Z/ --context/ --lcontext/ --scontext, чтобы отобразить любой потенциальный контекст SELinux.
@Izzy, ls -Zне говоря уже о каком-либо контексте, однако Google говорит, что SELinux был встроен в Android с версии 4.3. мой 4.2.2.
Из корневого терминала вы можете выполнить следующие шаги: cp /system/build.prop /system/build.prop.orig; echo lolcat > /system/build.prop; cat /system/build.prop; mv /system/build.prop.orig /system/build.prop. Меня интересует вывод команды cat.
@Firelord, как я и предполагал , echo lolcat > /system/build.propтерпит неудачу . работает! и терпит неудачу , как я догадался. Итак, вывод команды не интересен; Это оригинальное содержимое. k_shell/10210:17681: can't create /system/build.prop: Permission deniedecho lolcat > /system/build.prop.origmv /system/build.prop.orig /system/build.propfailed on ' /system/build.prop.orig': Operation not permittedcat
Интересный. Можете дать результат lsattr /system/build.prop?
@Firelord, результат lsattr /system/build.prop: -----i--A----пять тире, затем i, затем два тире, затем A, а затем четыре тире.
Есть проблема. Он имеет неизменяемый атрибут, что означает, что файл нельзя удалить или изменить. Измените это следующим образом: chattr -i /system/build.propа затем попробуйте эту команду lsattr. Если на этот раз вывод отличается, попробуйте мои команды lolcat и сообщите результат.
@Firelord, отлично! Я знал об этом iатрибуте, но в Linux viкоманда :w!может писать даже с этим атрибутом, но кажется, что BusyBox не viможет! в любом случае большое спасибо! Если хотите, добавьте ответ, и я отмечу его как ответ; Или я отвечу на свой вопрос. Еще раз спасибо :)
На самом деле странно, если vi может редактировать файл с неизменяемым атрибутом. Вы уверены, что атрибут был установлен, когда вы тестировали vi на этом файле? Я не могу сохранить изменения в файле даже с помощью vi, поэтому неизменяемый атрибут работает в моей системе, как и ожидалось.
@Firelord, Раньше я получал сообщения вроде (add ! to override)и :w!мог писать. Но теперь я создал файл тогда chattr +i, и вы правы, viне может обойти iатрибут! К сожалению, я не мог вспомнить предыдущие файлы, lsattrно я уверен, что это :w!могло бы решить некоторые сообщения, такие как (add ! to override). Но я не могу воспроизвести его сейчас.

Ответы (1)

Основываясь на моем комментарии и последующем комментарии Яссера, я могу сделать вывод, что проблема заключалась в неизменяемом атрибуте, установленном в файле build.prop. Если другие файлы и каталоги также не могут быть отредактированы или удалены, то они также могут иметь такой же атрибут или атрибут только для добавления.

Средство состоит в том, чтобы использовать эту команду с привилегиями root:

chattr -i FILE_PATH    # FILE_PATH is the file which currently has immutable attribute

Используйте -iR, за которым следует путь к каталогу, чтобы рекурсивно удалить неизменяемый атрибут из каталога.

Следует отметить, что в OP уже установлен busybox. chattrи lsattrэто не те утилиты, которые изначально есть в Android.

Соответствующую информацию об используемой команде chattr и атрибуте только для добавления можно найти в моем ответе здесь .

Примечание для читателей: файл с неизменяемым атрибутом показывает, что его нельзя редактировать, удалять, перемещать или переименовывать. Вы можете прочитать об атрибутах файлов, совместимых с Linux, здесь: linux.die.net/man/1/chattr