如何从我的 Amazon EC2 Linux 实例中移除 ec2-user 账户?
我想安全地移除或锁定 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 卷的快照(已附加到实例)。如果遇到问题,您可以使用此备份来回滚所做的更改。
创建新的用户账户
完成以下步骤:
- 使用 ec2-user 账户连接到您的 EC2 实例。
- 运行以下命令,创建具有管理权限的新用户账户:
**注意:**请将 newusername 替换为新的用户名。sudo adduser newusername - 运行以下命令,将新用户账户添加到默认情况下具有 sudo 权限的 wheel 组:
**注意:**请将 newusername 替换为新的用户名。sudo usermod -aG wheel newusername
为新用户设置 SSH 访问权限
完成以下步骤:
- 运行以下命令以创建 .ssh 目录
**注意:**请将 newusername 替换为新的用户名。sudo mkdir /home/newusername/.ssh - 运行以下命令生成新的 SSH 密钥对:
**注意:**请将 newusername 替换为新的用户名,并将 example.com 替换为您的域名。ssh-keygen -t ed25519 -C "newusername@example.com" -f ~/.ssh/newusername_key - 如果您生成了新的 SSH 密钥对,请运行以下命令将新的公钥复制到 EC2 实例:
**注意:**请将 newusername 替换为新的用户名,并将 your-instance-ip 替换为您的实例 IP 地址。cat ~/.ssh/newusername_key.pub | ssh -i current_key.pem ec2-user@your-instance-ip "sudo tee /home/newusername/.ssh/authorized_keys"
如果您直接在实例上生成 SSH 密钥对,请确保将私钥安全地复制到本地计算机。您必须使用私钥,将来才能在实例之外访问 SSH。要将私钥从 EC2 实例复制到您的本地计算机,请运行以下命令:
**注意:**请将 your-existing-key 替换为现有密钥,将 your-instance-ip 替换为实例 IP 地址,并将 newusername 替换为新的用户名。scp -i your-existing-key.pem ec2-user@your-instance-ip:/home/ec2-user/.ssh/newusername_key.pem ~/Downloads/
最佳做法是生成新的 SSH 密钥对以提高安全性。但是,您可以改为重用 ec2-user SSH 密钥。这提供了一种更快捷但不太安全的设置方式。要将现有的 ec2-user 公钥复制到新用户的授权密钥中,请运行以下命令:
**注意:**请将 newusername 替换为新的用户名,并将 example.com 替换为您的域名。sudo cp /home/ec2-user/.ssh/authorized_keys /home/newusername/.ssh/authorized_keys - 运行以下命令来设置所需的权限:
**注意:**请将 newusername 替换为新的用户名。sudo chown -R newusername:newusername /home/newusername/.ssh sudo chmod 700 /home/newusername/.ssh sudo chmod 600 /home/newusername/.ssh/authorized_keys
(仅限 Amazon Linux、RHEL 和 SUSE)确保您的新用户拥有完全 sudo 访问权限
完成以下步骤:
-
要验证当前的 sudo 配置是否有效,请运行以下命令:
sudo visudo -c -
如果需要,请运行以下命令打开 sudoers 文件:
sudo EDITOR=vim visudo -
如果新用户不在 wheel 或 sudo 等组中,请将以下行添加到文件中:
newusername ALL=(ALL) NOPASSWD:ALL**注意:**请将 newusername 替换为新的用户名。
测试新用户的访问权限
**重要事项:**在移除或停用其他管理用户之前,您必须确认新用户同时拥有 SSH 和 sudo 访问权限。
要确认新用户是否可以访问和操作实例,请完成以下步骤:
-
打开一个新的终端窗口。
-
运行以下命令以使用新密钥测试 SSH 登录:
ssh -i ~/.ssh/newusername_key newusername@your-instance-ip**注意:**请将 newusername 替换为新的用户名,并将 your-instance-ip 替换为您的实例 IP 地址。
-
运行以下命令来验证 sudo 访问权限:
sudo whoami确保输出结果中包含 root。输出示例:
root -
(可选)要确保您拥有完全访问权限,请运行典型的 sudo 命令。命令示例:
sudo yum update -y
检查依赖关系
完成以下步骤:
-
确保没有应用程序或进程使用 /home/ec2-user 主目录中的文件。要检查打开的文件或进程,请运行以下命令:
sudo lsof +D /home/ec2-user -
如果您发现有进程或应用程序使用 ec2-user 主目录中的文件,则必须迁移文件和权限。要为迁移的文件创建临时目录,请运行以下命令:
sudo mkdir -p /home/newusername/moved_files**注意:**请将 newusername 替换为新的用户名。
-
要将文件复制或移动到新用户的主目录,请运行以下命令:
sudo cp -rp /home/ec2-user/some_app/home/newusername/moved_files/**注意:**请将 some_app 替换为您的应用程序名称,并将 newusername 替换为新的用户名。
-
要更新所有权和权限,请运行以下命令:
sudo chown -R newusername:newusername /home/newusername/moved_files**注意:**请将 newusername 替换为新的用户名。
如果您有 crontab 条目,请完成以下步骤:
-
要从 ec2-user 导出 crontab 条目,请运行以下命令:
sudo crontab -u ec2-user -l > /tmp/ec2-user-crontab -
要为新用户导入 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,请完成以下步骤:
-
使用新的用户账户连接到您的 EC2 实例。
-
运行以下命令,停用 ec2-user 的密码登录功能:
sudo passwd -l ec2-user -
运行以下命令,将 ec2-user 从 sudo 或 wheel 组中移除:
sudo gpasswd -d ec2-user wheel -
(可选)要从 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,请完成以下步骤:
- 使用新的用户账户连接到您的 EC2 实例。
- 运行以下命令删除 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 年前