3

У меня есть скрипт bash, запущенный с cap_sys_admin,cap_setgid,cap_setuid+i (что означает, что эти возможности наследуются), какова команда для получения прав root без ввода пароля (обратите внимание, что это просто означает использование setreuid(0,0)) ?

Цель состоит в том, чтобы выполнить это, не находясь в режиме разработчика или отключив проверку rootfs. Это означает, что я не могу вызвать оболочку, которую я написал бы сам, и я не могу использовать python или perl, если нет способа использовать cap_sys_admin для перемонтирования exec раздела.
Сценарий запускается во время процесса загрузки.

3 ответа3

4

Мое первое наблюдение, что у вас есть 3 способности. Вы пытаетесь спросить, как повысить ваши возможности до всех возможностей, став root-пользователем? На первый взгляд кажется, что вы пытаетесь получить все возможности (став root), имея только 3.

Второе наблюдение заключается в том, что вы не указываете, что представляет собой набор возможностей системы. Т.е., если общий ограничивающий набор - только эти 3 возможности, то становление root не будет иметь никакого эффекта.

Третье замечание - вы не указываете, что такое "безопасные биты". В зависимости от их значения может оказаться невозможным добавить какие-либо дополнительные возможности, или же может иметь место тот факт, что получение root-прав не меняет ничего, кроме изменения вашего UID (т. Е. Root больше не является специальным).

Четвертое наблюдение - пока вы запускаете оболочку bash с перечисленными возможностями, вы не показываете, что bash действительно сохранил эти возможности. Возможно, вы захотите убедиться.

Но я пойду с наблюдением № 1 и скажу, что то, что вы спрашиваете, не должно быть возможным. Если это так, то похоже, что это будет ошибка безопасности ядра - в частности, повышение привилегий. Если вы найдете способ сделать это, я бы подумал, что он не останется надолго, поскольку ошибки безопасности обычно исправляются как можно скорее.

Я что-то упустил в вашем сценарии использования, почему это не было бы ошибкой безопасности?

2

Ответ прост, так как mount.exfat-fuse полагается только на разрешения и не проверяет ᴜɪᴅ 0:

/sbin/mount.exfat-fuse /media/removable/Y/dev /media/removable/archive -o exec,nonempty

Конечно, это работает только для версий, которые меня интересуют, так как exfat-fuse был обновлен благодаря моему обнаружению.

1

Новый ответ: невозможно, если вы не готовы идти на риск, который, как вы указали (мудро), вы не готовы брать на себя.

Чтобы подвести итог проблемы:

  1. Все диски, кроме rootfs, монтируются как noexec, поэтому могут содержать скрипты, но не программы
  2. Rootfs (система) проверена и не может быть изменена
  3. Системно-модифицирующие глаголы разрешены только в режиме разработки (администратор)
  4. Перемонтирование дисков с exec возможно только в режиме разработки
  5. Если не в режиме разработки, suid и системные изменения не работают.

Решения и обходные пути:

  1. Программы могут быть выполнены по сценарию, начинающемуся со строки she-bang (начинается с #!) это запустит исполняемый файл с именем в этой строке. Но если только в режиме разработки, таким способом может выполняться только ограниченное количество программ из rootfs.
  2. Удалите проверку rootfs и сделайте файловую систему доступной для записи через
    sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification
    Смотрите ссылку с предупреждениями.
  3. Напишите свои собственные rootfs с контрольной суммой (ссылка на удаленный документ в кеше Google).

[Старый ответ]

Вы запросили возможность CAP_SYS_ADMIN , которая равняется корневому разрешению, поскольку она дает возможность монтировать / размонтировать файловые системы, чтобы связывать монтируемую новую файловую систему поверх существующей для бэкдора любого двоичного файла в системе.

Так как в Chrome OS были предприняты большие усилия, чтобы заблокировать все дыры в безопасности, вплоть до блокировки suid, когда он не находится в режиме разработки, я не знаю, были ли также заблокированы возможности, и у меня нет Chromebook для тестирования (но вы делаете ).

Такие возможности могут быть предоставлены через:

$  sudo setcap cap_sys_admin+ep executable

Рекомендации:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .