EC2 用户权限

Posted

技术标签:

【中文标题】EC2 用户权限【英文标题】:EC2 user permissions 【发布时间】:2015-02-21 01:53:29 【问题描述】:

我刚刚设置了我的第一个 AWS EC2 服务器实例,但在上传图片的脚本权限方面遇到了问题。 “var/www”(和所有子目录)所有者是“ec2-user”,但是 apache 服务器作为“apache”运行。 因此,由 php 脚本(使用 mkdir)动态创建的所有目录都将 'apache' 作为所有者(它似乎没有写权限) 我当然可以将 apache 用户更改为“ec2user”,但我担心这可能会带来安全风险。这样做的正确方法是什么? 感谢您的帮助。

【问题讨论】:

如果下面的答案是正确的,你能这样标记吗?这将有助于其他有相同问题并寻找答案的客户。谢谢 答案是正确的,虽然它没有解决我的问题,但还是谢谢! 【参考方案1】:

为 Apache Web 服务器设置文件权限

1- 使用以下命令将 www 组添加到您的 EC2 实例:

[ec2-user ~]$ sudo groupadd www

2- 将 ec2-user 用户添加到 www 组:

[ec2-user ~]$ sudo usermod -a -G www ec2-user

3- 要刷新您的权限并包含新的 www 组,请退出:

[ec2-user ~]$ exit

4- 重新登录并验证 www 组与组一起存在:

[ec2-user ~]$ groups
> ec2-user wheel www

5- 将/var/www 目录及其内容的组所有权更改为 www 组:

[ec2-user ~]$ sudo chown -R root:www /var/www

6- 更改/var/www及其子目录的目录权限,添加组写入权限,并为以后创建的子目录设置组ID:

[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775  +

7-递归更改/var/www目录及其子目录下文件的权限,增加组写权限:

[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664  +

【讨论】:

更多来自这个链接:docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 毫不奇怪,上面列出的 AWS 链接上给出的说明非常棒。感谢您的直接链接。【参考方案2】:

这是一个纯 Linux 权限问题,而不是 AWS 问题。 我刚刚创建了一个 Amazon Linux 实例并在 /var

中验证了权限
 [ec2-user@ip-1-1-1-174 ~]$ ls -ald /var/www
 drwxr-xr-x 7 root root 4096 Oct 22 23:34 /var/www

如您所见,所有权是 root 而不是 ec2-user。您应该首先了解您在/var/www/ec2-user 上看到的权限是什么/为什么

如果需要再次更改该目录的所有者,您可以键入:

 chown -R root:root /var/www

让您的 Web 服务器 (httpd) 写入 /var/www 或以提升的权限(例如 root)运行该进程不是最佳做法。 如果您的应用程序真的写入本地存储,请使用不同的卷,安装在没有可执行文件的单独目录中。

【讨论】:

感谢您的回答。其实你是对的,'/var/www/'的所有者是'root'。但是,我有一个用于存储图片的子文件夹“/var/www/html/files”,该文件夹的所有者是“ec2-user”。有关信息,我通过 SSH 使用 filezilla 来部署应用程序(用户 ec2-user)。这可能是 ec2-user 是子文件夹所有者的原因吗?那么将我的文件上传到 aws 实例的最佳方式是什么?我尝试使用弹性 beanstalk,但上传包含我的应用程序文件的 zip 时出现错误,尽管 zip 文件看起来不错.... 是的,当您在 FileZilla 中以 ec2-user 身份进行身份验证时,它将创建 ec2-user 拥有的文件。如果您更容易继续这样做并在转移后更改所有权(使用上面我的回答中描述的 chown 命令) 是的,但是我的脚本在 files 文件夹中动态创建文件夹(在 php 中使用 mkdir),并且创建的文件夹的所有者是 'apache'(因为 php 作为 'apache' 运行)...跨度> 应该是 ec2-user 还是 root? 这取决于应用程序使用的用户。在上面的@Arbiz 示例中,正确的用户是“apache”【参考方案3】:

如果您使用的是 Amazon Linux 2 AMI,则步骤不同

要允许 ec2-user 帐户操作此目录中的文件,您必须修改该目录的所有权和权限。有很多方法可以完成这项任务。在以下步骤中,您将 ec2-user 添加到 apache 组,以授予 apache 组对 /var/www 目录的所有权并为该组分配写权限。

设置文件权限

将您的用户(在本例中为 ec2-user)添加到 apache 组。

[ec2-user ~]$ sudo usermod -a -G apache ec2-user

退出并重新登录以选择新组,然后验证您的成员资格。 注销(使用退出命令或关闭终端窗口):

[ec2-user ~]$ exit

要验证您在 apache 组中的成员身份,请重新连接到您的实例,然后运行以下命令:

[ec2-user ~]$ groups
ec2-user adm wheel apache systemd-journal

将 /var/www 及其内容的组所有权更改为 apache 组。

[ec2-user ~]$ sudo chown -R ec2-user:apache /var/www

要添加组写入权限并在以后的子目录中设置组 ID,请更改 /var/www 及其子目录的目录权限。

[ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775  \;

要添加组写入权限,递归更改/var/www及其子目录的文件权限:

[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664  \;

现在,ec2-user(以及 apache 组的任何未来成员)可以在 Apache 文档根目录中添加、删除和编辑文件,使您能够添加内容,例如静态网站或 PHP 应用程序。

如何设置 Amazon Linux 2 LAMP,完整的详细信息在这里 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

【讨论】:

以上是关于EC2 用户权限的主要内容,如果未能解决你的问题,请参考以下文章

编写 IAM 策略,其中任何具有 EC2 完全访问权限的用户都不能删除 AWS 账户中任何其他用户的实例

Amazon Linux 中的用户权限:root 与 ec2-user

创建一个IAM用户以授予执行在AWS EC2中某些任务的权限

关于开-关机以及重启-EC2-instance-所需要的最小的权限-Policies写法

AWS 限制 EC2 创建的策略权限

Amazon Ec2 FTP 写入权限 [关闭]