跳至内容

如何从我的 Amazon EC2 Linux 实例中移除 ec2-user 账户?

3 分钟阅读
0

我想安全地移除或锁定 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上的默认 ec2-user AWS 账户。

简短描述

默认情况下,Amazon EC2 在 Amazon Linux、Red Hat Enterprise Linux (RHEL) 和 SUSE Linux Amazon 机器映像 (AMI) 上提供 ec2-user 账户。最佳做法是使用 ec2-user 执行管理任务,例如软件安装、系统配置和软件包管理。如果您想停用(锁定)或删除 ec2-user,请确保为新用户账户提供所需的管理权限。

在停用或删除 ec2-user 之前,请执行以下操作:

  • 全面测试新用户的访问权限和权限。
  • 查看并更新依赖于 ec2-user 的脚本、自动化工具和应用程序。
  • 设置至少两个活跃的管理用户账户,这些账户在您验证所有更改之前需要一直保持可用状态。

解决方法

**重要事项:**为了避免意外地将自己锁定在实例之外,请按顺序一次性完成以下解决步骤。

备份您的实例

在更改用户账户之前,最佳做法是创建 EC2 实例的备份。创建 Amazon Elastic Block Store (Amazon EBS) AMI。或者,创建 EBS 卷的快照(已附加到实例)。如果遇到问题,您可以使用此备份来回滚所做的更改。

创建新的用户账户

完成以下步骤:

  1. 使用 ec2-user 账户连接到您的 EC2 实例
  2. 运行以下命令,创建具有管理权限的新用户账户:
     sudo adduser newusername
    **注意:**请将 newusername 替换为新的用户名。
  3. 运行以下命令,将新用户账户添加到默认情况下具有 sudo 权限的 wheel 组:
    sudo usermod -aG wheel newusername
    **注意:**请将 newusername 替换为新的用户名。

为新用户设置 SSH 访问权限

完成以下步骤:

  1. 运行以下命令以创建 .ssh 目录
    sudo mkdir /home/newusername/.ssh
    **注意:**请将 newusername 替换为新的用户名。
  2. 运行以下命令生成新的 SSH 密钥对:
    ssh-keygen -t ed25519 -C "newusername@example.com" -f ~/.ssh/newusername_key
    **注意:**请将 newusername 替换为新的用户名,并将 example.com 替换为您的域名。
  3. 如果您生成了新的 SSH 密钥对,请运行以下命令将新的公钥复制到 EC2 实例:
    cat ~/.ssh/newusername_key.pub | ssh -i current_key.pem ec2-user@your-instance-ip "sudo tee /home/newusername/.ssh/authorized_keys"
    **注意:**请将 newusername 替换为新的用户名,并将 your-instance-ip 替换为您的实例 IP 地址。
    如果您直接在实例上生成 SSH 密钥对,请确保将私钥安全地复制到本地计算机。您必须使用私钥,将来才能在实例之外访问 SSH。要将私钥从 EC2 实例复制到您的本地计算机,请运行以下命令:
    scp -i your-existing-key.pem ec2-user@your-instance-ip:/home/ec2-user/.ssh/newusername_key.pem ~/Downloads/
    **注意:**请将 your-existing-key 替换为现有密钥,将 your-instance-ip 替换为实例 IP 地址,并将 newusername 替换为新的用户名。
    最佳做法是生成新的 SSH 密钥对以提高安全性。但是,您可以改为重用 ec2-user SSH 密钥。这提供了一种更快捷但不太安全的设置方式。要将现有的 ec2-user 公钥复制到新用户的授权密钥中,请运行以下命令:
    sudo cp /home/ec2-user/.ssh/authorized_keys /home/newusername/.ssh/authorized_keys
    **注意:**请将 newusername 替换为新的用户名,并将 example.com 替换为您的域名。
  4. 运行以下命令来设置所需的权限:
    sudo chown -R newusername:newusername /home/newusername/.ssh
    sudo chmod 700 /home/newusername/.ssh
    sudo chmod 600 /home/newusername/.ssh/authorized_keys
    **注意:**请将 newusername 替换为新的用户名。

(仅限 Amazon Linux、RHEL 和 SUSE)确保您的新用户拥有完全 sudo 访问权限

完成以下步骤:

  1. 要验证当前的 sudo 配置是否有效,请运行以下命令:

    sudo visudo -c
  2. 如果需要,请运行以下命令打开 sudoers 文件:

    sudo EDITOR=vim visudo
  3. 如果新用户不在 wheel 或 sudo 等组中,请将以下行添加到文件中:

    newusername ALL=(ALL) NOPASSWD:ALL

    **注意:**请将 newusername 替换为新的用户名。

测试新用户的访问权限

**重要事项:**在移除或停用其他管理用户之前,您必须确认新用户同时拥有 SSH 和 sudo 访问权限。

要确认新用户是否可以访问和操作实例,请完成以下步骤:

  1. 打开一个新的终端窗口。

  2. 运行以下命令以使用新密钥测试 SSH 登录:

    ssh -i ~/.ssh/newusername_key newusername@your-instance-ip

    **注意:**请将 newusername 替换为新的用户名,并将 your-instance-ip 替换为您的实例 IP 地址。

  3. 运行以下命令来验证 sudo 访问权限:

    sudo whoami

    确保输出结果中包含 root。输出示例:

    root
  4. (可选)要确保您拥有完全访问权限,请运行典型的 sudo 命令。命令示例:

    sudo yum update -y

