Как избежать запроса пароля sudo? [Дубликат]

55

Я знаю, что могу стать root (суперпользователем) с помощью команды su , но я должен авторизовать ее после ввода команд. Есть ли способ стать root и авторизировать (с паролем) в одной строке

    
задан Vader 22.05.2014 в 01:39
источник

7 ответов

62

Ну, единственное, о чем я могу думать, это

echo 'password' | sudo -S command

Флаг -S делает sudo считывает пароль со стандартного ввода. Как объясняется в man sudo :

  

-S, --stdin

     

Напишите запрос стандартной ошибке и прочитайте пароль со стандартного ввода    вместо использования терминального устройства. За паролем должен следовать символ новой строки.

Итак, чтобы запустить ls с привилегиями sudo , вы сделали бы

echo 'password' | sudo -S ls

Обратите внимание, что это приведет к ошибке, если ваш токен доступа sudo активен, если вам не нужно вводить пароль, потому что вы уже сделали это недавно. Чтобы обойти это, вы можете использовать -k для сброса токена доступа:

echo 'password' | sudo -kS ls

Я не знаю, каким образом вы попали в настоящую корневую оболочку (например, su или sudo -i ). Этого может быть достаточно для того, что вам нужно.     

ответ дан terdon 22.05.2014 в 01:49
источник
61

В терминале выполните команду visudo , чтобы отредактировать sudoers :

sudo visudo

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

username ALL = NOPASSWD : ALL

Примечание. Замените имя пользователя на ваше реальное имя_пользователя в приведенной выше строке.

    
ответ дан Din 22.05.2014 в 07:41
19

Решение echo 'password' | sudo -kS ls работает, но оно имеет несколько недостатков безопасности, большинство из которых уже упоминалось в комментариях к ответу terdon. Таким образом, я хотел бы предложить другой подход:

Если это только одна команда, которую вам часто нужно выполнять, например. apt-get upgrade , вы можете настроить свою систему таким образом, чтобы sudo someCommand не выполнял not пароль.

Для этого запустите visudo и введите что-то похожее на следующее:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

Обратите внимание, что если вы введете команду без аргумента (например, без upgrade в этом примере), пользователю будет разрешено запустить его с аргументом any поэтому используйте с осторожностью.

    
ответ дан Heinzi 22.05.2014 в 07:30
7

Вы также можете сделать это:

sudo -S <<< "password" command
    
ответ дан Jahid 09.06.2015 в 16:14
5

Вместо того, чтобы полностью удалить пароль, вы можете увеличить время ожидания, поэтому вам нужно только вводить его несколько раз в день; в терминале выполните:

sudo visudo

В конце файла добавьте следующую строку, чтобы установить тайм-аут в 30 минут (замените jsmith на свое имя пользователя).

Defaults:jsmith timestamp_timeout=30

Вы можете использовать любое количество, которое вы хотите; -1 означает отсутствие таймаута (запрашивается только в первый раз), а 0 означает мгновенный тайм-аут (запрашивается каждый раз, когда вы sudo ). Таймаут по умолчанию - 5 минут.

    
ответ дан ShitalShah 15.04.2016 в 10:13
1

Вейдер, из вашего комментария к исходному вопросу, вы хотели бы переключиться на интерактивную оболочку с полномочиями суперпользователя, правильно?

У Sudo есть специальный аргумент для запроса оболочки:

-s [command]
The -s (shell) option runs the shell specified by the SHELL environment variable if
it is set or the shell as specified in the password database. If a command is
specified, it is passed to the shell for execution via the shell's -c option. If no 
command is specified, an interactive shell is executed.

Это позволяет избежать уже упомянутых недостатков безопасности и позволяет «переходить в root» с помощью следующей команды:

sudo -s

IF Мне действительно нужно запустить корневую оболочку (в большинстве случаев это не так), то мне очень полезно иметь переменную среды HOME из установленной оболочки (чтобы отразить запуск как «root»), это можно сделать, используя флаг «-H». Таким образом, полная команда будет

sudo -s -H

Более подробную информацию вы можете найти в man-странице sudo .

    
ответ дан he1ix 22.05.2014 в 11:09
-2

Если вы хотите запустить задание как другой пользователь, например root , вы можете отредактировать crontab с sudo , что позволит вам запустить нужную задачу для запуска с правами root:

sudo crontab -e
    
ответ дан Jean Patrice Lamoureux 27.03.2015 в 15:32