Я немного поэкспериментировал и заметил нечто странное: установка бита 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полномочия(т. е. он может удалить любой файл, изменить любые разрешения и т. д.).