Ubuntu用户密码设置及限制root提权的最佳实践咨询
Ubuntu用户密码设置及限制root提权的最佳实践咨询
嗨,针对你的问题,我来一步步帮你梳理清楚:
一、设置Ubuntu用户密码是否足够限制sudo提权?
设置用户密码是必要的基础步骤,但光靠这个还不够,结合你已经做的去掉NOPASSWD配置,这里还有几个额外的安全考虑:
- 首先,你执行的
sudo sed -re 's/NOPASSWD://' -i.date -Iseconds/etc/sudoers.d/90-cloud-init-users是正确的——AWS默认给ubuntu用户配置了免密sudo,不改的话设置密码也没用,因为sudo根本不需要验证就能提权。 - 限制sudo可执行的命令:不要保留
ubuntu ALL=(ALL) ALL这种全权限配置,只给用户必要的命令权限。比如如果用户只需要管理系统服务,就配置成:
这样即使账号泄露,攻击者能执行的操作也会被限制。ubuntu ALL=(ALL) /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl restart - 启用sudo日志审计:Ubuntu默认会把sudo操作记录到
/var/log/auth.log,你可以定期检查这个日志,确保所有提权操作都可追溯。 - 缩短sudo权限有效期:默认sudo密码验证后5分钟内不需要再次输入,你可以用
visudo编辑sudoers文件,添加Defaults timestamp_timeout=3,把有效期改成3分钟,减少权限被误用的风险。 - 限制直接切换root的途径:可以在sudoers里添加
ubuntu ALL=(ALL) !/usr/bin/su,禁止用户通过sudo su直接切换root;如果要更进一步,还可以限制sudo -i这类直接获取root shell的命令,只开放必要的操作权限。
二、AMI重启后NOPASSWD配置重新出现是否正常?
这是完全正常的,因为AWS的cloud-init工具会在实例启动(包括从AMI创建新实例)时自动配置系统,90-cloud-init-users这个文件是cloud-init生成的,每次启动都会重新生成,所以你手动修改的内容会被覆盖。
解决这个问题的两种靠谱方法:
- 修改cloud-init核心配置
编辑/etc/cloud/cloud.cfg文件,找到users:部分里的ubuntu用户配置,把sudo字段从ALL=(ALL) NOPASSWD:ALL改成ALL=(ALL) ALL。这样每次cloud-init运行时,就会自动设置正确的sudo权限,不会再出现免密配置。 - 创建优先级更高的自定义sudoers文件
在/etc/sudoers.d/目录下创建一个后缀更大的文件,比如99-custom-ubuntu(sudoers.d的文件按文件名顺序读取,后缀大的规则会覆盖前面的),然后用visudo -f /etc/sudoers.d/99-custom-ubuntu编辑,写入:
这样即使ubuntu ALL=(ALL) ALL90-cloud-init-users里还有NOPASSWD配置,这个自定义文件的规则会优先生效。
备注:内容来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

