Sudo - запуск команди від імені іншого користувача

Назва
sudo, sudoedit - запуск команди від імені іншого користувача.

синтаксис
sudo -K | -L | -V | -h | -k | -l | -v
sudo [-HPSb] [-a auth_type] [-c class | -] [-p prompt] [-u username | #uid]
sudoedit [-S] [-a auth_type] [-p prompt] [-u username | #uid] file [. ]

опис
sudo дозволяє дозволеним користувачам запускати команди, як привілейований користувач або інший користувач, визначений у файлі sudoers. Справжній і ефективний uid і gid встановлюються відповідно до використовуваним користувачем, який вказаний у файлі passwd і вектор групи заснований на файлі групи (поки не буде використана опція -P). Якщо користувач - root, або, якщо цільової користувач той же, що і викликається, пароль не потрібно. В інших випадках, sudo вимагає, щоб користувачі, аутентифицироваться себе з паролем за замовчуванням (ПРИМІТКА: в конфігурації за замовчуванням, це пароль користувача, а не пароль root'а). Як тільки користувач буде аутентифікований, відмітка часу оновиться, а потім користувач може використовувати sudo без пароля, на короткий період часу (5 хвилин, якщо не змінено в файлі sudoers). Мається на увазі, що викликаний sudoedit, з опцією -e (описано нижче).

Якщо sudo запущений користувачем root і змінна SUDO_USER встановлена, sudo буде використовувати це значення, для визначення того, хто є справжнім користувачем. Дана можливість може бути використана користувачем для протоколювання команд через sudo, навіть коли викликаний root shell. Утиліта так само підтримує -e прапор, який буде корисний, навіть якщо буде запущено через sudo-скрипт або програму. Зауважте, що пошук все ще ведеться для root'а, а не для користувача певного в SUDO_USER.
sudo може протоколювати всі вдалі і невдалі спроби (так само як і помилки) через syslog (3), через log файл, або обома способами. За замовчуванням, sudo веде протокол через syslog (3), але ця можливість може бути змінена під час конфігурації, або через файл sudoers.

Опції
sudo підтримує такі опції командного рядка:
-H
Опція -H встановлює змінну оточення HOME, в домашній каталог цільового користувача (за умовчанням root) як визначено у файлі passwd (5). За замовчуванням, sudo не змінюйте HOME (дивіться set_home і always_set_home в sudoers (5))

-K
Опція -K (совершенно верно - kill), така ж як і -k, за винятком того, що вона прибирає призначену для користувача позначку часу Так само, як і -k ця опція не вимагає пароля.

-L
Опція -L (список) виведе список параметрів, які можуть бути встановлені в рядку Defaults з невеликим описом для кожного. Ця опція корисна в поєднанні з grep (1).
-P
Опція -P, змушує sudo зберігати викликається вектор групи користувача незмінним. За замовчуванням sudo буде форматувати вектор групи, зі списку групи в якій знаходиться користувач. Справжній і ефективний ідентифікатор групи, однак, все ще збігається з цільовим користувачем.

-a
Опція -a (тип аутентифікації) змушує sudo використовувати певний тип аутентифікації, коли перевіряється користувач, як зазначено в /etc/login.conf. Системний адміністратор може вказати список sudo-специфічних методів аутентифікації, шляхом додавання "auth-sudo '' рядки в /etc/login.conf. Ця опція доступна тільки системам, які підтримують аутентифікацію BSD, а sudo налаштований з опцією --with-bsdauth.

-b
Опція -b (фоновий процес) говорити sudo виконувати дану комманду фоновим процесом. Врахуйте, що якщо ви використовуєте -b опцію, ви не можете використовувати shell job control для управління процесом.

-c
Опція -c (клас) змушує sudo запускати певну команду з обмеженням ресурсів, зазначених у login class. Аргумент class може бути так же ім'ям класу як зазначено в /etc/login.conf, або символом "-". Визначення class показує, що команда повинна бути запущена з обмеженими можливостями логіна для користувача запустив команду. Якщо аргумент class визначає існуючий користувальницький клас, команда повинна запускатися як root, або команда sudo повинна бути запущена з оболонки яка належить root'у. Опція доступна тільки на системах з класами логіна BSD, на яких sudo налаштована з опцією --with-logincap.

-h
Опція -h (допомога) змушує sudo виводити на екран підказку і завершувати роботу.

-i
Опція -i (симуляція логіна) запускає shell певний в запису в passwd (5) користувача, від якого запускається команда. Ім'я аргументу команди, що віддається shell'у починається з -, що змушує shell запускатися як login shell. sudo намагається змінити домашню директорію користувача перш, ніж запустити shell. Так само инициализируется оточення, залишаючи TERM незміненим, встановлюючи HOME, SHELL, USER, LOGNAME і PATH і знімає всі інші змінні оточення. Врахуйте, це відбувається тому, що shell використовує визначення до того, як файл sudoers буде парсірован, установка runas_default в sudoers вкаже який shell користувачеві запустити, але не скаже який shell в даний момент запущено.

-k
Опція -k змінює позначку часу користувача, установкою часу в цей момент. На наступний запуск, sudo запитає пароль. Опція не вимагає пароля і додана для можливості відкликання користувачами дозволів sudo з .logout файлу.

-l
Опція -l (список) виведе список дозволених (і заборонених) команд для користувача даного хоста.

-p
Опція -p (prompt) дозволяє скасовувати рядок введення пароля за замовчуванням і використовувати свою власну. Символ відсотка ( "%") та наступні послідовності підтримуються:

% U розширення до імені логіна, що викликається користувача.

% U розширення до імені логіна користувача чия команда буде запущена.

(За замовчуванням root)

% H розширення до локального імені хоста, без доменного імені.

% H розширення до локального імені хоста, включаючи доменне ім'я (включається якщо на ім'я хоста машини, повністю або опція fqdn sudoers встановлена).

%% два символу %% перетворюються в один%

-s
Опція -s (shell) запускає shell певний в змінної SHELLS. якщо вона встановлена, або shell певний в файлі passwd (5)

-u
Опція -u (користувач) змушує sudo запускати певну команду, що не root користувач. Для визначення uid замість username, використовуйте #uid. Майте на увазі, що якщо опція targetpw встановлена ​​(див. Sudoers) неможливо запустити команду з uid, який відсутній в списку бази даних паролів.

-v
Якщо задана опція -v, sudo змінить призначену для користувача позначку часу, prompting for the user's password if necessary. Опція продовжує таймаут sudo на наступні 5 хвилин (або на той час яке задано в sudoers), але не запускає команду.

-- Прапор показує, що sudo повинна припинити обробляти аргументи командного рядка. Корисно в поєднанні з прапором -s.

Після успішного запуску програми, яке значення sudo буде повертається значенням програми яка запустилася. Інакше, sudo завершить роботу зі значенням 1, якщо присутній помилка в кофигурации / правах доступу або sudo не може запустити цю команду. Рядок з помилкою буде відправлена ​​в stderr. Якщо sudo не може stat (2) одну запис або більше в призначеному для користувача PATH, помилка буде виведена в stderr. У нормальних обставинах цього не повинно відбуватися. Поширена причина повернення stat (2) "permission denied" коли ви запускаєте automounter і одна з директорій в вашому PATH, на машині, яка в даний момент недоступна.

sudo намагається бути обережною, коли запускає зовнішні команди. Змінні, які контролюють, коли динамічне завантаження і прив'язка буде завершена, як будуть використовуватися для перешкоди програмі яку завантажує sudo. Для того, що б перемогти це, змінні окурженія LD_, _RLD_, SHLIB_PATH (тільки HP-UX), і LIBPATH (тільки AIX) видаляються з оточення, проходячи всі запущені команди. sudo, так само, видаляє змінні IFS, CDPATH, ENV, BASH_ENV, KRB_CONF, KRBCONFDIR, KRBTKFILE, KRB5_CONFIG, LOCALDOMAIN, RES_OPTIONS, HOSTALIASES, NLSPATH, PATH_LOCALE, TERMINFO, TERMINFO_DIRS і TERMPATH, оскільки вони так само можуть створити загрозу. Якщо змінна TERMCAP і ім'я шляху встановлені, вони теж ігноруються. До того ж, якщо змінні LC_ або LANGUAGE містять символи / або% вони ігноруються. Змінні оточення зі значенням починається з () видаляються, оскільки вони можуть бути інтерпретовані як функції bash. Якщо sudo була скомпільована з підтримкою SecurID, змінні VAR_ACE, USR_ACE і DLC_ACE теж очищаються. Список змінних оточення, які скидає sudo міститися у висновку sudo -V коли він запущений від root'а.

Для запобігання спуфинга команд, sudo перевіряє останні ``. '' And `` '' (обидві скидають поточну директорію), коли шукає команду в PATH користувача (якщо одна або обидві в PATH). Врахуйте, оскільки дійсне оточення PATH, що не модифікується, воно проходить незміненим до програми, яку запускає sudo.

З міркувань безпеки, ваша операційна система підтримує загальні бібліотеки і не вимикає бібліотеки в шляху пошуку, який визначив користувач, для setuid програм (більшості), ви повинні використовувати опцію лінковщік, яка вимикає таку можливість лінковки або лінковані sudo статично.

sudo перевірить власника і позначку часу директорії (/ var / run / sudo за замовчуванням) і буде ігнорувати вміст директорії, якщо вона не належить root'у і доступна для запису не тільки root'у. У системах, які підтримують не root'ових користувачів для віддачі файлів через chown (2) якщо позначка часу директорії знаходиться в директорії доступною для запису всім (тобто / tmp), і користувача може створювати позначку часу директорії перш ніж sudo запуститься. Тому sudo перевіряє власника і стан директорії і її вмісту, через що збиток, який може бути заподіяна полягає в 'переховування' файлів, шляхом переміщення їх в директорію з відміткою часу. Це може бути небажано, тому як, будучи одного разу покладеними в директорію з відміткою часу, що належить root'у і недоступною для інших користувачів. Користувач, складаються файли туди, може не мати можливості повернути їх назад. Для уникнення цього, ви можете використовувати директорію, яка не доступна на запис "всьому світу" для відміток часу (/ var / adm / sudo наприклад) або створіть / var / run / sudo з належним власником (root) і дозволами (0700) в файлах системної завантаження.

sudo не дотримуватиметься установки відміток часу в майбутньому. позначки часу з датою вище ніж current_time + 2 * TIMEOUT будуть ігноріроватся, і sudo запротоколює цю ситуацію і поскаржиться. Це зроблено для того, що б утримати користувача від створення власних оцінок часу з підробленою датою в системах, які дозволяють користувачам віддавати файли.

HOME
У режимі -s або -H (або якщо sudo був налаштований з опцією --enable-shell-sets-home) встановлює домашню директорію цільовим користувачеві.

PATH
встановлюється в нормальне значення якщо sudo був налаштований з опцією --with-secure-path.

SHELL
використовується для оперделенной shell'а для запуску з опцією -s

SUDO_PROMPT
використовується запрошення введення пароля за замовчуванням.

SUDO_COMMAND
Встановлює команду запускається sudo

SUDO_USER
Встановлює логін користувача, який викликав sudo.

SUDO_UID
Встановлює uid користувача який викликав sudo.

SUDO_GID
Встановлює gid користувача який викликав sudo

SUDO_PS1
якщо визначена, PS1 буде встановлено в власне значення.

USER
встановлює цільового користувача (root до тих пір поки -u опція визначена).

/ Etc / sudoers - список хто що може запускати
/ Var / run / sudo - директорія містить позначки часу

Примітка: приклади нижче, припускають налаштований sudoers (5)
Для отримання списку файлів з нечитаною директорії:
$ Sudo ls / usr / local / protected
Для отримання списку домашньої директорії користувача yazza на машині, де файлова система тримає

yazza не передавати root'у:
$ Sudo -u yazza ls

yazza
Для редагування файлу index.html як користувач www:
$ Sudo -u www vi

Для виключення комп'ютера:
$ Sudo shutdown -r +15 "quick reboot"

Зробити використовуваним список директорій в розділі / home.
Примітка: управління командами йде в sub-shell'е для можливості роботи cd і перенаправлення файлів.
$ Sudo sh -c "cd / home; du -s * | sort -rn> USAGE"

Дивіться також
grep (1), su (1), stat (2), login_cap (3), sudoers (5), passwd (5), visudo (8)

Зовсім не обов'язково запускати cd команду безпосередньо через sudo, тобто:

$ Sudo cd / usr / local / protected

з того моменту, коли команда завершується батьківський процес (ваш shell) буде тим же самим. Для більш детальної інформації дивіться EXAMPELS.

Якщо користувач може sudo ALL, ніщо не зупинить його від створення своєї власної програми, яка дає йому root shell незалежно від будь-якого '!' в специфікації користувача.

Запуск скриптів shell через sudo може виявити схожі помилки ядра, які роблять setuid shell скрипти небезпечними на деяких операційних системах (якщо ваша OS містить / dev / fd / директорію, setuid shell скрипти в основному безпечні).