gpt4 book ai didi

php - PHP 中的 "exec(' sh foo.sh ')"不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:47 26 4
gpt4 key购买 nike

我最近在我的 Linux 机器上设置了我的 Apache2 服务器。现在我想执行一个 PHP 脚本 (index.php),它运行一个 shell 脚本 (foo.sh),在我的主目录中创建一个文件夹,但该目录没有创建。

这是原来的两个文件:

foo.sh:

#!bin/bash

mkdir /home/lorenzo/testDir

索引.php:

<?php

exec('sh test.sh');

?>

所以,我认为问题可能是由于权限或其他原因而发生的,事实上在我将文件更改为之后:

foo.sh:

#!bin/bash

echo "Hello world"

索引.php:

<?php

$temp=exec('sh test.sh');
echo $temp;

?>

我在我的网站上看到了输出 Hello World

因此执行 PHP 脚本并运行 shell 脚本。但是为什么shell脚本不能执行mkdir命令呢?

最佳答案

这确实很可能是权限问题。

您首先必须弄清楚 apache 运行在哪个用户。这通常是 www-data(在 Debian-ish Linux 上,例如 Ubuntu)或 apache(在 RedHat-ish Linux 上)或类似的东西。 A ps -eF | grep apache 将显示用户。

弄清楚之后,请确保 apache 用户在您的主目录中具有适当的权限。您可以将它添加到您的用户组(使用 usermod -a -G ... 然后 chmod g+w ~)或允许为 all 用户 (chmod o+w ~)。

但是,这两者都是的想法。您的 php 脚本(或以 apache 用户身份运行的任何其他程序)可能会被侵入和破解,从而使您的主目录处于开放状态,供恶意攻击者修改和 rm -rf

此外,如果您运行的是 RedHat-ish Linux,您遇到 SELinux,它在默认情况下根本阻止 apache 访问用户目录。在这种情况下,您还必须设置 setsebool -P httpd_enable_homedirs on

相反,我建议您使用不同的目录并授予您的用户完全访问权限。类似于 /var/www/testDir 的内容,将 apache 作为所有者和组,并将您自己添加到 apache 用户组可能是一个明智的想法。

关于php - PHP 中的 "exec(' sh foo.sh ')"不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com