我想做的是能够立即登录并执行 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