Як запустити команду sudo без пароля?


235

Як у ubuntuкористувача на зображеннях AWS для Ubuntu Server 12.04 немає пароля sudoдля всіх команд, коли для нього немає конфігурації /etc/sudoers?

Я використовую сервер Ubuntu 12.04 на Amazon. Я хочу додати нового користувача, який має таку ж поведінку, як і користувач Ubuntu за замовчуванням. Зокрема, я хочу без пароля sudoдля цього нового користувача.

Тому я додав нового користувача і пішов редагувати /etc/sudoers(звичайно, використовуючи візуально). Після прочитання цього файлу здавалося, що ubuntuкористувач за замовчуванням отримує його без пароля sudoвід членства в adminгрупі. Тому я додав до цього свого нового користувача. Що не спрацювало. Потім я спробував додати NOPASSWDдирективу до sudoers. Що також не спрацювало.

У всякому разі, зараз мені просто цікаво. Яким чином ubuntuкористувач отримати беспарольному привілеї , якщо вони не визначені в /etc/sudoers. Який механізм це дозволяє?


Відповіді:


332

Гаразд, я знайшов відповідь, і, можливо, я також викладу її тут для повноти. Наприкінці /etc/sudoersє те, що я вважав лише коментарем:

#includedir /etc/sudoers.d

Однак це фактично включає вміст цього каталогу. Всередині якого знаходиться файл /etc/sudoers.d/90-cloudimg-ubuntu. Який має очікуваний зміст

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Тож саме там живе конфігурація sudo для користувача ubuntu за замовчуванням.

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

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

І додайте рядок типу:

aychedee ALL=(ALL) NOPASSWD:ALL

В кінці.


4
Я майже впевнений, що мені довелося зробити повне перезавантаження.
айчедея

2
нові правила sudo використовуватимуться для кожного нового користувача, який зареєструвався - тому вам потрібно принаймні повторно увійти
bluszcz

32
'sudo service sudo restart' працює :)
Laice

4
У більш пізніх версіях (наприклад, 14.04) включений файл є /etc/sudoers.d/90-cloud-init-users(щоб відредагувати .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Хоча створити додаткові файли було б чистіше, ніж редагувати створений. Зауважте, що файли, що містять .або закінчуються ~, не будуть включені.
Моломбі

2
@ Phil_1984_ Швидше за все, він був доданий як коментар, щоб дозволити сумісність з іншими (стандартними?) Версіями sudo, які не дозволяють включати, але не будуть спричинені дивними коментарями. (Стандарти жорсткі! ;-)
jpaugh

94

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

sudo visudo

Змініть цей рядок:

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

до цього рядка:

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

І перемістіть його під цим рядком:

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

тепер у вас повинно бути таке:

# 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

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

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

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

#includedir /etc/sudoers.d

то для кожного користувача, якому потрібен доступ до sudo З паролем :

sudo adduser <user> sudo

і для кожного користувача, якому потрібен доступ до sudo БЕЗ пароля :

sudo adduser <user> admin

і, нарешті, запустіть це:

sudo service sudo restart

І це все!

Редагувати: Можливо, вам доведеться додати групу адміністратора, оскільки я не думаю, що вона існує за замовчуванням.

sudo groupadd admin

Ви також можете додати типового ubuntuкористувача AWS до adminгрупи за допомогою цієї команди:

sudo usermod ubuntu -g admin

Примітка. Як зазначалося @hata , вам може знадобитися використовувати admім'я вашої групи адміністратора, залежно від того, яка версія Ubuntu використовується.


3
Примітка до самоврядування: Це умова переміщення менш обмежувальних дозволів нижче в стеку. Але це не вплине на функціональність.
poweratom

2
Як пояснив jiminikiz, мені довелося розмістити % admin після % sudo на моєму Ubuntu GNOME 16.04 LTS. Плюс до цього , адміністратори ідентифікатор групи точно не адмін , але адм на моїй Ubuntu. Перезавантаження не потрібно.
хата

5

Я створив би свій власний файл під каталогом /etc/sudoers.d/ - файл, створений Amazon Cloud, може бути перезаписаний у разі будь-якого оновлення. Створивши свій файл у /etc/sudoers.d, додайте цей запис,

<your user name> ALL=(ALL) NOPASSWD:ALL

Перезавантажте систему, і це спрацює.


2

Коротка відповідь без використання жодного редактора (перевірена на bash, дуже ризиковано виконати на віддалених хостах).

Налаштуйте sudo для роботи без пароля для поточного користувача:

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

Перевірте редагування за допомогою:

sudo visudo -c

Перевірте, чи можете ви використовувати судо без пароля:

sudo cat /etc/sudoers | grep "$USER"

... або просто спробуйте:

sudo <anything>

21
Це досить небезпечна порада ... скопіюйте та вставте цю помилку, і ви заблокуєте себе із власного сервера. Звідси порада використовувати візуально. Він перевіряє правильність синтаксису перед збереженням на диску. Отже, для всіх, хто хоче цим скористатися. Не робіть цього на віддаленому сервері, про який ви дбаєте. Ви можете включити у відповідь попередження про це.
айчедея

8
Не використовувати візуа - це жахлива ідея. Повірте, я знаю.
трогнандри

1
IMHO, копія-вставка безпечніше, ніж вручну. Невелике спрощення:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain

4
@theartofrain - Зазвичай, я погоджуюся, але visudoособливо приємно, що ви не можете зламати файл sudoers, таким чином, не закриваючи вас з машини (або, принаймні, sudo).
Джон V

3
@JonV Ви також можете втратити права адміністратора visudo, але зазвичай не випадково, оскільки visudoзберігаєте лише зміни, які добре сформовані відповідно до граматики файлів sudoers . Більшість помилок синтаксично неправильні, тому вони не завдають шкоди visudo. Якщо /etc/sudoersабо файл в /etc/sudoers.d це погано формується, sudoвідмовляється підняти привілеї для тих , хто в якості міри безпеки, тому не використовується visudoнебезпечно. (Хоча іноді це pkexecможна виправити без перезавантаження.)
Елія Каган

0

Ось як я реалізував некорінного користувача, що не використовує паролів, в ефемерному зображенні 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.