При использовании sudo в Linux он запрашивает пароль root, но только при первом запуске. Если вы запустите другую команду sudo, она помнит, что вы уже ввели пароль ранее, и не запрашивает его:
thomas@ubuntu:~$ sudo id
[sudo] password for thomas: ******
uid=0(root) gid=0(root) groups=0(root)
thomas@ubuntu:~$ sudo id
uid=0(root) gid=0(root) groups=0(root)
Как sudo делает это? Где хранится эта информация? Моя идея заключается в том, что он запоминает идентификатор терминала (например, pts / 1), но где он хранится? Первый процесс sudo заканчивается, когда он завершается командой, верно?
Я знаю, что sudo - это программа setuid, поэтому у нее все время есть привилегии root, но я до сих пор не могу найти подходящее место для хранения информации о том, что пользователь уже ввел пароль. Есть ли какой-то процесс, связанный с демоном?
Ответы:
Это, вероятно, под
/var/db/sudo
или,/var/run/sudo
и вы, вероятно, найдете каталоги имен пользователей с файлами под ними, упорядоченные по номеру tty.Фактические предоставленные привилегии, в том числе продолжительность сеансов, прежде чем вам придется вводить пароль, зависит от того, как настроен sudoers. Есть настройки для предоставления / ограничения множества разных вещей, но они не хранятся в этих файлах, которые хранят только метки времени. Как долго длится сеанс или когда sudo нужно снова запросить пароль, определяется дельтой текущего времени и меткой времени сеанса в этом каталоге, а также тем, как долго sudo настроен, чтобы сеанс длился.
источник
Попробуйте
man sudo
взглянуть на раздел ФАЙЛЫ:И на
SECURITY NOTES
(справочные страницы из Debian 6.0.4)
источник