创建云服务器ECS实例时,应使用独立的、新创建的认证凭证(如SSH密钥对),避免使用自定义镜像中可能存在的预设登录凭证。
安全风险
当您使用自定义镜像(公共镜像中不会有默认密码)创建新的ECS实例时,如果该镜像包含预设的登录密码或SSH密钥,新实例便会“继承”这些凭证。这些凭证通常是为了方便镜像制作者或早期用户测试而设置的,但它们构成了安全隐患:
凭证泄露范围不可控:自定义镜像的来源多样,其内置的默认密码或密钥可能已被分发给多个用户,甚至可能在不经意间被发布到公共代码仓库或技术论坛中。攻击者会持续扫描云平台,用这些已知的公开凭证尝试登录,一旦成功,即可完全控制您的服务器。
绕过安全防护:攻击者一旦掌握了默认凭证,就相当于拥有了您服务器的钥匙,可以轻易绕过所有其他安全防护,直接登录系统。
最佳实践
创建自定义镜像时,防止预设密码或SSH密钥泄漏。
删除所有用户的密码(
passwd -d <username>
)。确保
/root/.ssh/authorized_keys
和其他用户的此文件是空的。清除bash历史记录 (
history -c && history -w
)。
根据自定义镜像创建实例时,避免使用镜像预设密码。
该操作会重新配置root或ecs-user用户的登录凭证(密码或密钥对),并不会清除其他用户的登录凭证,请参考修复操作进行清除。
Linux实例
根据自定义镜像创建实例时,避免使用镜像预设密码,建议使用密钥对。
控制台
使用自定义镜像创建实例时,避免使用镜像预设密码,推荐使用密钥对。
API
通过RunInstances或者CreateInstance接口创建实例时,设置
PasswordInherit
参数为false
。Windows实例
使用自定义镜像创建实例时,避免使用镜像预设密码,推荐设置高强度自定义密码(不支持密钥对)。
合规能力
检查:检查是否存在不符合要求的实例
使用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策略,主动拦截使用镜像预设密码创建实例的行为。
针对企业用户:
使用阿里云主账号登录资源目录控制台,单击左侧菜单栏的管控策略,创建自定义权限策略,粘贴以下JSON内容。
创建实例、更换系统盘等操作时禁止从镜像中继承默认密码。
{ "Version": "1", "Statement": [ { "Action": [ "ecs:RunInstances", "ecs:CreateInstance", "ecs:ReplaceSystemDisk" ], "Resource": "*", "Condition": { "Bool": { "ecs:PasswordInherit": [ "true" ] } }, "Effect": "Deny" } ] }
在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。
针对非企业用户:
修复:修复镜像预设密码的实例风险
设置新的登录凭证
清除原镜像预设凭证(Linux)
使用新凭证登录服务器:使用您刚刚绑定的新密钥对或新密码登录到ECS实例。
删除旧的公钥:仔细检查并清空所有
authorized_keys
文件中的旧公钥。# 编辑root用户的authorized_keys文件,删除所有不应存在的公钥 vi /root/.ssh/authorized_keys # 对其他所有用户执行相同操作 vi /home/<username>/.ssh/authorized_keys
禁用密码登录:在确认密钥对可以成功登录后,修改SSH服务配置,彻底禁用密码登录,只允许密钥对登录。
# 1. 编辑SSH配置文件 sudo vi /etc/ssh/sshd_config # 2. 找到并修改以下行 PasswordAuthentication no PubkeyAuthentication yes # 3. 重启SSH服务使配置生效 sudo systemctl restart sshd
清理不必要的系统用户和文件
检查
/etc/passwd
和/etc/shadow
文件,删除任何在镜像制作过程中遗留的非必要用户账户。同时,检查并删除可能包含敏感信息(如旧密码、密钥)的临时文件或脚本。