避免使用自定义镜像中的预设登录凭证

创建云服务器ECS实例时,应使用独立的、新创建的认证凭证(如SSH密钥对),避免使用自定义镜像中可能存在的预设登录凭证。

安全风险

当您使用自定义镜像(公共镜像中不会有默认密码)创建新的ECS实例时,如果该镜像包含预设的登录密码或SSH密钥,新实例便会“继承”这些凭证。这些凭证通常是为了方便镜像制作者或早期用户测试而设置的,但它们构成了安全隐患:

  • 凭证泄露范围不可控:自定义镜像的来源多样,其内置的默认密码或密钥可能已被分发给多个用户,甚至可能在不经意间被发布到公共代码仓库或技术论坛中。攻击者会持续扫描云平台,用这些已知的公开凭证尝试登录,一旦成功,即可完全控制您的服务器。

  • 绕过安全防护:攻击者一旦掌握了默认凭证,就相当于拥有了您服务器的钥匙,可以轻易绕过所有其他安全防护,直接登录系统。

最佳实践

  1. 创建自定义镜像时,防止预设密码或SSH密钥泄漏。

    • 删除所有用户的密码(passwd -d <username>)。

    • 确保 /root/.ssh/authorized_keys 和其他用户的此文件是空的。

    • 清除bash历史记录 (history -c && history -w)。

  2. 根据自定义镜像创建实例时,避免使用镜像预设密码。

    该操作会重新配置rootecs-user用户的登录凭证(密码或密钥对),并不会清除其他用户的登录凭证,请参考修复操作进行清除。

    Linux实例

    根据自定义镜像创建实例时,避免使用镜像预设密码,建议使用密钥对。

    控制台

    使用自定义镜像创建实例时,避免使用镜像预设密码,推荐使用密钥对

    image

    API

    通过RunInstances或者CreateInstance接口创建实例时,设置 PasswordInherit 参数为false

    Windows实例

    使用自定义镜像创建实例时,避免使用镜像预设密码,推荐设置高强度自定义密码(不支持密钥对)。

    image

合规能力

检查:检查是否存在不符合要求的实例

使用Workbench登录Linux实例进行检查。

  • 检查可疑用户账户:查看/etc/passwd文件,确认是否存在非您创建或非系统默认的未知用户。

    cat /etc/passwd
  • 检查SSH授权公钥:检查系统关键位置的authorized_keys文件,确认这些文件定义了哪些公钥可以免密登录。

    # 检查root用户的授权公钥
    cat /root/.ssh/authorized_keys
    
    # 检查其他用户(例如 'admin')的授权公钥
    cat /home/admin/.ssh/authorized_keys

    仔细审查文件中的公钥,确保它们都与您当前使用的私钥相对应。任何可疑的、不认识的公钥都应立即移除。

拦截:预防使用镜像预设密码创建实例

在组织或账户层面通过RAM Policy策略,主动拦截使用镜像预设密码创建实例的行为。

  • 针对企业用户:

    1. 使用阿里云主账号登录资源目录控制台,单击左侧菜单栏的管控策略创建自定义权限策略,粘贴以下JSON内容。

      创建实例、更换系统盘等操作时禁止从镜像中继承默认密码。
      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ecs:RunInstances",
                      "ecs:CreateInstance",
                      "ecs:ReplaceSystemDisk"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "Bool": {
                          "ecs:PasswordInherit": [
                              "true"
                          ]
                      }
                  },
                  "Effect": "Deny"
              }
          ]
      }
    2. 在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。

  • 针对非企业用户:

    1. 使用阿里云主账号登录RAM控制台,单击左侧菜单栏的权限策略,创建一条与上述内容相同的自定义策略。

    2. 通过管理权限策略授权将该条权限策略授权给RAM用户、RAM用户组或RAM角色。

修复:修复镜像预设密码的实例风险

  1. 设置新的登录凭证

    • Linux实例:绑定新密钥对

      1. 进入ECS控制台-实例,选择地域与资源组,单击目标实例ID进入实例详情页。

      2. 单击全部操作 > 绑定密钥对,选择已创建的密钥对后,单击确定。重启实例后生效。

    • Windows实例:重置密码

      1. 进入ECS控制台-实例,选择地域与资源组,单击目标实例ID进入实例详情页。

      2. 单击全部操作 > 重置实例密码,根据提示设置高强度密码后,单击确认修改

  2. 清除原镜像预设凭证(Linux)

    1. 使用新凭证登录服务器:使用您刚刚绑定的新密钥对或新密码登录到ECS实例。

    2. 删除旧的公钥仔细检查并清空所有authorized_keys文件中的旧公钥。

      # 编辑root用户的authorized_keys文件,删除所有不应存在的公钥
      vi /root/.ssh/authorized_keys
      
      # 对其他所有用户执行相同操作
      vi /home/<username>/.ssh/authorized_keys
    3. 禁用密码登录:在确认密钥对可以成功登录后,修改SSH服务配置,彻底禁用密码登录,只允许密钥对登录。

      # 1. 编辑SSH配置文件
      sudo vi /etc/ssh/sshd_config
      
      # 2. 找到并修改以下行
      PasswordAuthentication no
      PubkeyAuthentication yes
      
      # 3. 重启SSH服务使配置生效
      sudo systemctl restart sshd
  3. 清理不必要的系统用户和文件

    检查/etc/passwd/etc/shadow文件,删除任何在镜像制作过程中遗留的非必要用户账户。同时,检查并删除可能包含敏感信息(如旧密码、密钥)的临时文件或脚本。