Виконати sudo без пароля?


292

Натхненний цим питанням ….

Я єдина людина, яка користується моєю системою з 12.04.
Кожен раз, коли я видаю sudoкоманду; система запитує пароль користувача (що добре по-своєму).
Однак я думав; без активації кореневого рахунку; як я можу виконувати команди sudo, які не запитують пароль користувача для автентифікації.

ПРИМІТКА: Я хочу виконати команду sudo без автентифікації через пароль; тільки тоді, коли вони виконуються через термінал.
Я не хочу видаляти цей додатковий рівень безпеки з інших функцій, наприклад, використовуючи "Центр програмного забезпечення Ubuntu" або виконуючи скрипт bash, перетягуючи файл something.sh до терміналу.


2
тож вам потрібно лише запитати пароль у терміналі та інші речі ні, або навпаки ?! в обох напрямках, я вважаю, що це є порушенням безпеки
Dr_Bunsen

Я хочу, щоб система не могла запитувати пароль лише в терміналі ... для будь-яких інших цілей система повинна запитати пароль. Ця вимога є лише тимчасовою, і вона повинна використовуватися під час налаштування n встановлення нових серверів .. під час встановлення нових серверів, вона дійсно потребує годин налаштування за допомогою команд sudo .. видача пароля кожні 15 хв. є головний біль. Я не хочу використовувати root-акаунт.
Бхавеш Діван

Потрібно прочитати дискусію на: askubuntu.com/questions/135428/…
david6

1
Напевно ви можете продовжити час очікування. Крім того, якщо ви часто робите нові налаштування сервера, вам варто подумати про автоматизацію процесу. Вам не платять за тип, вам платять за вирішення проблем і за те, щоб виконати ш * т.
MauganRa

Відповіді:


82

sudo -i це шлях, якщо ви не хочете вводити пароль кожні 10 хвилин, роблячи модифікації у вашій системі (або інших системах), і ви не хочете змінювати жодні системні файли.

Він переключить вас на root, використовуючи свій sudoпароль користувача, коли ви закриєте консоль або введете exitзнову до свого звичайного користувача.


2
Чи буде це правдою, що я ввожу пароль лише один раз ... і до тих пір, поки я не вийду; погода 5 год. або 15 .... система не запитує автентифікацію паролем при видачі будь-якої команди sudo.
Бхавеш Діван

2
@ Z9iT, поки ви не введете exitабо поки не закриєте вікно емулятора терміналу.
Бруно Перейра

2
Дякуємо .. Прийняв цю відповідь, тому що вона сервірує призначення видачі команд sudo без автентифікації паролів протягом n-годин до моменту, коли ми не вийдемо .. Не змінення системних файлів є плюсом.
Бхавеш Діван

3
Це насправді не дає відповіді на питання, оскільки вам потрібно ввести пароль, щоб стати кореневим в цей момент.
Адам Ф

2
Не якщо ви запускаєте віртуальну машину в захищеному середовищі, і ви просто хочете, щоб річ щось зробила негайно, і ви не хочете мати справу з паролями. Ця відповідь не дає відповіді на запитання, хоча це, мабуть, корисна інформація. Я згоден з Адамом F
Джонатаном Комаром

572

Ви можете налаштувати так, sudoщоб ніколи не запитували пароль.

Відкрийте вікно терміналу та введіть:

sudo visudo

У нижній частині файлу додайте такий рядок:

$USER ALL=(ALL) NOPASSWD: ALL

Де $USERваше ім’я користувача у вашій системі. Збережіть і закрийте файл sudoers (якщо ви не змінили редактор терміналів за замовчуванням (знаєте, чи є), натисніть ctl + x, щоб вийти, nanoі він запропонує вам зберегти).

Станом на Ubuntu 19.04, файл тепер повинен виглядати приблизно так

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Після цього ви можете ввести sudo <whatever you want>вікно терміналу, не вимагаючи пароля.

Це стосується лише використання sudoкоманди в терміналі. Вам буде запропоновано ввести пароль, якщо ви (наприклад) спробуєте встановити пакет із програмного центру

gui пароль підказка


15
Рекомендується використовувати sudo visudoзамість редагування безпосередньо. Також зміна дозволів судорів може заблокувати себе. Під час редагування vimвикористовуйте :wq!для запису файли лише для читання та закрийте редактор. Таким чином, дозволи 644 не потрібні.
Лекенштейн

8
Це серйозний ризик для безпеки, кожен, хто приймає будь-який обліковий запис з правами sudo, може взяти під контроль всю систему та заблокувати будь-який подальший доступ до цього комп'ютера, вкрай серйозно не рекомендується.
Бруно Перейра

6
@ wil93 вам не вистачає суті: скрипт, який вимагає sudo install crapware, не запитає пароль у цьому випадку і може зіпсувати все, що у вас є, і вам не потрібно бути фізично поруч із машиною, щоб розповсюджувати сценарії востаннє, коли я перевіряв. .. Це лише приклад.
Бруно Перейра

