Що визначає, які команди Linux потребують кореневого доступу?


23

Що визначає, які команди Linux потребують кореневого доступу? Я розумію причини, чому бажано, щоб, скажімо, apt-getвимагати rootпільги; але що відрізняє ці команди від решти? Це просто питання власності та виконання дозволів виконуваного файлу?


2
Це головним чином функція того, який файл вони торкаються та які функції вони викликають.
Федеріко Клез Куллока

9
Деякі додатки потребують доступу до файлів / dirs, що належать root. Отже, вони просто дзвонять openі отримують "дозвіл відмовлено". Деякі програми перевіряють getuidі припиняють роботу, якщо вони не викликаються коренем. Деякі фізично належать кореням, і лише власник може виконувати їх (див. chmod). Якщо ви запитуєте, чи є в заголовку програми якийсь знак "потрібен корінь" - відповідь - ні. Немає такого
afaik

1
ps: декілька системних дзвінків (наприклад, прив'язка до відомого порту <1024) також можуть потребувати кореневого доступу.
користувач996142

apt-get зовсім не вимагає root. Це в каталозі / usr / bin, див. Askubuntu.com/a/440791/169736
Braiam

Ви можете уточнити, що ви маєте на увазі під "вимагати" тут. Ви маєте на увазі, що програма не буде виконуватись, якщо ви не root (або не маєте прав доступу до sudo), або що вона повинна мати root, щоб правильно виконувати свою роботу?
jamesqf

Відповіді:


15

У 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)) і змінити приємне значення для довільних процесів;

32

Це , головним чином , питання про те, що інструмент або програма робить . Маючи на увазі , що непрівілігірованной може торкнутися тільки ті файли , які він володіє або має доступ до будь-який інструмент, який повинен бути в змозі отримати свої пальці в усьому потрібно доступ суперкористувача для того , щоб зробити річ , яку він робить. Короткий зразок речей, які можуть потребувати доступу суперпользователя, включає, але не обмежуються ними:

  • Відкриття прослуховувальної розетки TCP на порт нижче 1024
  • Зміна конфігурацій системи (наприклад, що-небудь в /etc)
  • Додавання нових глобально доступних бібліотек ( /libі /usr/lib) або бінарних файлів ( /bin, /usr/bin)
  • Торкання будь-яких файлів, які не належать користувачеві, який робить дотик, які не мають достатньо дозвільного режиму
  • Зміна власності на файли інших користувачів
  • Визначення пріоритетів процесу (наприклад renice)
  • Запуск або зупинка більшості послуг
  • Конфігурація ядра (наприклад, коригування простоти)
  • Регулювання квот файлової системи
  • Запис на «повні» диски (більшість файлових систем залишають місце для кореневого користувача)
  • Виконання дій, як інші користувачі

4
Користувачі, що не користуються коренем, "змінюють пріоритети процесу" можуть змінювати смаки, бути приємнішими. Єдине, чого вони не можуть зробити - це бути менш приємним.
Брайам

1
Я знаю, що цей список не є повним, але я вважаю дуже важливим завданням, яке можуть виконувати лише суперпользователи - це себе представляти - або просто входити в систему як - інші користувачі.
фігаг

Я скоригував пункт щодо пріоритетів процесу та додав "Виконання дій як інші користувачі". Сподіваємось, що вистачить часу та коментарів, цей список стане більш вичерпним.
DopeGhoti

0

Я думаю, що це відповідно до ідентичності користувача, щоб перевірити дозволи, а не відповідно до наказу про поділ дозволів. Файли та користувачі привілейовані, і команди не слід розділяти.


3
Я не хочу звучати грубо, і я розумію, що англійська мова може бути не вашою першою мовою, але я взагалі не розумію цієї відповіді, як те, що вона навіть намагається сказати. "відповідність" означає "договір" або "відповідність"; Я не бачу, як це можна використовувати з "особою користувача". Що ви маєте на увазі "замовлення на поділ дозволів"? "ділити" означає "відокремити". Чий "замовлення"? Як файли "привілейовані", коли вони не є чимось, що може діяти, щоб використовувати будь-яку привілей? Я думаю, що я можу зрозуміти, що "команди не слід розділяти" в контексті цього питання, але це все. Насправді це здається нерозбірливим.
JoL

@JoL Я вважаю, що "наказ" є неправильним перекладом і повинен бути "командою", яка дозволяє провести інший аналіз цього речення. Дещо незграбно сформульовано якнайбільше використовувати те, що в цій відповіді: "Я думаю, це відповідно до того, як ідентифікація користувача використовується для перевірки дозволів, що дозволи не розділені відповідно до команди. Привілеї стосуються файлів та користувачів. не бути розділеним для команд. " Це все ще не надто ясно, але це має для мене трохи більше сенсу, ніж це для вас. Я сподіваюся, що мій коментар допоможе комусь повністю зрозуміти цю відповідь і відредагувати її у формі
hvd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.