替代sudo密码提示的方案有哪些?
嘿,我完全懂你的需求——既要保留权限提升的验证环节(毕竟完全NOPASSWD确实有安全风险),又不想每次输长密码折腾(对ADHD/ADD的朋友来说,重复输入或者记密码真的太闹心了)。下面这几个方案正好对应你想要的几种替代方式,亲测好用:
Yes/No图形化确认提示
可以通过PAM的pam_exec模块配合简单脚本实现。比如修改/etc/pam.d/sudo文件,添加一行:auth sufficient pam_exec.so /usr/local/bin/sudo-yesno.sh然后写个
sudo-yesno.sh脚本,用图形化工具弹出确认框:#!/bin/bash export DISPLAY=:0 zenity --question --text="允许执行sudo权限操作吗?" --width=300 exit $?记得给脚本加权限:
chmod 700 /usr/local/bin/sudo-yesno.sh,并且设置所有者为root。这样每次sudo时,会弹出一个yes/no的对话框,点确认就放行,拒绝就取消操作。短PIN码验证
如果你想要短密码的替代方案,可以用PAM的pam_pin模块(多数主流发行版都自带)。修改/etc/pam.d/sudo,添加:auth sufficient pam_pin.so minlen=4 maxlen=6然后用
pam_pin的工具设置你的PIN码(比如执行pam_pin -u yourusername)。这样sudo时只需要输入4-6位的PIN,比系统密码短很多,输入起来快得多。
另外也可以用pam_exec配合自定义脚本,用openssl加密存储PIN,脚本验证输入的PIN是否匹配,灵活性更高。Yubico密钥触摸验证
这应该是最方便也安全的方案了,用YubiKey的U2F功能实现。首先安装pam_u2f模块(比如Ubuntu下执行apt install libpam-u2f),然后生成密钥映射文件:pamu2fcfg -u yourusername > /etc/u2f_mappings生成的时候需要触摸一下YubiKey,然后修改
/etc/pam.d/sudo添加:auth sufficient pam_u2f.so authfile=/etc/u2f_mappings之后每次执行sudo,只需要触摸一下插在电脑上的YubiKey,就能完成权限验证,完全不用输入任何内容,效率拉满。
⚠️ 小提醒:修改PAM配置前,最好开一个root终端备用,万一配置错了还能改回来,别把自己锁在系统外面。另外所有自定义脚本和配置文件都要设置严格的权限(比如chmod 600,所有者root),避免被篡改。
备注:内容来源于stack exchange,提问作者Lockszmith

