Файл Sudoers, увімкніть NOPASSWD для користувача всі команди


142

Передмова

Це досить складне питання, пов’язане з файлом Sudoers та командою sudo загалом.

ПРИМІТКА. Ці зміни я внесла на спеціалізовану машину під управлінням Ubuntu Desktop 13.04, яку я використовую виключно для навчальних цілей. Я розумію, що для включення NOPASSWD sudo величезний ризик для безпеки.

Питання

Спочатку мою зміну у файлі sudoers (/ etc / sudoers) складав один рядок, специфікація користувача, яка мала б дати можливість nicholsonjf запускати всі команди з sudo без необхідності введення пароля (див. Рядок, що починається з 'nicholsonjf '):

# 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"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: 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

Однак це не спрацювало, і мені все одно запитували свій пароль щоразу, коли я виконував команду як "nicholsonjf". Мені вдалося почати запускати команди sudo як "nicholsonjf", тільки коли я видалив "nicholsonjf" із груп sudo та admin.

Хтось може пояснити, чому це спрацювало?

Це тому, що користувач "nicholsonjf" успадковував права sudo з двох специфікацій групи "admin" і "sudo" (див. Нижче у файлі sudoers), які переосмислювали специфікацію користувача "nicholsonjf", оскільки вони були подалі вниз конфігураційний файл?


7
Примітка: ALL = NOPASSWD: ALL повинен бути ALL = (ALL) NOPASSWD: ALL або інакше це не працює ...
André Verwijs

див. також цю відповідь: askubuntu.com/questions/139723/sudo-does-not-ask-for-password/…
JB.

Відповіді:


164

Рядок, який ви додали, був замінений Від man sudoers:

Коли для користувача кілька записів збігаються, вони застосовуються в порядку. Там, де є кілька матчів, використовується останній збіг (який не обов'язково є найбільш конкретним).

У вашому випадку nicholsonjfбув членом групи, sudoтому до нього застосували цей рядок:

%sudo   ALL=(ALL:ALL) ALL

Якщо ви хочете змінити записи, /etc/sudoersпросто поставте нові записи після них.

Новий запис повинен виглядати так

myuser ALL=(ALL) NOPASSWD: ALL для одного користувача, або

%sudo ALL=(ALL) NOPASSWD: ALL для групи.


6
Для повного рішення я хотів би щось побачити NOPASSWDу цій відповіді ...
Даніель Олдер

22
Я думаю, рішення повинно бути таким:%sudo ALL=(ALL) NOPASSWD:ALL
Даніель Олдер

3
@DanielAlder: Рядок із специфікацією в питанні nicholsonjf ALL=NOPASSWD: ALLправильний. Це було просто в неправильному місці, як я пояснив у відповіді. ------ RunasСпецифікація - у вашому випадку (ALL)- необов'язкова. Якщо ви опустите специфікацію, ви можете запускати команди як rootі ви не можете використовувати -uта -gпараметри sudo.
пабук

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

4
Додаток, а не виправлення, якщо використовується щось на базі debian / ubuntu (можливо, це застосовується, а не бачиться в іншому місці). Ваша абсолютна ставка найкращої практики полягає в тому, щоб додати спеціальні команди до файлу в /etc/sudoers.d/ і залишити sudoers сам керуватиме менеджером пакунків.
Акваріон

119

Для одного користувача додайте цей рядок в кінці sudoersфайлу, використовуючиsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Для групи

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
Перш ніж прочитати цю відповідь, я це зробив, %sudo ALL=NOPASSWD: ALLі це працює. Чи я єдиний, хто вважає розширену форму Backus-Naur насправді важкою для розуміння?
Вінс

4
@Vince При використанні вашої команди я не можу sudoбез пароля як користувач без привілеїв sudo. Наприклад, sudo -u root -iпрацює, але sudo -u git -iні.
NeverEndingQueue

Це набагато корисніша відповідь, ніж прийнята, яка, хоча і відповідає на питання ОП, напевно, не є тим, що більшість людей переходять на цю сторінку за допомогою Google.
Махмуд Аль-Кудсі,

3

Щоб ніколи не підкажете поточного користувача пароль при тому , що користувач використовує sudoзробити

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

це створить файл, який називається, /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordі буде означати, що користувачеві, якому ви запустили цю команду, не буде запропоновано ввести пароль під час виконання sudoкоманди. Вам все одно буде запропоновано ввести пароль в інших контекстах, наприклад, встановити речі з графічного додатка Ubuntu Software .

Переваги цього зробити перед додаванням рядка в echoкоманді до /etc/sudoersвикористання sudo visudo(як це запропоновано іншими відповідями)

  1. /etc/sudoersіноді модифікована оновлень системи, в той час як файли в /etc/sudoers.dНЕ
  2. sudo visudoметод схильний до помилок ( про що свідчить цей самий питання), в той час як копіювати / вставити команду набагато складніше зіпсувати

Відповідно до sudo cat /etc/sudoers.d/READMEцієї функції (введення додаткових файлів sudoer /etc/sudoers.d) було включено за замовчуванням з Debian 1.7.2p1-1, який вийшов наприкінці 1990-х (Ubuntu заснований на Debian ).


(не соромтесь відредагувати мою відповідь, якщо ви можете придумати краще ім’я файлу)
Борис

0

Як Вінс вже згадувалося в коментарях , ви можете використовувати цей рядок:

%sudo ALL=NOPASSWD: ALL

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


@Eliah це не так відрізняється від інших відповідей. Все, що він робить, це замінити заповнювач місця supergroupу відповіді Федіра на sudo. Що далі, ще один користувач для групи wheel? Або будь-яка інша група, якою користувач користується?
муру

1
@muru "Все, що він робить, це замінити заповнювач місця supergroupу відповіді Федіра на sudo". Що? Заміна supergroupз sudoв лінії %supergroup ALL=(ALL) NOPASSWD:ALLприбутковості %sudo ALL=(ALL) NOPASSWD:ALL, а НЕ %sudo ALL=NOPASSWD: ALL.
Eliah Kagan

Що, мабуть, гірше, оскільки зараз NOPASSWD призначений лише для root як цільового користувача. Отже, це навіть не відповідає правильно на питання!
муру

@muru Що це навіть не можливо , однак, підміна supergroupз sudo. Це власна відповідь, а не подяка чи копія іншої відповіді. Але так, я погоджуюся: якщо вони цього не збираються , для більшості користувачів це буде не так добре, як методи в інших відповідях. (Але, особливо враховуючи питання, написано "всі команди", а не "всі цільові користувачі", я не думаю, що це насправді навіть не намагається відповісти на запитання, яке було задано.)
Eliah Kagan

Це працювало для мене, і я хотів поділитися з іншими користувачами :) (при бажанні видаліть мій коментар).
Е. Фортес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.