避免使用root账号登录实例

创建Linux类型系统实例时应避免使用root账号登录,推荐使用ecs-user账号登录。

安全风险

root账号拥有系统中最高的权限。虽然它为系统管理提供了便利,但也带来了巨大的安全风险。一旦root账户的凭证(密码或SSH密钥)被泄露,攻击者将完全控制您的服务器。这可能导致:

  • 数据破坏: 攻击者可以删除所有业务数据、日志和备份。

  • 恶意软件植入: 攻击者可以安装勒索软件、挖矿程序、后门程序等。

  • 敏感信息窃取: 业务代码、客户数据、支付信息等核心资产将被一览无余。

  • 横向移动攻击: 以此服务器为跳板,攻击您内网中的其他服务器,造成更大范围的破坏。

  • 操作痕迹抹除 攻击者可以轻易地修改或删除日志文件,极大地增加了安全事件后的追溯和调查难度。

最佳实践

创建实例时使用ecs-user进行日常登录和管理,这不仅限制了潜在的攻击面,也使得所有特权操作都必须通过sudo执行,从而留下了清晰、可审计的操作记录,明确了操作责任人。

控制台

通过实例购买页创建实例时,设置登录名选择ecs-user

特定版本的Linux镜像支持ecs-user,若不支持,请参考多用户远程登录自行创建ecs-user,并为该用户授予sudo权限。

image.png

API

通过RunInstances或者CreateInstance接口创建实例时,指定ImageOptions.LoginAsNonRoot参数为true,实例将不再使用root登录名,而会使用ecs-user用户名,重置账密时也无法重置为root用户名。

若无密钥对,可通过CreateKeyPair接口创建密钥对。

合规能力

检查:是否存在使用root账号登录的Linux实例

  1. 前往ECS使用成熟度评估与洞察

  2. 选择安全性能力页签,单击检查项使用非 root 账号登录 Linux 实例,可以查看使用root账号登录的Linux实例。

拦截:预防新购实例等操作使用root账号

通过RAM Policy策略,在组织或账户层面设置策略,主动拦截在新购Linux实例等操作中使用root账号的行为。

  • 针对企业用户:

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

      限制使用root身份进行创建实例、系统盘挂载、更换系统盘等操作。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ecs:RunInstances",
                      "ecs:CreateInstance",
                      "ecs:ReplaceSystemDisk",
                      "ecs:AttachDisk",
                      "ecs:InvokeCommand"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "Bool": {
                          "ecs:LoginAsNonRoot": [
                              "false"
                          ]
                      }
                  },
                  "Effect": "Deny"
              }
          ]
      }
    2. 在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。

  • 针对非企业用户:

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

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

修复:禁用root账号登录

  1. 创建普通用户:创建一个普通用户,用户ssh登录。具体操作,请参见多用户远程登录

  2. 登录实例:使用root用户或普通用户登录到您的Linux实例。 

  3. 禁用root账号登录登录实例内部,执行以下脚本,修改SSH服务的配置文件。

    #!/bin/bash
    # 备份原始配置文件
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)
    
    # 禁用root用户ssh登录::将 PermitRootLogin 参数修改为 no
    sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
    
    # 重启 SSH 服务以使配置生效
    # 注意:不同发行版的 SSH 服务名可能不同(例如 sshd 或 ssh),请根据实际情况修改。
    systemctl restart sshd || service sshd restart
  4. 验证:操作完成后,请保持当前会话不要断开,另外打开一个新的终端窗口,尝试使用root用户登录,此时应登录失败。然后,再尝试使用您的普通用户登录,确认可以成功登录并能通过sudo执行特权命令。验证成功后,方可安全断开所有会话。

    按照以上操作验证后,检查的结果可能不会改变,请忽略。