You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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生成的,每次启动都会重新生成,所以你手动修改的内容会被覆盖。

解决这个问题的两种靠谱方法:

  1. 修改cloud-init核心配置
    编辑/etc/cloud/cloud.cfg文件,找到users:部分里的ubuntu用户配置,把sudo字段从ALL=(ALL) NOPASSWD:ALL改成ALL=(ALL) ALL。这样每次cloud-init运行时,就会自动设置正确的sudo权限,不会再出现免密配置。
  2. 创建优先级更高的自定义sudoers文件
    在/etc/sudoers.d/目录下创建一个后缀更大的文件,比如99-custom-ubuntu(sudoers.d的文件按文件名顺序读取,后缀大的规则会覆盖前面的),然后用visudo -f /etc/sudoers.d/99-custom-ubuntu编辑,写入:
    ubuntu ALL=(ALL) ALL
    
    这样即使90-cloud-init-users里还有NOPASSWD配置,这个自定义文件的规则会优先生效。

备注:内容来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:29:38