Біт сетуїду, схоже, не впливає на баш


14

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

Я спробував ввімкнути біт налаштування /usr/bin/bashі спостерігав таку ж поведінку.

Чому bash не працює як root, коли я встановлюю біт setuid на ньому? Чи може selinux щось із цим робити?

linux  bash  setuid 

1
Ви знайдете додаткову інформацію про налаштування в цьому запитанні.
Антон

Також дивіться Сетуїда, демістифікованого Чен, Діном та Вагнером. Це стара папір, але вона все ще застосовується.

Відповіді:


21

Пояснення - це щось дратівливе: причина саме цього удару. straceє нашим другом (для цього може бути коренем SUID):

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

bash виявляє, що він був запущений корінь SUID (UID! = EUID) і використовує його root-силу, щоб скинути цю потужність, скинувши EUID на UID. А пізніше навіть FSUID, просто щоб бути впевненим ...:

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

Зрештою: жодного шансу. Ви повинні почати bash з корінням UID (тобто sudo).

Редагуйте 1

Сторінка чоловіка говорить про це:

Якщо оболонка запускається з ефективного ідентифікатора користувача (групи), який не дорівнює ідентифікатору реального користувача (групи), а опція -p не надається, файли запуску не зчитуються, функції оболонки не успадковуються з оточення, SHELLOPTS Змінні BASHOPTS, CDPATH та GLOBIGNORE, якщо вони з'являються в середовищі, ігноруються, а ефективний ідентифікатор користувача встановлюється на реальний ідентифікатор користувача. Якщо параметр -p надається при виклику, поведінка при запуску буде однаковою, але ефективний ідентифікатор користувача не скидається.

Але це не працює для мене. -pнавіть не згадується серед варіантів запуску. Я також спробував --posix; теж не працював.


2

У будь-якому випадку коренева програма SUID не працює з середовищем root ( $HOME, конфігурація оболонки, як би там не було), вона працює з повноваженнями root (тобто вона може видалити будь-який файл, змінити будь-які дозволи та ін.).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.