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

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

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

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

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

решение1

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

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

bash определяет, что он был запущен как SUID root (UID!=EUID) и использует свои полномочия root, чтобы сбросить эти полномочия, сбрасывая 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незапускается с правами root ( $HOMEконфигурация для оболочки, что угодно), он запускается с правами rootполномочия(т. е. он может удалить любой файл, изменить любые разрешения и т. д.).

Связанный контент