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


15

Скажімо, я виконую команду за допомогою sudo, тоді, якщо я використовую sudoпротягом наступних 15/5 хвилин (не впевнений, як довго він мене запам’ятовує), він не запропонує мені ввести пароль. Мене знову запропонує, якщо я не використовував її принаймні так довго.

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

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

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

Я запускаю Ubuntu GNOME 15.10 з GNOME 3.18.


1
гарне запитання, але чому ти параноїк? тому що якщо особа, яка ви не знаєте, ваш пароль для входу не може бути зупинена від використанняsudo
Edward Torvalds

Якщо ви просто вийдете з цього термінального вікна, вам потрібно буде ввести свій пароль, коли ви відкриєте нове вікно терміналу, незалежно від того, наскільки швидко ви це зробите. Якщо ви запускаєте щось у вікні терміналу, додайте `; exit`, і вікно закриється, коли команда завершиться.
Марк

@Marc: Я знаю, але не завжди зручно виходити, ні вручну змусити sudoвас запитати наступного разу. Автоматичне рішення було б кращим.

@edwardtorvalds: Ну, я міг би знову увійти, а потім піти (не те, що я роблю це дуже часто), і тоді, коли хтось прийде, було б погано, якби вони могли просто використовувати sudo. Я знаю, що це звучить дещо дивно для мого власного комп’ютера, але я міг би виконувати деякі роботи з обслуговування на іншому комп'ютері Ubuntu, і тоді, коли я знову входитиму користувачеві знову, можливо, незручно закрити термінал, але я цього не роблю хочу, щоб вони мали sudoправа.

1
Додавання `; вихід` (сім натискань клавіш) мені здається досить легким. До якого виду технічного обслуговування ви не ходите, бо я не можу придумати багато чого, я б ризикнув призупинити його посеред.
Марк

Відповіді:


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+ (системний)

Це можна зробити на 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.
kos

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