EC2用户权限

8
我刚刚设置了我的第一个AWS EC2服务器,但在上传图片的脚本上遇到了权限问题。 'var / www'(以及所有子目录)的所有者是'ec2-user',但是Apache服务器正在以'apache'身份运行。 因此,由php脚本动态创建的所有目录(使用mkdir)都具有'apache'作为所有者(似乎没有写入权限)。 我可以将apache用户更改为'ec2user',但我担心这可能会带来安全风险。该如何正确处理? 感谢您的帮助。

如果下面的答案是正确的,您能标记一下吗?这将有助于其他有相同问题并寻找答案的客户。谢谢。 - Sébastien Stormacq
答案是正确的,虽然它没有解决我的问题,但还是谢谢! - Arbiz
4个回答

13

为了设置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 {} +

2
更多的内容请访问此链接:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html - Kamal
1
毫不意外,上述列出的 AWS 链接中给出的指示非常出色。感谢提供直接链接。 - David A. Gray

10

这是一个纯粹的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时出现错误... - Arbiz
是的,当您在FileZilla中作为ec2-user进行身份验证时,它将创建由ec2-user拥有的文件。如果这样更容易,可以继续这样做,并在传输后更改所有权(使用上面我的答案中描述的chown命令)。 - Sébastien Stormacq
是的,但我的脚本会动态地创建文件夹(使用 PHP 中的 mkdir 函数),在 files 文件夹中,所创建的文件夹的所有者是“apache”(因为 PHP 以“apache”的身份运行)。 - Arbiz
应该是 ec2-user 还是 root? - iphonic
这取决于应用程序使用的用户。在@Arbiz上面的示例中,正确的用户是“apache”。 - Sébastien Stormacq

6
如果你正在使用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


1
作为 ec2-user 用户,我将能够创建一个目录到 /var/www。ec2-user 是用户和组名。
步骤 01 将 /var/www 目录的组更改为 ec2-user 组。
步骤 02 授予 ec2-user 组读、写、执行权限。
 sudo chown -R root:ec2-user /var/www   
 sudo chmod -R 770 -R /var/www

之后,您将能够创建目录到 /var/www。希望这个建议对您的问题有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接