Бит setuid, похоже, не влияет на bash

14

Я немного поэкспериментировал и заметил кое-что странное: установка бита setuid для копии bash, расположенной в, /usr/bin/bash-testказалось, не имела никакого эффекта. Когда я запускал экземпляр bash-test, мой домашний каталог не был установлен, /rootи когда я запускал whoamiкоманду bash-test, мое имя пользователя не сообщалось как существующее root, что свидетельствует о том, что bash-testон не был запущен от имени пользователя root. Однако, если я установил бит setuid whoami, я, как и ожидалось, был зарегистрирован как пользователь root в любой оболочке.

Я также попытался установить бит setuid /usr/bin/bashи наблюдал то же самое.

Почему bash не работает как root, когда я установил на него бит setuid? Может ли selinux иметь к этому какое-то отношение?


источник
1
Вы найдете дополнительную информацию о setuid в этом вопросе.
Энтон
Также см. Сетуид, разоблаченный Ченом, Дином и Вагнером. Это старая бумага, но она все еще применяется.
релевантный cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-18276
Джейкоб Эванс

Ответы:

21

Объяснение немного раздражает: причина в bash. straceнаш друг (должен быть сам SUID root, чтобы это работало):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash обнаруживает, что был запущен корневой SUID (UID! = EUID), и использует свое корневое питание, чтобы сбросить его, сбрасывая EUID в UID. А потом даже FSUID, просто чтобы быть уверенным ...

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

В конце концов, нет шансов. Вы должны начать bash с UID root (т.е. sudo).

Редактировать 1

Страница руководства говорит это:

Если оболочка запускается с эффективным идентификатором пользователя (группы), не равным реальному идентификатору пользователя (группы), и опция -p не указана, файлы запуска не читаются, функции оболочки не наследуются из среды, SHELLOPTS Переменные BASHOPTS, CDPATH и GLOBIGNORE, если они появляются в среде, игнорируются, а эффективный идентификатор пользователя устанавливается равным реальному идентификатору пользователя. Если опция -p указана при вызове, поведение при запуске такое же, но эффективный идентификатор пользователя не сбрасывается.

Но это не работает для меня. -pдаже не упоминается среди вариантов запуска. Я также пытался --posix; тоже не работал

Хауке Лагинг
источник
2

В любом случае, корневая программа SUID не запускается со средой root ( $HOMEконфигурация для оболочки и т. Д.), Она запускается с полномочиями root (т. Е. Она может удалить любой файл, изменить любые разрешения и т. Д.).

vonbrand
источник