如何在 CLI 登录时自动进入 sudo 的宽限期?

如何在 CLI 登录时自动进入 sudo 的宽限期?

我想做的是能够立即登录并执行 sudo 命令,而无需再次输入密码。当我需要登录并运行特权命令时,连续输入两次密码是非常多余的。我了解安全风险,这要求我们在离开一段时间后重新输入密码,但似乎登录默认情况下应该自动设置此会话以防止这种情况发生,但由于某种原因却没有。

我知道这些解决方案但它们都依赖于 gdm,而且我似乎只为初学者安装了 LightDM。此外,我不登录 GUI 界面,并且据我所知,控制台首先不使用其中任何一个来管理登录。

如果重要的话,我在 VMware 中使用 Ubuntu 13.04。我确实安装了 KDE,但除非有理由,否则我通常不会加载它。

理想的解决方案也适用于 SSH 登录。

更新:

根据吉尔斯的建议,我现在有了这个工作设置:

~ tail -n1 /etc/pam.d/sshd
session optional pam_exec.so seteuid /usr/local/sbin/update_sudo_ticket

和 (确定用于sudo visudo编辑 sudoers)

~  sudo head -n12 /etc/sudoers|tail -n1
Defaults        !tty_tickets

并创建一个新脚本

~ cat /usr/local/sbin/update_sudo_ticket
#!/bin/sh
touch -c "/var/lib/sudo/$PAM_USER" 2>/dev/null

并使其可执行(sudo chmod u=+rwx,g=+rx-w,o=-rwx /usr/local/sbin/update_sudo_ticket):

~  ls -la /usr/local/sbin/update_sudo_ticket
-rwxr-x--- 1 root root 57 Sep 21 20:52 /usr/local/sbin/update_sudo_ticket

答案1

您可以使用pam_exec调用外部命令。请注意,它pam_exec在调用登录服务的用户控制的环境中运行,因此不要从 调用它su,而只能从具有可预测环境(例如sshd或 )的服务调用它login

sudo没有更新用户时间戳的选项,只能将其删除。因此,您必须手动更新时间戳。如果您不使用该tty_tickets选项(这不是很有用),您所需要做的就是更新目录上的时间戳。

session optional pam_exec.so seteuid /usr/local/sbin/update_sudo_ticket

哪里/usr/local/sbin/update_sudo_ticket有类似的东西

#!/bin/sh
touch -c "/var/lib/sudo/$PAM_USER" 2>/dev/null

答案2

使用 visudo 编辑 /etc/sudoers 文件并添加以下行:

%wheel ALL=(ALL) NOPASSWD: ALL

然后确保您的用户是组的一部分wheel

usermod -a -G wheel USERNAME_HERE

相关内容