sudo 如何记住您已经输入的 root 密码?

sudo 如何记住您已经输入的 root 密码?

在 Linux 上使用 sudo 时,它会要求输入 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 是如何做到的?这些信息存储在哪里?我的想法是它会记住终端 id(如 pts/1),但是它存储在哪里?第一个 sudo 进程在执行完该命令后就结束了,对吗?

我知道 sudo 是一个 setuid 程序,因此它始终具有 root 权限,但我仍然想不出一个好地方来存储用户已输入密码的信息。是否涉及一些守护进程?

答案1

这些信息存储在哪里?

它可能在/var/db/sudoor下/var/run/sudo,您可能会找到用户名目录,其下的文件按 tty 编号排序。

授予的实际权限(包括必须再次输入密码之前会话持续的时间)取决于 sudoers 的设置方式。有一些设置可以授予/限制很多不同的事情,但这些设置不存储在仅存储时间戳的这些文件中。会话持续多长时间,或者 sudo 需要再次提示输入密码时,由当前时间和此目录中的会话时间戳的增量以及 sudo 设置为允许会话持续多长时间决定。

答案2

尝试man sudo查看 FILES 部分:

/var/lib/sudo 包含时间戳的目录

并且在SECURITY NOTES

sudo 将检查其时间戳目录的所有权(默认为 /var/lib/sudo )[...]

(Debian 6.0.4 的手册页)

相关内容