`sudo` 的非确定性行为

lio*_*ori 5 debian sudo

我对 sudo 有一个相当奇怪的问题。基本上,它进行身份验证,但有时只是不启动提供的命令。例如:

liori@marvin:~$ sudo whoami
root
liori@marvin:~$ sudo whoami
root
liori@marvin:~$ sudo whoami
liori@marvin:~$ sudo whoami
liori@marvin:~$ sudo whoami
liori@marvin:~$ 
Run Code Online (Sandbox Code Playgroud)

我写了一个测试用例来演示这个问题:

liori@marvin:~$ sudo whoami; for i in `seq 100`; do echo -n ':' ; sudo whoami ; done ; echo
root
::::::::::::root
:::::root
:::::root
:::::::::::root
::::::::::root
::::::::::::::::::::::::::::::::root
:::root
::::root
::::root
:::root
:::root
::root
:root
:::::
liori@marvin:~$ 
Run Code Online (Sandbox Code Playgroud)

当然,预期的输出是一系列行,每行都以一个冒号字符开头。我不知道从哪里开始调试这个问题。

对于每次尝试(无论命令是否实际运行),我都会在 syslog 中得到一个条目:

Apr 11 19:47:40 marvin systemd-logind[806]: New session c1079 of user root.
Apr 11 19:47:40 marvin systemd-logind[806]: Removed session c1079.
Run Code Online (Sandbox Code Playgroud)

这是 Debian SID。几天前,在进行了较大的更新(我可能每月更新此系统一次)以及将系统从一个硬盘移动到另一个(使用rsync -av --del)之后,我开始观察这种行为。

任何帮助将不胜感激。

lio*_*ori 2

Bug 已经填满了。解决方法:

就我而言,我更改了 /etc/pam.d/login 和 /etc/pam.d/gdm3* 并添加了一行

session required        pam_loginuid.so
Run Code Online (Sandbox Code Playgroud)

就在 @include 公共会话之前

(来自迈克尔·比布尔的回应)