无法向运行在共享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
EXPERTE
gefragt vor 5 Monaten65 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen