无法向运行在共享EFS上的Apache的EC2实例写入数据。

0

【以下的问题经过翻译处理】 我有一个自动扩展组,在启动模板中设置了以下EFS:

sudo yum install -y amazon-efs-utils
sudo mount -t efs fs-0f13ef1378a09e59c:/ /efs
sudo mount -t efs fs-0f13ef1378a09e59c:/html /var/www/html
sudo mount -t efs fs-0f13ef1378a09e59c:/test /home/test
# Reference: https://stackoverflow.com/questions/57260276/using-same-aws-efs-to-share-multiple-directories

我已经按照此指南设置了PHP8.0和Apache:https://gist.github.com/syad9000/dbc855a11b306cb454b283a83fe479f2。这会创建源AMI,我使用它来生成两个EC2实例,在自动扩展组中使用EFS来同步/var/home/html/test文件夹和/home/test文件夹。我已经设置了Apache,将端口80服务于/var/www/html/test文件夹。

我使用ALB将请求重定向到已创建的目标组的合格域名。我可以很好地提供诸如/index.html或/index.php之类的文件。PHP代码在浏览器中工作。

我的问题是,我正在尝试创建一个API,它将基于GET命令运行存储的shell脚本。例如,我发出一个GET请求到/index.php?build=true。我的PHP脚本正在尝试执行/var/www/html/test/build.sh脚本。

我收到一个错误消息:

<br />
<b>Warning</b>:  file_put_contents(/var/www/html/test/.build/error.log): Failed to open stream: Permission denied in <b>/var/www/html/test/_resources/php/functions.php</b> on line <b>11</b><br />

当我通过控制台登录时,我可以无错误运行脚本。当我尝试使用Web浏览器或curl运行时,我会遇到以上错误。当我以 apache 用户身份登录控制台并使用的时候是这样的:

sudo su -s /bin/bash -c '/var/www/html/build.sh' apache

Apache 配置中的权限问题源于哪里?是 EFS 还是 ALB?

profile picture
专家
已提问 6 个月前69 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

祝你有个愉快的一天!

在继续之前,我想告诉你使用Apache或PHP时,EFS不需要任何特殊设置,如果具备所需权限,则可以正常访问。

从错误信息来看,你会发现它说“Permission denied”,这意味着运行php脚本的用户没有足够的权限写入目标文件“/var/www/html/test/”。

为了确保这点,我在我的实验室中进行了测试,只要添加了必要的权限,我就能够写入EFS下的目标文件,而没有任何问题。我在我的测试实例上挂载了EFS文件系统并复制了相同的设置,但是该用户却出现了错误。后来我添加了所需的posix权限,我就能访问这些文件了。

我建议你确认你的efs文件夹及其子目录的权限和所有权。此外,在执行对目标文件夹“/var/www/html/test/”的写操作时,我还建议你识别与PHP程序相关联的用户。

此外,为了测试,你也可以尝试将目标文件“/var/www/html/test/”的权限设置为完全权限(777),看看是否能解决问题。

[+]https://docs.aws.amazon.com/efs/latest/ug/accessing-fs-nfs-permissions.html

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则