sudoers - вимагається просте пояснення


24

Щоразу, коли мені хочеться запустити щось, що вимагає від мене sudoerзанадто багато разів, мені потрібно гугл для форматування, /etc/sudoersщоб знову нагадати мені, що саме є правильним способом його написання.

Тепер у моєму sudoersфайлі я бачу різні стилі написання , що є наслідком різних результатів google протягом місяців. Я також помітив, що другий приклад (нижче), здається, працює в XFCE, але не в Кориці (Gnome 3). Це може бути абсолютно не пов'язане між собою, але, тим не менш, я хотів би дізнатися раз і назавжди, що є правильною граматикою рядка Судора і яка різниця між наведеними прикладами?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Також для чого всі ALL? Один користувач, одна команда, але мені потрібно використовувати ALLключове слово до трьох разів? Я роблю це неправильно?

Звичайно, опускання NOPASSWD:змушує вас ввести пароль до того, як вам буде дозволено запустити команду, але одна точка плутанини - це використання, =і :для остаточної команди, що є предметом рядка, може бути попередньо будь-який= , :, , або ), заплутану граматику для подібної семантики.


3
Я також відчуваю справжнє розчарування sudoersсинтаксисом. Читання чоловічої сторінки було ще більш засмучуючим: вона описує так звану стисну та точну мову EBNF, приклади вичерпно довгі. Тому я не здивований, що знайшов тут стільки тем щодо цього файлу.
m-ric

1
Дякую за це Хотіли задати це питання ще з тих пір, як я натрапив на файл
судорів

Відповіді:


35

Це більше, ніж просто користувач і команда:


redsandro host=(user:group) tag:commands
  • hostвказує імена хостів, для яких діє цей рядок. Якщо ви не обмінюєтеся файлом asudoers між різними хостами, яким потрібні різні правила, використовуючи спеціальне значення, що ALLозначає "всі хости" - це хороший вибір.

  • userвизначає, яких користувачів ви можете використовувати з -uпараметрами для запуску команди. Якщо ви пропустите це, ви не можете використовувати цю -uопцію.

  • groupвизначає, які групи можна використовувати за допомогою -gпараметрів. Якщо ви пропустите його, ви не можете використовувати цю -gопцію.

І те, userі groupособливе значення розуміють ALLяк "усі користувачі / групи"

Якщо опустити всі , (user:group)що ви не можете використовувати -uі -gале тільки виконати команду з правами адміністратора.

  • tag дозволяє вказати деякі варіанти, наприклад NOPASSWD

Отже, у першому прикладі ви можете запустити команду як root, але не можете використовувати -uі-g як будь-який інший користувач або групу.

З прикладом 2. Ви можете запустити команду як root або використовувати її -uдля запуску як будь-який інший користувач.

За допомогою команди 3. Ви можете запустити команду як root або використовувати -uабо -gзапустити команду як будь-який інший користувач або групу.


Це саме те, що я шукав. Я прийняв вашу відповідь і дякую за ваші зусилля.
Редсандро

1
Заключна думка, чи можу я використовувати 127.0.0.1або localhostяк hostтривіальну додаткову безпеку?
Редсандро

5
На сторінці написано: "Note sudo перевіряє лише фактичні мережеві інтерфейси; це означає, що IP-адреса 127.0.0.1 (localhost) ніколи не збігатиметься. Також ім'я хоста "localhost" відповідатиме лише тому, що це власне ім'я хоста, що, як правило, стосується лише немережевих систем. "
Флоріан Дієш

1
Спасибі. Для мене немає імені хоста, тим більше, що я хочу вміти копіювати sudoersfile на кілька машин. ALLЦе є.
Редсандро

9

Розберемо це окремо:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro - це ім'я користувача, на яке ми даємо дозвіл. Поставте% на фронті, щоб він застосовувався до групи.

ВСЕ - це назва цього правила. Судонери можуть зробити набагато більше, ніж просто надати глобальні дозволи. Ось де все ускладнюється.

= не потребує пояснень

ВСЕ: ВСЕ читається як (who_to_run_it_as: what_group_to_run_it_as). Таким чином ви можете дозволити запуск команди, але тільки в контексті конкретного користувача або групи.

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

/ path / to / command дозволяє вказати конкретні команди path_to_commmand, another_command

Варто пам’ятати, що хоча sudo в основному використовується домашніми користувачами для переходу до кореневих привілеїв, воно може бути і використовується для контролю доступу до певних команд набагато більш детальним способом.


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