12
@BrunoPereira Якщо ви плануєте запускати ненадійні сценарії , то , що це ризик безпеки (навіть якщо команда sudo запитує пароль, шкідливий скрипт може завжди зробити rm -rf ~балуватися досить деякі речі). Загалом, я б не називав «серйозним ризиком безпеки» простим видаленням підказок пароля з sudo.
wil93

5
Погодьтеся з @ wil93. Під час запуску ненадійного сценарію введення пароля - це не більше шансу скасувати процес, хоча я сумніваюся, що для більшості людей він марний. Суть у тому, що ви знаєте, звідки і від чого сценарій.
Чад

36

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

sudo visudo

Це відкриває редактор і вказує його на файл sudoers - Ubuntu за замовчуванням нано, інші системи використовують Vi. Тепер ви супер користувач, який редагує один з найважливіших файлів у вашій системі. Без стресу!

(Vi специфічні вказівки, зазначені в (vi!) . Ігноруйте їх, якщо ви використовуєте нано.)

Використовуйте клавіші зі стрілками для переміщення до кінця Defaultsрядка.

(vi!) натисніть клавішу A (з великої літери "а") для переміщення в кінці поточного рядка та переходу в режим редагування (додавання після останнього символу рядка).

Тепер введіть:

,timestamp_timeout=X

де X - закінчення закінчення часу в хвилинах. Якщо ви вкажете 0, вам завжди буде запропоновано пароль. Якщо вказати негативне значення, час очікування ніколи не закінчиться. Напр Defaults env_reset,timestamp_timeout=5.

(vi!) натисніть Escape, щоб повернутися до командного режиму. Тепер, якщо ви задоволені редагуванням, введіть, :w Enterщоб написати файл та :q Enterвийти з vi. Якщо ви помилилися, можливо, найпростішим способом є повторне завантаження з початку, вихід без збереження (натисніть, Escapeщоб увійти в режим команд), а потім введіть: q! Enter.

Натисніть Ctrl+ X, а Yпотім, Enterщоб зберегти файл і вийти з nano.

Для додаткової інформації ви можете прочитати сторінки керівництва sudoers та vi.

man sudoers
man vi

Скинути значення тайм-ауту за допомогою:

sudo -k

Ці інструкції полягають у видаленні запиту на введення пароля при використанні команди sudo. Команду sudo все ще потрібно використовувати для доступу до кореня.

Відредагуйте файл судорів

Відкрийте вікно терміналу. Введіть sudo visudo. Додайте наступний рядок до кінця файлу (якщо його немає в кінці, його можна анулювати наступними записами):

<username> ALL=NOPASSWD: ALL

Замініть <username>своїм іменем користувача (без поля <>). Це припускаючи, що Ubuntu створив групу з тим же ім’ям, що і ваше ім’я користувача, що є типовим. Ви можете по черзі використовувати користувачів групи або будь-яку іншу таку групу, в якій ви перебуваєте. Просто переконайтеся, що ви в цій групі. Це можна перевірити, перейшовши до Система -> Адміністрація -> Користувачі та групи.

Приклад:

michael ALL=NOPASSWD: ALL

Введіть ^ X ( Ctrl+ X) для виходу. Це має запропонувати можливість зберегти файл, введіть Y для збереження.

Вийдіть, а потім увійдіть в систему. Тепер це повинно дозволяти виконувати команду sudo, не вимагаючи введення пароля.

Кореневий рахунок

Увімкнення кореневого облікового запису

Увімкнення кореневого облікового запису рідко необхідно. Практично все, що потрібно зробити як адміністратор системи Ubuntu, можна зробити через sudo або gksudo. Якщо вам дійсно потрібен постійний кореневий логін, найкращою альтернативою є моделювання оболонки кореневого входу за допомогою наступної команди:

sudo -i

Однак якщо вам потрібно ввімкнути кореневі логіни, ви можете це зробити так:

sudo passwd root

Повторне відключення вашого кореневого облікового запису

Якщо з якоїсь причини ви ввімкнули свій кореневий обліковий запис і хочете його знову відключити, використовуйте таку команду в терміналі:

sudo passwd -dl root

Загальносистемне групове судо

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Вийдіть, а потім знову ввійдіть.

Скинути тайм-аут sudo

Ви можете переконатися, що sudo запитує пароль наступного разу, запустивши:

sudo -k

Я опублікував це, перш ніж додав, для системного способу цього та інших читайте тут:
user209328

Це була пізня відповідь, але є найбільш вичерпною з точки зору варіантів, які вона дає вам.
jenming

1
Гм, на Ubuntu 18.04 MATE це працює чудово, в той же час, як і на Ubuntu 18.04 GNOME спричинив у мене зморшки із проблемою "ім'я користувача не є у файлі sudoers ...". Ось чому так багато pple просто ненавидять Linux - адже це рідко "причинно": D Про всяк випадок, коли U натрапить
Пітер