检查依赖关系

完成以下步骤:

  1. 确保没有应用程序或进程使用 /home/ec2-user 主目录中的文件。要检查打开的文件或进程,请运行以下命令:

    sudo lsof +D /home/ec2-user
  2. 如果您发现有进程或应用程序使用 ec2-user 主目录中的文件,则必须迁移文件和权限。要为迁移的文件创建临时目录,请运行以下命令:

    sudo mkdir -p /home/newusername/moved_files

    **注意:**请将 newusername 替换为新的用户名。

  3. 要将文件复制或移动到新用户的主目录,请运行以下命令:

    sudo cp -rp /home/ec2-user/some_app/home/newusername/moved_files/

    **注意:**请将 some_app 替换为您的应用程序名称,并将 newusername 替换为新的用户名。

  4. 要更新所有权和权限,请运行以下命令:

    sudo chown -R newusername:newusername /home/newusername/moved_files

    **注意:**请将 newusername 替换为新的用户名。

如果您有 crontab 条目,请完成以下步骤:

  1. 要从 ec2-user 导出 crontab 条目,请运行以下命令:

    sudo crontab -u ec2-user -l > /tmp/ec2-user-crontab
  2. 要为新用户导入 crontab 条目,请运行以下命令:

    sudo crontab -u newusername /tmp/ec2-user-crontab

    **注意:**请将 newusername 替换为新的用户名。

更新您的系统和应用程序配置

查看和修改引用 ec2-user 的系统或服务配置文件。要在配置文件中搜索 ec2-user 的出现次数,请运行以下命令:

sudo grep -r "ec2-user" /etc/

务必更新特定于应用程序的设置和使用 ec2-user 的脚本,以反映新的用户名。

默认情况下,AWS Systems Manager Agent (SSM Agent) 运行 ec2-user 或使用 ec2-user 权限和环境设置。创建工作会话或备份访问方法,直到您验证 SSM Agent 可以正确使用新的用户配置为止。在移除或修改 ec2-user 之前,请检查 SSM Agent 是否具有以下配置:

  • 它在系统级用户 (root) 或新用户下运行。
  • 它可以访问所需的系统文件和环境变量。
  • 您已在 /etc/amazon/ssm/amazon-ssm-agent.json 文件中正确进行了配置。

**重要事项:**如果您在停用或删除 ec2-user 之前未配置 SSM Agent,则可能会无法访问以下功能:

  • 会话管理器,AWS Systems Manager 的一项功能
  • 会话管理器运行命令和自动化
  • Inventory,AWS Systems Manager 的一项功能
  • 补丁管理器,AWS Systems Manager 的一项功能

停用 ec2-user 账户

如果您停用 ec2-user,则无法将其用于登录或其他进程。要停用 ec2-user,请完成以下步骤:

  1. 使用新的用户账户连接到您的 EC2 实例

  2. 运行以下命令,停用 ec2-user 的密码登录功能:

    sudo passwd -l ec2-user
  3. 运行以下命令,将 ec2-user 从 sudo 或 wheel 组中移除:

    sudo gpasswd -d ec2-user wheel
  4. (可选)要从 ec2-user 中移除 SSH 访问权限,请运行以下命令:

    sudo rm /home/ec2-user/.ssh/authorized_keys

如果您需要重新激活 ec2-user,请连接到您的 EC2 实例并运行以下命令:

sudo passwd -u ec2-user

删除 ec2-user 账户

**重要事项:**如果您删除 ec2-user,该用户及其主目录将从您的实例中一并移除。ec2-user 一经删除便无法重新激活。

要删除 ec2-user,请完成以下步骤:

  1. 使用新的用户账户连接到您的 EC2 实例
  2. 运行以下命令删除 ec2-user
    sudo userdel -r ec2-user

删除 ec2-user 会影响以下自动化流程:

  • 假定 ec2-user 存在的自定义脚本会失败。
  • 您在 ec2-user 下设置的 Cron 作业将不再运行。

恢复您无法访问的实例

如果您丢失 sudo 访问权限,请使用 EC2 Instance Connect会话管理器连接到您的实例。或者,您可以使用 Amazon EBS 快照或 AMI 来恢复您的实例

遵守安全最佳实践

请执行以下操作:

  • 定期轮换 SSH 密钥以增强安全性并降低访问权限被泄露的风险。
  • 为每个管理用户创建唯一的 SSH 密钥,以建立个人问责制。
  • 激活对所有 sudo 活动的记录,以跟踪和审计管理操作。
  • 为了提高加密强度和性能,请使用强大的现代密钥类型,例如 ed25519
  • 维护一份包含所有拥有管理权限用户的最新清单,以便进行适当的访问控制和审查。
  • 监控登录尝试以检测未经授权的访问或暴力破解攻击。

**重要事项:**确保您始终可以访问至少一个功能齐全的管理账户。在停用或修改现有访问权限之前,请全面测试所有更改。

AWS 官方已更新 1 年前