PHP让www数据像其他用户一样运行命令

PHP让www数据像其他用户一样运行命令,php,apache,suexec,Php,Apache,Suexec,因此,我想在php脚本中执行以下命令: exec("/path/to/command"); 因为是www数据用户运行php脚本,所以我目前无法运行此命令。 我读过一些关于suexec能够像其他用户一样运行命令的文章。我觉得很难理解这是怎么回事 我已经安装了suexec并编辑了/etc/apache2/suexec/www数据文件,并添加了: /home/user_to_run_command/script.php SuexecUserGroup user_to_run_command use

因此,我想在php脚本中执行以下命令:

exec("/path/to/command");
因为是www数据用户运行php脚本,所以我目前无法运行此命令。 我读过一些关于suexec能够像其他用户一样运行命令的文章。我觉得很难理解这是怎么回事

我已经安装了suexec并编辑了/etc/apache2/suexec/www数据文件,并添加了:

/home/user_to_run_command/script.php
SuexecUserGroup user_to_run_command user_to_run_command
我还编辑了/etc/apache2/sites enabled/000 default并添加了:

/home/user_to_run_command/script.php
SuexecUserGroup user_to_run_command user_to_run_command

我遗漏了什么吗?

只有当PHP在CGI模式下执行时,suEXEC才会工作,但如果PHP作为apache2运行,它就不会工作 模块。我想你是把它作为一个模块来运行的


另一种方法是将所有权转移给所需用户,然后设置位:

现在,当执行
您的.program
时,它拥有权限,就好像它是由它的所有者执行的一样。关注我链接的wiki文章以获取更多信息


旁注:这只适用于二进制文件(不适用于shell脚本,因为它们是由没有suid位集的shell二进制文件执行的)

我遇到了同样的问题,最终找到了一个解决方案,据我所知,它既安全又简单。这种方法的一个缺点是,在发布安全更新时,您必须注意这些更新

我们将要做的是制作我们自己的特殊外壳,并将其发送给我们希望任务执行的用户。为了保持安全,此用户应该只是一个普通用户,没有广泛的系统权限,并将脚本放在其他人不允许的地方。现在我们让php执行一个使用这个特殊shell的脚本,该脚本中的所有命令都将作为所选用户执行

实际上:

sudo mkdir /usr/lib/specialshell
sudo chown user_who_may_run_command:root /usr/lib/specialshell
sudo chmod 700 /usr/lib/specialshell
sudo cp /bin/perl specialperl
sudo chown user_to_run_command:usergroup_to_run_command specialperl
sudo u+s specialperl
sudo mv specialperl /usr/lib/specialshell
现在,我们制作一个名为command.script的脚本,其中包含:

#!/usr/lib/specialshell/specialperl
$ENV{"PATH"} = "/usr/bin";
system("/path/to/command");
根据我们使用的php代码:

exec("/path/to/command.script");
et-voila,没有代码更改,只是php中的命令名


编辑:只使用perl作为shell,所以将bash更改为perl,并将shell放在安全的地方

是的,我认为php是作为apache2用户运行的,这是www数据,对吗?这就是我在php脚本中执行exec('whoami')时得到的结果。您使用的是CGI还是libapache2-mod-php5?suexec将仅与CGI一起工作。我建议的解决方法对你有用吗?(取决于您的需要)如果没有,您必须设置一个cgi环境。到目前为止,我所做的是chown www data/path/to/command,然后是chmod u+s/path/to/command,这就是您的意思,对吗?还没有为我做。正如我所说的,它只适用于二进制文件。。最简单的解决方法是用C编写包装器