Змінна середовища EDITOR може встановити редактор, який використовується ... наприклад, sudo env EDITOR=/bin/nano visudoдля надійного редагування sudoersв нано. (для редагування можна використовувати також оновлення)
Герт ван ден Берг

29

Кращим способом надання індивідуальних (або групових) дозволів буде додавання файлів під /etc/sudoers.d

Це відокремлює локальні зміни від політики за замовчуванням та економить час у разі зміни файлу sudoers розповсюдження.

Щоб зробити поточно зареєстрованого користувача aa sudoer і sudoне запропонувати їм ввести пароль, використовуйте

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

це створить файл під назвою /etc/sudoers.d/$USER(де $USERім'я користувача, до якого ви ввійшли, як при запуску цієї команди), і зрозуміти, яким користувачам надано дозвіл.

Якщо ви хочете зробити це для іншого користувача, просто замініть обидва екземпляри на $USERякесь інше ім’я користувача у наведеній вище команді.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Аналогічно один файл можна використовувати для управління кількома директивами:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Див. /etc/sudoers.d/READMEТа man sudoersдля отримання додаткової інформації.


команда echo не вдалася, хоча я корінь. але я додав файл і відредагував його безпосередньо, і це працювало на останній ubuntu (тоді як додавання користувача до судерів прямо не робилося!)
скапуйте

1
Правильний спосіб - це зробити це teeкомандою.
woto

1
Це кращий спосіб, який працює: sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'за нимsudo chmod 440 /etc/sudoers.d/$(logname)
парадороїд

У sudo ... >fileоболонці перенаправлення виконується в оригінальній оболонці, тому воно могло працювати лише в кореневій оболонці.
Костянтин Пелепелін

метод трійника, без дозволу:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Карсон Ip

7

Приємний однолінійний інструмент для видалення запитів sudo для поточного користувача

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
Я думаю, що ти можеш просто зробити:, потрібні echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudoлише зрештою (і навіть не знадобляться в конфігурації за замовчуванням, IIRC). visudosudoenv
муру

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

Дякуємо за відгук! Я просто швидко намагався виконати сценарій, якщо вилучення підказки пароля sudo в моїй мінливій віртуальній машині випробувань. Не соромтеся запропонувати поліпшення :)
Ерік Лендрі

Потрібно sudo chmod 440 /etc/sudoers.d/$(logname)виправити дозволи файлів, як зазначено в README у цьому каталозі.
парадороїд

6

Звичайно, те, що ви хочете зробити, не рекомендується. Через деякий час, хоча введення sudoстає настільки автоматичним, що його корисність зменшується.

Інший підхід - залишити свій файл sudoers таким, яким він є, і, роблячи щось складне для ваших непересічних сотень серверів, увійдіть sudo bash. Це дасть вам оболонку, яка буде автентифікована як root, поки ви не вийдете з неї.


12
sudo -sабо sudo -i, мабуть, обидві кращі ідеї, ніж sudo bashтому, що вони забезпечують здорове оточення та речі.
Дараель

2
"Здоров'я і речі" взагалі не належать до сфери "кращих ідей", чи може хтось дати технічне пояснення, чому sudo -s або sudo -i краще, ніж sudo bash? (Редагувати: Ось відповідне питання askubuntu.com/questions/376199/… )
Nuzzolilo

2
Для правильного виконання sudoкоманди потрібна кількість команд (особливо для цього sudo pip ...) sudo -H(встановити HOME). В інших випадках sudo -Eможе знадобитися (зберегти env). Біг, sudo bashймовірно, буде працювати в більшості випадків, але не у всіх, і коли цього не стане, не буде зрозуміло, чому.
Майкл

1
sudo su - традиційний спосіб переключення ролей і почати виконувати функцію адмінсистеми.
користувач1656671

3

Від Super User приходить хороша відповідь:

Використовуйте перемикач -S, який читає пароль із STDIN:

echo <password> | sudo -S <command>

Замініть <password>своїм паролем.


2
Це не рекомендується, оскільки пароль залишається чітким у файлі історії оболонки. Застосовуйте замість цього будь-яке інше рішення.
HappyCactus

1
@HappyCactus ви можете розмістити один раз пробіл, echoщоб він не відобразився в історії?
WinEunuuchs2Unix

Так, це дозволить уникнути піддавання паролю ясного тексту файлу історії. Але ти завжди пам’ятаєш додати його? :-)
HappyCactus

@HappyCactus Я схильний додавати провідний простір випадково, а потім дратуюся, коли історію неможливо згадати :) У всякому разі, у Супер Користувача є 129 надбавок, тому я думаю, що це гарна відповідь залишити тут. Люди будуть читати наші коментарі та знати про ризики та кроки відмови від ризику.
WinEunuuchs2Unix

Я цілком погоджуюся. Гарного дня!
HappyCactus


2

Це однорядне рішення, яке також змінює дозволи файлів, як зазначено в /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)

0
  • Розширення на ідею @upteryx.

  • Ось як я реалізував некорінного користувача, що не використовує паролів, в ефемерному зображенні Docker для використання в конвеєрі CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.