Як ви можете дізнатися, чи потрібно для виконання програми root?


10

Я розумію, що це дещо принципове і, можливо, дурне питання, але я не змогла знайти відповідь.

Я розумію, що кожен файл має "Executable"трохи.

Я припускав, що програми, які вимагають root, що належать rootкористувачеві та rootгрупі, не матимуть Executableбіт, Otherі це завадить некористувальним користувачам їх виконувати. Але в каталогах /binі в /sbinкаталогах я бачу, що всі файли мають такі дозволи, як-rwxr-xr-x

Отже, що насправді визначає, чи потрібно користувачеві мати root права на виконання чогось?


1
За замовчуванням ви або будь-який користувач можете виконати будь-яку програму з каталогів /binабо /sbin. Проблема полягає в тому, що деякі з цих програм працюють різні, залежно від того, який користувач їх виконує.
Radu Rădeanu

Відповіді:


13

Колись, це в коді. Наприклад, посередині hwclock.c, ви знайдете:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

що змінить поведінку програми, якщо ви root або ні.

У більшості інших випадків це неявно; делеговане ядро. Наприклад, якщо програма викликає системний виклик, який дозволяє перезавантажувати систему, вона буде працювати лише у тому випадку, якщо ви користуєтесь root. Якщо ви не root, ви отримаєте помилку "відмовлено у дозволі", що програма (якщо вона добре написана) просто повідомляє вам. Або ви намагаєтесь видалити файл; якщо у вас є правильний дозвіл на файл, щоб це зробити, це буде успішно; якщо ні, то це залежить від того, ви root або ні --- коли rmдзвінки unlink()ядро перевірятиме дозволи.

Отже, ні, в принципі ви не можете сказати, просто дивлячись на дозвіл виконуваного файлу, якщо програма вимагає привілеїв root чи ні. Дуже багато програм потребуватимуть їх лише для деякої операції, тому зробити щось подібне буде дуже важко. Випадок hwclockодин (будь-хто може прочитати годинник , але тільки корінь може встановити його), але є сотні з них ( kill, rm, cat...)

Потім є пов'язаний і цікавий світ налаштованих програм ...


Так в основному ядро ​​"відповідає за це"? Якщо програма здійснює системний виклик, ядро ​​визначає, чи повинен користувач, який запускає програму, викорінювати корінь і виконує його?
Дін

2
В основному, так. Програма може робити додаткові тести, але перевірка дозволу знаходиться на рівні ядра. Програми Setuid-root - виняток; вони працюють як root завжди, тому їм потрібно перевірити дозвіл на себе (і це гарний шрифт вад безпеки ...)
Rmano
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.