Ця сторінка потребує супровідник
sudo (англ. substitute user do. дослівно «підмінити користувача і виконати») дозволяє системному адміністратору делегувати повноваження, щоб дати деяким користувачам (або групі користувачів) можливість запускати деякі (або всі) команди c правами суперкористувача або будь-якого іншого користувача, забезпечуючи контроль над командами і їх аргументами.
обгрунтування
Sudo - це альтернатива su для виконання команд з правами суперкористувача (root). На відміну від su. який запускає оболонку з правами root і дає всім подальшим командам root права, sudo надає тимчасове підвищення привілеїв для однієї команди. Надаючи привілеї root тільки при необхідності, використання sudo знижує ймовірність того, що помилка або помилка в виконуваної команді зроблять в системі руйнівні дії.
Sudo може також використовуватися для виконання команд від імені інших користувачів; крім того, sudo логірует все команди і невдалі спроби доступу для аудиту безпеки.
Щоб почати використовувати sudo як непривілейований користувач, його потрібно налаштувати належним чином. Для цього прочитайте розділ про налаштування.
Використання
Користувачі можуть випереджати команди словом sudo. щоб виконувати їх з привілеями суперкористувача (або іншого користувача).
Наприклад, для використання pacman:
Дивіться керівництво по sudo для отримання додаткової інформації.
Виконайте sudo -ll для виведення поточної конфігурації sudo.
Використання visudo
Файл налаштувань / etc / sudoers завжди слід редагувати за допомогою команди visudo. visudo блокує файл sudoers. зберігає зміни в тимчасовий файл і перевіряє, що файл граматично коректним, перед тим як скопіювати його в / etc / sudoers.
важливо:- Вкрай важливо, щоб файл sudoers був без синтаксичних помилок! Будь-яка помилка робить sudo непрацездатним. Завжди редагуйте його тільки за допомогою visudo для запобігання помилок.
- З visudo (8). Зверніть увагу, що це діра в безпеці, оскільки дозволяє користувачеві запускати будь-яку програму, яку він захоче, просто прописавши її в VISUAL або EDITOR.
приклади налаштувань
Налаштування sudo здійснюється додаванням записів в файл / etc / sudoers. Щоб дати користувачеві повноваження супер, коли він вводить sudo перед командою, додайте наступний рядок:
Дозволити користувачеві виконувати всі команди від будь-якого користувача, але тільки на машині з певною назвою хоста:
Надати членам групи wheel доступ sudo:
Щоб не питати пароль у користувача:
Дозволити виконувати тільки конкретні команди і тільки користувачеві на певному хості:
Примітка: Найбільш загальні опції повинні йти на початку файлу, а найбільш приватні - навпаки, в кінці файлу, так як більш нижні рядки скасовують більш верхні. Зокрема, додається рядок повинен бути після рядка% wheel. якщо ваш користувач знаходиться в цій групі.
Дозволити виконувати конкретно певні команди тільки для користувача на певному хості і без пароля:
Докладний приклад для sudoers доступний в / usr / share / doc / sudo / examples / sudoers. Також дивіться посібник з sudoers для отримання більш докладної інформації.
Права доступу до файлів sudoers за замовчуванням
Файл sudoers повинен мати власника root і групу root (0). Права доступу завжди повинні бути встановлені як r - r ----- (0440). Ці права встановлюються автоматично, проте якщо ви випадково зміните їх, вони повинні бути негайно змінені назад, інакше sudo не працюватиме.
Час дії введеного пароля
Можливо, ви захочете змінити проміжок часу, протягом якого sudo діє без введення пароля. Цього легко домогтися додавши опцію timestamp_timeout в / etc / sudoers.
Наприклад, щоб встановити тайм-аут на 20 хвилин:
Порада: Якщо ви хочете щоб sudo завжди вимагав введення пароля, встановіть timestamp_timeout рівним 0. Щоб термін дії пароля ніколи не закінчувався, встановіть будь-яке негативне значення.
Поради та рекомендації
Автодоповнення після натискання Tab в bash
Один тайм-аут на всі сеанси терміналу
Важливо: Це дозволить будь-якому процесу скористатися вашим відкритим сеансом sudo.
Якщо ви не хочете вводити пароль знову кожен раз, коли відкриваєте новий термінал, вимкніть tty_tickets.
Завжди показувати зауваження про безпеку
За замовчуванням, / etc / sudoers налаштований так, що sudo виводить зауваження про безпеку тільки при першому відкритті сеансу:
Щоб це повідомлення відображалося завжди, відредагуйте / etc / sudoers. замініть:
або просто додайте цей рядок, якщо її немає.
змінні оточення
Якщо у вас багато змінних оточення або ви експортували ваші настройки проксі через export http_proxy = ".". коли ви використовуєте sudo, ці змінні не будуть передані у відкритий сеанс, якщо ви не запустите sudo в опцією -E.
Рекомендований спосіб збереження змінних оточення - це прописати їх в env_keep.
перенесення псевдонімів
Якщо у вас встановлено багато псевдонімів, ви могли помітити, що вони не переносяться в сеанс sudo. Однак, це легко виправити. Просто додайте в ваш
/.bashrc або /etc/bash.bashrc рядок:
жартівливі образи
Ви можете конфігурувати sudo так, щоб при введенні неправильного пароля він виводив жартівливі образи замість стандартного повідомлення "Sorry, try again". Знайдіть рядок Defaults в / etc / sudoers і додайте insults в список опції, розділяючи їх комами. Кінцевий результат може виглядати так:
Для перевірки, введіть sudo -K. щоб завершити поточний сеанс і дозволити sudo заново запросити пароль.
пароль суперкористувача
Ви можете конфігурувати sudo так, щоб він запитував пароль суперкористувача замість пароля поточного користувача, додавши targetpw або rootpw в список опцій Defaults в / etc / sudoers.
Щоб не розголошувати пароль root користувачам, ви можете заборонити це певним групам:
Відключення облікового запису root
Ви можете захотіти відключити можливість входу систему користувача root. Без цього атакуючі спочатку повинні будуть вгадати ім'я користувача, сконфигурированного як sudoer, а також пароль цього користувача. Дивіться для прикладу Secure Shell (Русский) # Відключення.
Примітка: Якщо ви вже потрапили в пастку, дивіться Password Recovery (Русский) для отримання допомоги.
Пароль користувача root можна заблокувати за допомогою passwd.
Аналогічна команда розблокує пароль користувача root:
Також ви можете відредагувати / etc / shadow і замінити зашифрований пароль root на "!":
Тоді, щоб задати новий пароль і тим самим розблокувати користувача root:
Щоб gksu використовував sudo за замовчуванням, виконайте:
/.config/kdesurc для kf5 версії kdesu):
або використовуйте наступну команду (використовуйте kwriteconfig5 для kf5 версії kdesu):
Також ви можете встановити kdesudo AUR з AUR. який підтримує покращене автодоповнення по Tab при введенні команди.
Ще один приклад налаштування
Припустимо, ви створили 3 користувачів: admin, devel і joe. Користувач "admin" використовується для journalctl, systemctl, mount, kill і iptables; "Devel" використовується для установки пакетів і редагування налаштувань; "Joe" - користувач, під яким ви увійшли в систему. Щоб дозволити "joe" перезавантажуватися, вимикати систему і використовувати netctl, ми повинні зробити наступне:
Відредагувати /etc/pam.d/su і /etc/pam.d/su-1 Вимагати, щоб користувач був у групі wheel, але нікого в неї не додавати.
Обмежити вхід по SSH для групи 'ssh'. У цю групу буде входити тільки "joe".
Додати користувачів в інші групи.
Встановити права на настройки так, щоб devel міг редагувати їх.
З такими настройками вам практично ніколи не знадобиться входити як привілейований користувач.
"Joe" може приєднатися до свого домашнього WiFi.
"Joe" не може використовувати netctl від імені іншого користувача.
Коли "joe" хоче скористатися journalctl або вбити завислий процес, він може переключитися на потрібного користувача:
Але "joe" не може переключитися на суперкористувача.
Якщо "joe" хоче почати gnu-screen сесію як admin, він може зробити це в такий спосіб:
Налаштування sudo за допомогою вкладених в /etc/sudoers.d файлів
sudo обробляє файли, що містяться в директорії /etc/sudoers.d/. Це означає, що замість того, щоб редагувати / etc / sudoers. ви можете змінювати налаштування в окремих файлах і переміщати їх в цю директорію. Це дає дві переваги:
- Вам не знадобиться редагувати файл sudoers.pacnew;
- Якщо з новим записом буде проблема, ви можете просто знищити відповідний файл, замість необхідності редагувати / etc / sudoers.
Формат записів у цих вкладених файлах такий же, як і в самому файлі / etc / sudoers. Щоб редагувати їх безпосередньо, використовуйте visudo -f / path / to / file. Дивіться розділ Including other files from within sudoers в sudoers (5) для додаткової інформації.
Вирішення проблем
Проблеми з TTY через SSH
За замовчуванням SSH не виділяє tty при виконанні віддаленої команди. Без tty sudo не може відключити відображення пароля при його введенні. Ви можете скористатися ssh опцією -tt. щоб змусити його виділяти tty (або -t двічі).
Defaults опція requiretty всього лише дозволяє запускати sudo користувачам, якщо вони мають tty.
Показати привілеї користувача
Ви можете дізнатися якими привілеями володіє конкретний користувач наступною командою:
Або дізнатися ваші власні привілеї командою:
накладення umask
Sudo накладає на значення umask користувача свою власну (яка за умовчанням встановлена в 0022). Це запобігає sudo від створення файлів з більш ліберальними правами доступу, ніж це дозволяє umask користувача. Незважаючи на те, що це розумне значення за замовчуванням, якщо не використовується змінена umask, це може привести до ситуації, коли програма, запущена через sudo може створювати файли з правами доступу відмінними від тих, які створюються при запуску програми безпосередньо суперкористувачем. Для виправлення таких помилок sudo надає можливість виправити umask, навіть якщо бажана umask більш ліберальна, ніж встановлено в umask користувача. Додавши такі рядки (використовуйте visudo) ви зміните поведінку sudo за замовчуванням:
Це встановить sudo umask в umask суперкористувача за замовчуванням (0022) і перевизначити поведінку за замовчуванням, завжди використовуючи зазначену umask і незалежно від umask користувача.
Опції за замовчуванням
Дивіться [1] список опцій (витягнутий з вихідного коду версії 1.8.7) представлений в форматі, оптимізованому для sudoers.