linux - AWS IAM 或 Linux Newuser 允许访问我的后端
问题描述
我有一个 EC2 实例,其中托管了我的移动应用程序的后端。
我的开发人员需要访问我的服务器,才能上传新代码,我想也可以测试一下。
现在,我不想给他 FTP 详细信息,所以这就是我所做的:
- 创建了一个新的 Linux 用户
- 从 EC2 控制台创建了一个新的密钥对
- 创建了一个 .ssh 目录
- 将文件权限更改为 700(因此只有文件所有者可以读/写/打开目录)
- 在 .ssh 目录中使用 touch 命令创建了 authorised_keys
- 将文件权限更改为 600(因此只有文件所有者可以读取/写入目录)
- 检索到密钥对的公钥
- 在authorized_keys中添加公钥
现在我可以与我的开发人员共享新生成的 PEM 文件以及用户名和我的 EC2 主机 IP 地址。
但是我不明白为什么我不能通过从 AWS 控制台创建一个 IAM 用户并相应地设置他的权限来直接做到这一点?
我真的很困惑,因为我最初想以 IAM 方式来做,但每个人都建议我使用 Linux 用户——这不是一回事吗?
此外,一旦他完成工作,我将完全删除该用户 - 对吗?
此外,我什么都不明白......在完成所有这些并设置了新的 Linux 用户之后,我只能使用 Linux 用户名和 Unix 密码连接到我的服务器 - 而不使用我创建的 PEM 文件 -那个怎么样?
此外,从技术上讲,新的 Linux 用户可以简单地删除我的主要 Linux 用户......我的意思是我可以简单地右键单击用户并通过 Filezilla 按删除,例如,我怎样才能防止这种情况发生?就算没关系,他也可以直接删掉我整个后台?
我的服务器上现在有以下内容:
主文件夹
- 主文件夹 > appBackend
- 主文件夹 > mainLinux用户
- 主文件夹 > newLinux用户
最后但并非最不重要的一点是,为什么每个人总是说永远不要与任何人共享私有 PEM 文件.. 归根结底,如果我只允许特定的 IP 地址连接到我的 EC2,那么我永远不必担心任何事情? 就像我为我的 MongoDB 所做的一样——只有当我添加 IP 地址时,那个人才能连接并查看我的数据库。因此,对于所有以前的开发人员,我已经共享了我的数据库配置,因为他们的 IP 不再在我的安全组中,所以这无关紧要 - 我是对的吗?
抱歉,我对这一切都不熟悉,我正在努力解决这一切。我很感激任何帮助!
解决方案
- 创建 Linux 用户与 IAM 用户:
IAM 用户适用于可以根据您提供的权限访问 AWS 资源的用户。这意味着如果您创建对 EC2 具有完全访问权限的 IAM 用户并将详细信息提供给您的开发人员,他/她可以登录 AWS 并具有对 EC2 的完全访问权限。他/她可以创建、启动/停止、重启、终止您的 EC2 服务器等。创建 IAM 用户/组是为了限制对 AWS 资源(例如 EC2、S3、VPC 等)的访问,而不是针对在 EC2 内运行的操作系统。
是的,工作完成后删除用户和密钥。
要登录 linux 服务器,您可以使用用户名密码或用户名密钥。如果您设置了使用密码登录,请检查您的用户设置。创建新用户时使用“--disabled-password”或类似名称。在此处参考:https ://aws.amazon.com/premiumsupport/knowledge-center/new-user-accounts-linux-instance/
检查您的新用户是否具有 root 或 sudo 访问权限。如果您提供了 sudo 或 root 访问权限,则新的 linux 用户可以执行此类操作。
请注意,最好在服务器启动并运行后删除 EC2 上的默认 root 用户。ec2 用户或 ubuntu。原因是,如果您在创建 EC2 时使用的 pem 密钥被泄露,您的服务器也被泄露。与您将创建的特定用户不同,每个人都知道这些默认 root 用户。因此最好删除它们。
还要遵循最少访问原则,只为新用户提供最少需要的访问权限。这意味着,您应该根据需要或活动创建用户,并限制仅访问该活动。例如,如果您的用户只需要将文件复制到/从特定文件夹中复制,请为您的用户设置一个组并将权限分配给所需的文件夹。不要提供任何 sudo 访问权限。
同样,您可以创建一个可以访问 sudo 的管理员用户,但是,请确保该用户不与其他开发人员共享。
推荐阅读
- javascript - 使用按钮从左/右到中心过渡
- apache-spark - 如何解决 AWS EMR 集群中的 NoClassDefFoundError: org/apache/spark/sql/types/DataType?
- java - 我的数组没有按照我想要的方式填充,我该如何解决这个问题?
- if-statement - 来自多个动态下拉列表的 Google 表格匹配/查询
- ios - Swift Github Action CocoaPods 构建失败并出现“Framework not found Pods_iosapp”
- javascript - 如果选中复选框,则需要填写一个文本字段。文本字段失败:无论复选框状态如何,始终需要
- swift - updateData FieldValue.arrayUnion([value]) 的 Firebase Cloud Firestore 安全规则 [swift]
- reactjs - NavMenu 在 ReactCrudDemo 教程中不呈现
- go - 如何获取索引中的文档总数
- java - 我们能否确定参数化测试何时完成所有动态生成的测试