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

bel*_*qua 11 sudo gnome-terminal

如果我在 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
Run Code Online (Sandbox Code Playgroud)

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

Iai*_*ane 13

宽限期由sudo所谓的“票”控制。当您使用 sudo 进行身份验证时,它会使用某个时间戳创建此票证,该时间戳基本上说明身份验证应何时到期。

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

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