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

Вдохновленный этим вопросом....

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

ПРИМЕЧАНИЕ: я хочу выполнить команду sudo без аутентификации с помощью пароля; только когда они выполняются через терминал.
Я не хочу удалять этот дополнительный уровень безопасности из других функций, например, при использовании "Центра программного обеспечения Ubuntu" или выполнении сценария bash путем перетаскивания файла нечто.sh в терминал.

12 ответов

Решение

sudo -i это путь, если вы не хотите вводить пароль каждые 10 минут при внесении изменений в вашу систему (или другие системы), и вы не хотите изменять какие-либо системные файлы.

Это переключит вас на root с помощью вашего sudo пароль пользователя, когда вы закрываете консоль или вводите exit Вы вернулись к своему обычному пользователю.

Подход к решению вашей проблемы - поместить вашего пользователя в файл sudoers, как вы можете видеть.

Откройте окно терминала и введите:

sudo visudo

В нижней части файла введите следующее:

$USER ALL=(ALL) NOPASSWD: ALL

куда $USER ваше имя пользователя в вашей системе. Сохраните и закройте файл sudoers (если вы не изменили редактор терминала по умолчанию (вы узнаете, есть ли у вас), нажмите ctl+x, чтобы выйти nano (но обратите внимание, что скриншот ниже показывает vim), и он предложит вам сохранить).

файл sudoers]

После этого вы можете в окне терминала набрать sudo <Whatever you want>без запроса пароля.

Это относится только к sudo Команда в окне терминала. Например, при попытке установить пакет в центре программного обеспечения вам будет предложено ввести пароль, как вы можете увидеть на следующем снимке экрана.

запрос пароля GUI

Я думаю, что это то, что вы хотите.

Предпочтительным способом предоставления индивидуальных (или групповых) разрешений будет добавление файлов в /etc/sudoers.d

Это отделяет локальные изменения от политики по умолчанию и экономит время в случае изменения файла распределения sudoers.

Например:

sudo echo "username ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/username

Будет очень ясно, какие пользователи получают разрешение.

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

sudo echo "username ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers.d/local

Посмотри пожалуйста /etc/sudoers.d/README для дополнительной информации.

Корневые тайм-ауты sudo - самый простой и безопасный способ сделать это. Я выложу все примеры, но предупреждаю, что любой способ сделать это очень рискованно, хотя этот способ намного безопаснее:

sudo visudo

Это открывает редактор и указывает его на файл sudoers - Ubuntu по умолчанию использует nano, другие системы используют Vi. Теперь вы супер пользователь, редактирующий один из самых важных файлов в вашей системе. Нет стресса!

(Vi специальные инструкции отмечены с (vi!). Игнорируйте их, если вы используете nano.)

Используйте клавиши со стрелками, чтобы перейти к концу Defaults линия.

(vi!) нажмите клавишу A (заглавную "a"), чтобы переместиться в конец текущей строки и войти в режим редактирования (добавить после последнего символа в строке).

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

,timestamp_timeout=X

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

(vi!) нажмите Escape, чтобы вернуться в командный режим. Теперь, если вы довольны своим редактированием, введите :w Введите, чтобы написать файл и :q Введите для выхода из vi. Если вы допустили ошибку, возможно, самый простой способ - повторить с начала, выйти без сохранения (нажмите Escape, чтобы войти в командный режим), а затем набрать:q! Введите

Нажмите Ctrl+X, затем Y, затем Enter, чтобы сохранить файл и выйти из nano.

Возможно, вы захотите прочитать sudoers и vi справочные страницы для получения дополнительной информации.

man sudoers
man vi

Сбросьте значение тайм-аута, используя:

sudo -k

Эти инструкции должны удалить запрос на ввод пароля при использовании команды sudo. Тем не менее, команда sudo по-прежнему должна использоваться для доступа с правами root.

Отредактируйте файл sudoers

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

<username> ALL=NOPASSWD: ALL

замещать <username> с вашим именем пользователя (без <>). Это предполагает, что Ubuntu создал группу с тем же именем, что и ваше имя пользователя, что типично. Вы можете поочередно использовать группу пользователей или любую другую группу, в которой вы находитесь. Просто убедитесь, что вы в этой группе. Это можно проверить, перейдя в Система -> Администрирование -> Пользователи и группы.

Пример:

michael ALL=NOPASSWD: ALL

Введите ^ X (Ctrl+X), чтобы выйти. Это должно запросить вариант сохранения файла, введите Y для сохранения.

Выйдите из системы, а затем снова войдите в нее. Теперь это должно позволить вам выполнить команду sudo без запроса пароля.

Корневой аккаунт

Включение учетной записи root

Включение учетной записи root редко требуется. Почти все, что вам нужно сделать как администратор системы Ubuntu, можно сделать с помощью sudo или gksudo. Если вам действительно нужен постоянный root-вход, лучше всего смоделировать Root-оболочку входа с помощью следующей команды:

sudo -i

Однако, если вам нужно включить root-логины, вы можете сделать это так:

sudo passwd root

Повторное отключение вашей учетной записи root

Если по какой-либо причине вы включили свою учетную запись root и хотите снова ее отключить, используйте в терминале следующую команду:

sudo passwd -dl root

Общесистемная группа sudo

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

Выйдите, а затем вернитесь.

Сбросить sudo timeout

Вы можете убедиться, что sudo запросит пароль в следующий раз, запустив:

sudo -k

От Super User приходит хороший ответ:

Используйте ключ -S, который читает пароль из STDIN:

echo <password> | sudo -S <command>

замещать <password> с вашим паролем.

Конечно, то, что вы хотите сделать, не рекомендуется. Через некоторое время хоть и заходишь sudo становится настолько автоматическим, что его полезность уменьшается.

Другой подход заключается в том, чтобы оставить файл sudoers без изменений и, выполнив что-то сложное для своих сотен серверов, введите sudo bash, Это даст вам оболочку, которая будет аутентифицироваться как root, пока вы не выйдете из нее.

Это однострочное решение, которое также изменяет права доступа к файлам, как указано в /etc/sudoer.d/README:

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

Хорошая однострочная строка для удаления запросов sudo для текущего пользователя

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

Один лайнер

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

Чтобы никогда не запрашивать пароль у текущего пользователя, когда этот пользователь использует sudoзапустите эту команду:

      echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-sudo-password
  • Расширение идеи @upteryx.

  • Вот как я реализовал пользователя без полномочий root в эфемерном образе 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

Откройте конфигурацию судо:

      sudo visudo

добавить следующую строку:

      # Defaults specification 
Defaults:username  !authenticate

куда usernameваше имя пользователя.

Другие вопросы по тегам