У Linux, привілей кореня були в одній точці , розділеної на «можливість», так що ви можете отримати повний список спеціальних привілеїв кореневих, дивлячись в цю документацію: man 7 capabilities
.
Щоб відповісти на ваше запитання, команді потрібно буде запустити як root, коли їй потрібна одна з цих привілеїв, а його нескриптований виконуваний файл не має відповідних можливостей, встановлених у своїх метаданих файлу (наприклад, якщо сценарій python вимагає можливості, тоді можливість знадобиться бути в інтерпретаторі python, зазначеному в рядку shebang).
Зауважте, що деяким командам, які потребують доступу до кореня, не потрібно щось на зразок, sudo
тому що у своєму виконуваному файлі встановлено біт SUID. Цей біт змушує виконуваний файл виконуватись як власник (як правило, root), коли його виконує кожен, хто має доступ. sudo
Сам приклад - зміна користувачів - це пільгова дія, яку потрібно зробити.
EDIT: Я зауважую у вашому запитанні, що у вас може виникнути думка, що ви можете визначити, чи потрібна команда root, перш ніж її запустити. Це не так. Програма іноді може вимагати кореневих привілеїв, а в інший час, і це може бути рішенням, прийнятим програмою через дані, які вона надає під час виконання. Візьмемо для прикладу виклик vim
, просто так, без аргументів, а потім через ряд натискань клавіш і вставлення, сказавши йому написати щось у файл, який він не має дозволу писати, або, можливо, виконує іншу команду, яка сама вимагатиме кореневих привілеїв. Ніщо про команду перед виконанням не може вказувати на те, що вона зрештою вимагатиме кореневого доступу. Це те, що можна визначити лише тоді, коли він намагається зробити щось, що цього вимагає.
У будь-якому випадку, тут є дуже мало прикладів з посилань на сторінку привілеїв root:
- Зробити довільні маніпуляції з UID процесів (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
- Обхід файлів читання, запису та виконання перевірок дозволу. (ЦАП - це абревіатура "дискреційного контролю доступу".)
- Обхідні перевірки дозволів на передачу сигналів (див. Kill (2)). Сюди входить використання операції ioctl (2) KDSIGACCEPT.
- Виконуйте різні операції, пов’язані з мережею:
- конфігурація інтерфейсу;
- адміністрування брандмауера IP, маскування та облік;
- змінювати таблиці маршрутизації;
- Прив’яжіть сокет до привілейованих портів Інтернет-домену (номера портів менше 1024).
- Завантажте та вивантажте модулі ядра (див. Init_module (2) та delete_module (2));
- Встановити системний годинник (settimeofday (2), stime (2), adjtimex (2)); встановити годинник у режимі реального часу (апаратний).
- Виконайте діапазон операцій системного адміністрування, включаючи: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) та setdomainname (2);
- Використовуйте перезавантаження (2) та kexec_load (2).
- Використовуйте chroot (2).
- Підвищити приємне значення (nice (2), setpriority (2)) і змінити приємне значення для довільних процесів;