作为Linux运维,在生产环境每天少不了频繁使用sudo执行特权命令,平时我写文章用的试验环境,都是用的root用户,那是为了省事,实际生产环境还是得有敬畏之心,我是从来不用root直接干活的,说白了,出了问题我这每月3千的工资赔不起呀。默认情况下,sudo密码缓存仅维持5分钟,这意味着每过几分钟就得重新输入密码,尤其是批量操作、脚本执行或紧急故障处理时,反复输入密码真的烦都烦死了!其实,sudo密码的缓存时间是可以优化(加长)的。先简单了解下sudo的密码缓存逻辑:当用户第一次执行sudo并输入正确密码后,系统会创建一个时间戳文件(默认存储在/var/run/sudo/[用户名]目录下),后续5分钟内再次使用sudo时,系统会直接验证这个时间戳,无需重复输入密码。比如我刚才试验了输入过sudo密码,查看剩余时间:sudo stat /run/sudo/ts/100
想加长密码记住的时间,其本质就是通过修改sudo配置文件,调整这个时间戳的有效期,或者直接跳过密码验证步骤(需谨慎使用)。有3种方法,下面简单讲下:
1、调整缓存超时时间(推荐),这个是最安全的,最适合大多数运维场景的方案,既能延长密码缓存时间,又不会过度降低系统安全性。
sudo visudo#这玩意默认会用nano编辑器,我用不习惯,改为vim才习惯,看个人喜欢了
在文件中找到或添加Defaults timestamp_timeout=XX行(XX为缓存时间,单位:分钟),常见配置示例:Defaults timestamp_timeout=10:缓存10分钟(适合日常运维,减少输入频率)如果把Defaults timestamp_timeout=-1,代表永久缓存,直到系统重启或手动清除时间戳(不推荐,仅测试环境临时使用)2、永久记住密码(不推荐,仅单用户测试机使用),该方案会让sudo永久缓存密码,直到系统重启或执行sudo -k手动清除缓存,这玩意跟直接root没什么区别了吧,不推荐不推荐。Defaults timestamp_timeout=-1
3、免密码执行sudo命令(高风险,严格限制场景)用户名 ALL=(ALL) NOPASSWD: ALL
用户名 ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/tail, /usr/bin/less
做为一个合格的Linux运维大佬,定期审计sudo配置是一项必做的工作,定期清理无用的免密码授权或过长的缓存时间,尤其是公司有人员离职之后,及时调整权限,网上看到有新闻说,有些开发离职1年了,还能登陆原公司的服务器,这些运维的心真够大的。各位大佬有没有更好的方法啊,欢迎留言啊!!!(我当然不能承认,留言多了会有广告,有广告我就有收入,钱啊,严重缺钱呢!)