Если бы я был системным пользователем root (без изменений для /system
раздела) устройства Nexus, смогу ли я установить возможности для исполняемых файлов без изменения исходного двоичного файла ядра?
Я часто хочу управлять файлами без ограничений с моего терминала (требуется CAP_DAC_READ_SEARCH
) . Однако я также хочу не использовать суперпользователя.
Необходимые вещи - это инструменты для установки ограничений для поддержки их использования ядром (это не зависит от других вещей пользовательского пространства) .
Проблема в том, что у меня нет такого устройства. Так что я не могу сказать, будет ли это работать на любой из Nexus 5X Nexus 6P Nexus 9 Pixel C
.
rooting
root-access
security
file-system
kernel
user2284570
источник
источник
/system/bin/ping
команда не установлена на моем реальном устройстве Samsung, предлагаяCAP_NET_RAW
. Тем не менее, я не буду рутировать настоящее устройство и не знаю, какой инструмент я могу использовать для просмотра соответствующей информации, поэтому я не могу проверить.Ответы:
Хотя вопрос старый, он продолжает появляться поверх вопросов без ответов (мои теги) . Поэтому я думаю, что я должен ответить на это :)
ПОДДЕРЖКА AOSP ДЛЯ ВОЗМОЖНОСТЕЙ:
Вопрос конкретно об устройствах Google, я никогда не пользовался устройством Google. Однако, что я могу сказать наверняка, так это то, что возможности Linux (процесса) должны быть включены на большинстве устройств (если не на всех), работающих на уровне Android 1.6. Ссылка находится и в,
init
и вsystem_server
двух основных компонентах AOSP. Например, в Android 4.2installd
- еще один основной компонент - был создан для работы с удаленными возможностями.Возможности файловой системы были одним из основных улучшений безопасности в Android 4.3, которые удаляли
set-uid
/set-gid
из двоичных файлов, напримерrun-as
, устанавливая файловые возможности для них. Это вызвало революционные изменения в рутинге Android.Поддержка возможностей Ambient была добавлена в Android 8, что препятствует использованию файловых возможностей:
init
От них зависят многие сервисы, напримерstoraged
, мойsshd
иdnscrypt-proxy
сервис.ПОДДЕРЖКА ЯДРА ДЛЯ ВОЗМОЖНОСТЕЙ:
Переходя к части ядра, сборка ядра без возможностей не является обязательной:
И:
Самая старая распространенная версия ядра в репозиториях Android - 2.6.39, которая также включает поддержку файловых возможностей.
Поддержка возможностей файловой системы на стороне ядра должна была быть отложена у некоторых OEM-производителей, но они должны были переключиться, потому что в противном случае функциональные возможности сломались бы. Например
surfaceflinger
(Android Surface Composer ) не будет работать без файловых возможностей, начиная с Android 7.1.Основное ядро Linux 4.3 было исправлено в сентябре 15 для возможностей Ambient (процесса), перенесено на ядра Android 3.18 и 4.1 в 2016 году. Так что они обязательно являются частью ядра.
ВЫВОД:
В дистрибутивах Linux очень немногие программы используют возможности Linux. Хотя есть
pam_cap
, в основном (или все?) Дистрибутивы до сих пор используютset-uid
наsu
,sudo
,ping
,mount
,passwd
и так далее. Но на Android возможности глубоко интегрированы в фреймворк и основные сервисы. Их удаление потребует редактирования сотен или может быть тысяч строк в AOSP и исходном коде ядра. Не имеет смысла, что OEM (особенно Google, который разработал AOSP и модифицировал ядро Linux для Android) не использует эту бесплатную функцию безопасности, когда она легко доступна в ядре Android. Это чисто функция, связанная с ОС, не требующая дополнительной аппаратной поддержки. Поэтому любой телефон любого производителя должен иметь поддерживаемые возможности.ВОПРОСОВ:
Да, должно быть.
Я использую
capsh
,getcap
,setcap
,getpcaps
изlibcap
иnetcap
,pscap
изlibcap-ng
без каких - либо проблем. Но я предпочитаю возможности Ambient, они просты в настройке и не зависят от функций файловой системы, таких как расширенные атрибуты, как в случае файловых возможностей. Вы также можете использоватьlistxattr
,getxattr
,setxattr
иremovexattr
средства отxattr_syscall_wrapper
манипулированияsecurity.capability
или любого другого непосредственно некоторого атрибута.Из вашего комментария:
Андроида пинг ни есть ,
set-uid
ниCAP_NET_RAW
. Он создает специальный сокет без RAW,IPPROTO_ICMP
который, в отличие отIPPROTO_RAW
него, не требует никаких привилегий.ДАЛЬНЕЙШИЕ ССЫЛКИ:
В дополнение к 10+ ссылкам, приведенным выше, вот еще несколько частей кода AOSP, поддерживающих и использующих возможности Linux:
libc
,init
,trusty
(ОС)libcap
,libcap-ng
zygote
(раздвоенные приложения иsystem_server
)hostapd
,wpa_supplicant
,dnsmasq
,logd
,netd
(NetLink
менеджер, частный DNS),debuggerd
(тест),sdcard
демон,performanced
,incidentd
,mtpd
,traced_probes
(Perfetto),racoon
(IPSec),wificond
ряд HAL демонов , включаяrild
.reboot
(INIT),dumpstate
,tcpdump
,strace
,iputils
(ping
, иtraceroute
т.д.)adbd
использует эту библиотеку для удаления привилегий.capability
класс для предоставления / запрета возможностей доменам.Делается вывод, что Android сильно зависит от возможностей Linux, это не мало используемая функция.
СВЯЗАННЫЙ:
источник