Як зробити так, щоб дозволи суперкористувача тривали довше, ніж використання sudo?


25

Чи є спосіб, завдяки якому я можу змусити sudoкоманду дати мені дозволи на довший період, ніж її час за замовчуванням?

Це може бути біль, коли потрібно постійно вводити sudoпароль, коли потрібно встановити багато пакунків, тому було б добре, якщо існує команда чи конфігурація, які можуть бути зроблені для впливу на термін її використання.


3
Отже, ніхто suбільше не використовує ? Колись?
Містер Лістер

9
@MrLister, sudo -iі у вас є коренева оболонка, готова для того, щоб хто-небудь міг допомогти вбратися в ноги протягом стільки ж часу, як ...
Rmano

1
@DevRobot, у тебе є джерело для цього? Мені важко повірити, що Canonical видалить таку важливу команду, і я нічого не можу знайти про це в google.
DJMcMayhem

9
@DevRobot suпотребує root, щоб мати пароль. За замовчуванням у кореневого користувача Ubuntu немає пароля. Тому ви не suможете вкорінюватися. suпрацює тут, як задумано. Спробуйте з будь-яким користувачем, який має пароль.
муру

3
@muru sudo suпрацює чудово, хоча і трохи повторюється.
coteyr

Відповіді:


27

Поведінка sudoналаштовується у /etc/sudoersфайлі. Існує timestamp_timeoutваріант, відповідальний за репромітування користувача для пароля через певний проміжок часу.

Від людини судори

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
    

    де 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 на тайм-аут - якщо ви ніколи не хочете запускати запит пароля.
Michał Żywiecki

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-sesions-last-longer-in-linux-1221545774


5

Ви можете відредагувати /etc/sudoersфайл (з sudo visudo: будьте обережні) та додати рядок типу

Defaults:myname timestamp_timeout=15 

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

Або ви можете додати запис, щоб сказати, що певна команда взагалі не потребує пароля.


1
+1 за згадку sudo -kпро ручне визнання недійсною кешованої аутентифікації.
Байт командир

5

Я не можу повірити, що найпростіша команда:

sudo -s

тут не згадується. Перемикач "-s" дає вам консоль з кореневими дозволами, що триває до моменту виходу з неї. Не потрібно тугатися з налаштуваннями за замовчуванням.


1
Чому за цей голос проголосували?
coteyr

3
Я не спровокував, але це перешкоджає одній перевазі використання sudo: кожна команда реєструється (так що ви можете побачити, що ви зробили). Ви втрачаєте цей журнал, коли відкриєте кореневу оболонку.
guntbert

1
@guntbert, безумовно, є кожна команда, яка зареєстрована, але в історії кореневого користувача.
Олівер Фрідріх

@BeowulfOF не обов'язково - історія башів - це щось зовсім інше, ніж системний журнал.
Гунтберт

1
Дійсно, @guntbert, якщо ти використовуєш авторський журнал таким чином, у тебе виникають різні проблеми.
Олівер Фрідріх

1

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

sudo -i

або

sudo bash

або

sudo <your preferred shell here>

Хоча всі вони просто запускають один процес як корінь, одиничний процес, про який йде мова, так само буває оболонкою, яка дозволить вам запустити стільки інших процесів, скільки вам подобається, як root, без додаткової необхідності вводити sudoчи пароль. :)

Звичайно, з великою силою приходить велика відповідальність, не робіть дурних речей тощо.


1
Будьте ЧУЖИМИ Дбайливими з цим. Насправді ви будете мати корінну оболонку.
hmayag

4
Чому це заборонено?
coteyr

@hmayag Так, якщо ви запустите кореневу оболонку, ви дійсно будете запускати кореневу оболонку. Звідси причина попередження наприкінці.
reirab

@coteyr Можливо з тієї ж причини, що і відповідь BeoWulf.
guntbert

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вийде нова версія , вам не доведеться вибирати між встановленням нової версії або збереженням змін - у вас автоматично будуть обидві.


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 хвилин ". Отже, залежно від конкретної системної політики, ви можете змінити кількість часу, коли цикл проходить між двома циклами.

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