Недавно я нашел способ поддерживать root-доступ на моем устройстве Android с помощью SSH-сервера dropbear, который я модифицировал для запуска при загрузке с правами root, используя init.d, маленькую магию сценариев и некоторые сценарии конфигурации, которые я сделал. Если хотите, можете проверить это здесь . В любом случае для эксперимента я удалил из системы бинарник su и Superuser.apk. Мне удалось скопировать их обратно в систему, но я не знаю соответствующих разрешений для двоичного файла su. Если я посмотрю в приложении Super User на другом телефоне с root-правами и перейду к обновлению, оно отобразится -rwsr -sr-x
как разрешения на двоичный файл. Как я могу установить эти же разрешения вручную и что они означают?
Для установки прав доступа к файлам вы можете использовать chmod
команду. Показанные разрешения в основном разделены на 3 части, каждая из которых состоит из 3 символов: тройка для владельца, группы и «других». Обычно каждая тройка содержит определения для чтения, записи и выполнения файла; так что rwx
означает «может читать, писать и выполнять», в то время как r--
сказал бы «может только читать».
Полученным 9 символам обычно предшествует еще один, дающий информацию о типе «файла»: (d) каталог и (l) чернила являются наиболее распространенными примерами. Опять же, если никакое «особое условие» не соответствует, начальный указатель -
указывает на «обычный файл».
Исходя из этого, давайте примем ваш ввод: -rwsr-sr-x
очевидно, описывает «обычный файл» (начинающийся с -
), доступный для чтения ( r
) владельцем, группой и другими, доступный для записи только владельцем и исполняемый «другими» — в то время как владелец и группа имеют s
вместо этого x
для выполнения. Это означает «suid», повышает вызывающего до уровня владельца/группы файла.
Воспользовавшись тем, что разрешения могут быть установлены «побитно» ( x
= 1, w
= 2, r
= 4, suid user = 4, group = 2), после моего долгого «разглагольствования», наконец, команда, которая должна сделать свое дело:
chmod 6774 su
Следует установить разрешения, которые показывает ваш вопрос. Если я «просчитался», у вас есть вся информация, чтобы пересчитать для себя сейчас :)
Дополнительные подсказки из комментариев:
Вместо вычисления «битовой маски» можно также использовать символические имена — как указал Дэн Халм и как объяснено, например, на справочной странице chmod :
Таким образом, следующие две команды должны быть похожими, при условии, что ранее не было предоставлено ничего другого:
chmod 6774 su
chmod u+rws g+rs o+rx su
Разница становится очевидной, если, например, раньше «другие» также имели разрешение на запись: в то время как первая команда (с использованием битовой маски) явно устанавливает разрешение в соответствии с определенными «предоставлениями» (и, таким образом, удаляет это разрешение на запись), символическая команда " делает diff" (в примере он просто добавляет указанные разрешения к тому, что было раньше, так что разрешение на запись не будет удалено).
Дэн Халм
chmod
:chmod u+rws g+rs a+rx su
все будет делаться правильно, и вам не нужно считать на пальцах.Иззи
chmod u+rws g+rs o+rx su
(не «все», а «другие», см. справочную страницу chmod )? Я всегда путаю это, думая, был ли это «владелец» или «другие», поэтому я предпочитаю использовать побитовые вещи, за исключением случаев, когда меняю вещи только для группы;)Иззи
a+rx
установит «rx» для «ugo» (пользователь, группа и другие). Я не уверен, что меня больше смущает: вычисление набора битов или интерпретация рекурсивных символов: PДэн Халм
a
сделало бы команду короче, но, как вы заметили, из-за этого немного сложнее понять, что происходит, поэтому я почти никогда не используюa
.Иззи
a
символе. Но спасибо, что заставили меня снова проверить справочную страницу :Da
Иногда переключатель может быть весьма полезен, например, для таких вещей, какchmod a+r public_info.txt
.Дэн Халм
a
в своем первом комментарии, я имел в видуo
других. А я думал, зачем ты это поднял!Иззи