Как сделать, чтобы права супер-пользователя длились дольше, чем при использовании sudo?

25

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

Может потребоваться повторный ввод sudoпароля, когда требуется установка многих пакетов, поэтому было бы неплохо, если бы существовала команда или конфигурация, которая могла бы повлиять на период использования.

Скажи мне почему
источник
3
Итак, никто suбольше не использует ? Когда-либо?
Мистер Листер
9
@MrLister, sudo -iи у вас есть корневая оболочка, готовая к тому, чтобы кто-нибудь мог помочь себе совать ноги в то же время, что и один раз ...
Rmano
1
@DevRobot, у тебя есть источник для этого? Мне трудно поверить, что Canonical удалит такую ​​важную команду, и я ничего не могу найти в Google.
DJMcMayhem
9
@DevRobot suнужен root, чтобы иметь пароль. По умолчанию пользователь root в Ubuntu не имеет пароля. Следовательно, вы не можете suполучить root права. suработает как задумано здесь. Попробуйте с любым пользователем, у которого есть пароль.
Муру
3
@muru sudo suработает просто отлично, хотя и немного повторяется.
Coteyr

Ответы:

27

Поведение sudoнастраивается в /etc/sudoersфайле. Существует timestamp_timeoutопция, отвечающая за изменение пароля пользователя по прошествии определенного времени.

От человека sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

Чтобы изменить этот параметр, сделайте следующее:

  1. В терминале беги sudo visudo. visudoиспользуется специально для редактирования /etc/sudoersфайла и по умолчанию использует nanoтекстовый редактор.
  2. Найдите строки, начинающиеся с Defaults. Добавьте следующую строку

    Defaults        timestamp_timeout=x
    

    где х - количество минут, которое вы хотите между повторными

  3. Сохраните файл с помощью Ctrl+O

Сергей Колодяжный
источник
12

От man sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

Как видите, время ожидания по умолчанию sudoсоставляет 15 минут. Вы можете изменить это значение в /etc/sudoers.

Вы не редактируете напрямую /etc/sudoers, а используете visudoдля этого.

От man visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

Итак, введите sudo visudoтерминал, который откроет /etc/sudoersфайл в nanoтекстовом редакторе.

Посмотрите на эту строку:

Defaults    env_reset

И добавьте, где X - время, которое вы хотите установить в минутах.timestamp_timeout=X

Итак, в качестве примера:

Defaults    env_reset,timestamp_timeout=5

Если вы укажете 0, вам всегда будет предложено ввести пароль. Если вы укажете отрицательное значение, время ожидания никогда не истечет.

После этого сохраните и выйдите.

Смотрите RootSudoTimeout

Рон
источник
Обыграй меня на 29 секунд =)
Сергей Колодяжный
1
Вы хорошо -_- я на ноутбуке. , , возможно мне нужно больше кофе
Сергей Колодяжный
Вы также можете установить, например, -1 для тайм-аута - если вы никогда не хотите, чтобы запрос пароля запускался.
Михал Живецкий
8

Попробуй это .

  1. Запустите следующую команду в терминале:

    sudo visudo
    
  2. Прокрутите вниз до строки, которая выглядит следующим образом:

    Defaults        env_reset
    
  3. Измените это, например:

    Defaults        env_reset,timestamp_timeout=30
    

Измените 30 на время в минутах, которое вы хотите, чтобы оно подождало до истечения времени ожидания. Вы также можете изменить его на 0, если вы хотите запрашивать пароль каждый раз, когда вы запускаете sudo, или -1, если вы никогда не хотите запрашивать пароль, нажмите Ctrl+, Xчтобы завершить редактирование, Y, чтобы сохранить изменения, и Enter, чтобы выйти.

Вот источник: http://lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774

Михал Живецкий
источник
5

Вы можете отредактировать /etc/sudoersфайл (с помощью sudo visudo: быть осторожным) и добавить строку вроде

Defaults:myname timestamp_timeout=15 

где mynameваш идентификатор пользователя Значение времени ожидания указывается в минутах. Вы можете использовать значение -1, чтобы никогда не истечь, а затем введите, sudo -kчтобы убить аутентификацию, поэтому вам снова нужен пароль.

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

meuh
источник
1
+1 за упоминание sudo -kоб аннулировании кэшированной аутентификации вручную.
Byte Commander
5

Я не могу поверить, что самая простая команда:

sudo -s

здесь не упоминается Ключ "-s" дает вам консоль с правами root, которая действует до тех пор, пока вы не выйдете из нее. Нет необходимости возиться с настройками по умолчанию.

Оливер Фридрих
источник
1
Почему за это проголосовали?
Coteyr
3
Я не понизил голос, но это сводит на нет одно преимущество использования sudo: каждая отдельная команда регистрируется (чтобы вы могли видеть, что вы сделали). Вы теряете эту запись, когда открываете корневую оболочку.
Гюнтберт
1
@guntbert, безусловно, регистрирует каждую команду, но в истории пользователя root.
Оливер Фридрих
@BeowulfOF не обязательно - история bash - это нечто совершенно иное, чем системный журнал.
Гюнтберт,
1
На самом деле, @guntbert, если вы используете журнал авторизации таким образом, у вас есть другие проблемы.
Оливер Фридрих
1

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

sudo -i

или

sudo bash

или

sudo <your preferred shell here>

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

Конечно, с большой силой приходит большая ответственность, не делай глупостей и т. Д.

reirab
источник
1
БУДЬТЕ ОЧЕНЬ ОСТОРОЖНЫ с этим. По сути, вы будете запускать корневую оболочку.
Хмаяг
4
Почему это понижено?
Coteyr
@hmayag Да, если вы запустите корневую оболочку, вы действительно запустите корневую оболочку. Отсюда и причина предупреждения в конце.
Рейраб
@coteyr Возможно, по той же причине, что и ответ BeoWulf.
Гюнтберт
1

Увидев слишком много вопросов от пользователей, которые изменили файлы конфигурации и были озадачены тем, почему их изменения были перезаписаны после обновления пакета, я отмечу, что если вы хотите изменить timestamp_timeout, лучше сделать это, создав файл, /etc/sudoers.dа не изменить /etc/sudoersнапрямую.

Так что вы должны сделать

sudo visudo -f /etc/sudoers.d/timeout

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

Defaults timestamp_timeout=X

в нем и сохраните как обычно. Затем, если /etc/sudoersвыйдет новая версия , вам не придется выбирать между установкой более новой версии или сохранением изменений - у вас автоматически будут оба варианта.

fkraiem
источник
1

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

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

По сути, предыдущий код обновляет токен sudo каждые 4 минуты с помощью процесса, запускаемого в фоновом режиме.

Действительно, согласно sudoинструкции: «время ожидания запроса пароля по умолчанию для политики безопасности sudoers составляет 5 минут ». Таким образом, в зависимости от политики конкретной системы, вы можете настроить время ожидания цикла между двумя циклами.

psychoslave
источник