为什么我刚刚在另一个窗口中进行身份验证后,sudo 还会在窗口中要求输入密码?

为什么我刚刚在另一个窗口中进行身份验证后,sudo 还会在窗口中要求输入密码?

如果我使用 xterm、gnome-terminal 等中的命令行,我可以sudo在某些限制内避免重新提示输入密码,或者我可以禁用它。

作为可用性和安全性之间的折衷,我通常只是希望延长这个重新查询的等待时间。

默认情况下,输入 sudo 密码后只有 15 分钟的宽限期,之后会再次提示输入密码。要将其更改为 45 分钟,我可以编辑/etc/sudoers,并将 timestamp_timeout 设置为我想要的等待时间(以分钟为单位)。

sudoers文件

如果我在同一个终端会话中,并启动一个新的 shell(输入cshbash),则等待期会得到尊重。

但是如果我转到另一个窗口访问那里的命令行,它会立即要求我输入密码sudo

在同一个伪终端会话(pts)内(例如,如果我在同一个 gnome-terminal 窗口内生成一个新的 shell),则会遵守超时规定。

如果我启动新的 xterm、gnome-terminal 等,我必须再次输入凭据。

尽管是我的家庭系统(单用户系统)等上唯一活跃的用户,sudo 并不相信我的所有pts条目都来自同一个用户:

~/pseudoland$ w
 01:27:39 up 1 day, 15:03,  7 users,  load average: 0.32, 0.71, 0.77
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
jgb    tty1                      23:56    1:30m  0.55s  0.51s -bash
jgb    tty7     :0               Tue10   39:03m  2:28m  0.76s gnome-session
root     pts/1    :0.0             00:30   56:23   0.01s  0.01s /bin/bash
jgb    pts/3    :0.0             01:16    0.00s  0.59s  3.22s gnome-terminal
jgb    pts/4    :0.0             01:27   26.00s  0.23s  0.23s /bin/bash
jgb    pts/5    :0.0             01:17    9:26   0.23s  0.23s bash

有没有办法告诉 sudo,它应该将我打开的所有窗口视为来自同一用户,并且如果最后一个 sudo 计时器尚未过期,就不要再次询问我的密码?

答案1

宽限期由所谓的sudo“票据”控制。当您使用 sudo 进行身份验证时,它会创建此票据,其中包含特定的时间戳,该时间戳基本上说明了身份验证何时到期。

默认情况下(这是在编译包时设置的),这个超时是,正如您所发现的,每个 tty。这是 sudo 的一项功能,称为“tty_tickets”。基本上,这意味着 sudo 不是为每个用户创建一个锁,而是为每个 tty 创建一个锁。

为了恢复到旧的行为并覆盖默认行为,您需要编辑/etc/sudoers。找到Defaults您已经编辑以更改超时的“ ”行,并将其附加,!tty_tickets到该行。这将关闭 tty_tickets 功能并为您提供所需的行为。

相关内容