Как заставить sudo всегда просить пароль после пробуждения из режима ожидания?

15

Скажем, я выполняю команду с помощью sudo, тогда, если я буду использовать sudoв течение следующих 15/5 минут (не уверен, как долго он помнит меня), он не запросит у меня пароль. Это только подскажет мне снова, если я не использовал это по крайней мере так долго.

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

Итак, как я могу сделать так, чтобы независимо от того, как долго я не пользовался sudo, он обязательно запросит у меня пароль после приостановки, как только я снова войду в систему, даже если я все еще в пределах того периода времени, когда 15/5 минут неиспользования sudoеще не прошло?

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

Я использую Ubuntu GNOME 15.10 с GNOME 3.18.


источник
1
Хороший вопрос, но почему вы параноик? потому что, если кто-то, кроме вас, знает ваш пароль для входа, его нельзя будет остановитьsudo
Эдвард Торвальдс
Если вы просто выходите из этого окна терминала, вам нужно будет повторно вводить пароль при открытии нового окна терминала, независимо от того, как быстро вы это сделаете. Если вы запускаете что-то в окне терминала, добавьте `; exit` и окно закроется после завершения команды.
Марк
@Marc: Я знаю, но это не всегда удобно, чтобы выйти, или сделать вручную sudoспросить вас в следующий раз. Автоматическое решение будет предпочтительным.
@edwardtorvalds: Ну, я мог бы снова войти в систему, а затем уйти (не то, что я делаю это очень часто), и тогда, когда кто-то приходит, было бы плохо, если бы они могли просто использовать sudo. Я знаю, что это звучит немного странно для моего собственного компьютера, но я мог бы выполнить некоторые работы по техническому обслуживанию на другом компьютере Ubuntu, а затем, когда я снова войду в систему, закрыть терминал может быть неудобно, но я не хочу, чтобы у них были sudoправа.
1
Добавление `; exit` (семь нажатий клавиш) мне кажется довольно простым. От каких видов обслуживания вы уходите, потому что я не могу думать о многом, я бы рискнул приостановиться в середине.
Марк

Ответы:

19

От man sudo:

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

Так что вы хотите, чтобы ваш пользователь запускался sudo -Kкаждый раз, когда система приостанавливается.

Ubuntu 15.04+ (systemd)

Это можно сделать в Ubuntu 15.04+, поместив скрипт в /lib/systemd/system-sleep/.

  1. Запустить sudo nano /lib/systemd/system-sleep/disable_sudo_user(замените userна имя пользователя для удобства);
  2. Вставьте следующий скрипт (замените userего именем пользователя):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Хит CTRL+ O, ENTERи CTRL+ X;

  2. Бегать sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


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

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

Предыдущие версии Ubuntu (Upstart)

Это можно сделать в предыдущих версиях Ubuntu, поместив скрипт в /etc/pm/sleep.d/.

  1. Запустить sudo nano /etc/pm/sleep.d/disable_sudo_user(заменитьuserна имя пользователя для удобства);
  2. Вставьте следующий скрипт (замените userего именем пользователя):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Хит CTRL+ O, ENTERи CTRL+ X;

  2. Бегать sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


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

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac
кос
источник
2
Было бы смешнее, если бы вы использовали sudo -u user sudo -k. : D
Муру
@muru Думал так же, но по какой-то причине это выглядело немного глупо: D
kos
Извините, некоторое время не писал никакого шелл-кода, что именно это pre/*)делает? :)
@ParanoidPanda Все прошло, смотрите обновление. Смотрите здесь (описание, второй абзац): systemd-suspend.serviceвызывает скрипты с /lib/systemd/system-sleep/передачей двух аргументов; $1это либо preдля событий перед сном, либо postдля событий после сна, и $2это либо suspend, hybernateлибо hybrid-sleep; pre/*должен был поймать все комбинации pre/и любые из suspend, hybernateили hybrid-sleep, но так как вы явно просили о приостановке, я изменил его pre/suspend.
Кос
1
Стоит отметить, что вы можете делать это и в более старых версиях Ubuntu, это просто другой механизм, то есть использование /etc/pm/sleep.dскриптов.
Хоббс
3

Только если ты такой параноик! Вы можете использовать -Kопцию sudo.

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

например,

sudo -K <command>

Или вы можете просто оставить свой компьютер в металлическом ящике, охраняемом роботами :)

Эдвард Торвальдс
источник
Хм ... Не совсем так, как я хочу, нет ли способа автоматизировать это? Потому что это говорит о том, что я определенно знаю, что я собираюсь приостановить, что, если команда выполняется с, sudoи мне нужно куда-то идти, поэтому я приостанавливаю машину, затем, когда я вернусь и отключу машину, мне придется подождать для команды или времени, чтобы закончить, прежде чем я могу сделать это спросить меня пароль в следующий раз снова? Это было бы гораздо полезнее по многим причинам (включая тот факт, что когда я запускаю его с графическим интерфейсом на другом уровне выполнения, он не запрашивает пароль после приостановки) для его автоматизации.
Кроме того, я думаю, что вы имеете в виду -Kи нет -k.
Ну, это может быть более полезным в любом случае.
1

Еще один метод

Типа "sudo visudo"

Перейдите к строке, которая говорит: «По умолчанию env_reset»

и изменить на:

'По умолчанию env_reset, timestamp_timeout = 0

Затем сохраните файл.

Установив таймаут на 0, система будет каждый раз запрашивать пароль.

Эдгар Насер
источник
В то время как это делает (технически говоря) выполнять то , что ОП просит, это излишним для большинства ситуаций. Тем не менее, если вы действительно параноик (или просто хотите дополнительный шаг для паузы и созерцания каждый раз, когда вы делаете что-то потенциально опасное), это может быть жизнеспособной альтернативой.
CVn