从 web 服务器运行 bash 脚本,chmod 的其他目录

从 web 服务器运行 bash 脚本,chmod 的其他目录

我想从 web 服务器运行 chmod 的其他文件夹的 bash 脚本。

我的 bash 文件(它归root:www-data,所有chmod 775):

#!/bin/bash
chown root:www-data /etc/cron.d/gtest
chown root:www-data /etc/cron.d/teststtest

运行 bash 脚本的 php 文件:

<?php
exec("/var/www/html/script/script.sh");
?>

当我以 root 身份登录并从命令行 (putty) 运行该文件时 - 一切正常。但无法从 Web 服务器运行它。它可以运行,但无法 chown。有什么解决办法吗?

答案1

运行 PHP 的 Web 服务器所用的用户没有访问chown这些目录的权限。并且它不应该有任何此类权限,因为这将是一个很大的安全问题。

您需要找到其他方法来实现您想要做的事情。

答案2

诊断此问题所需的所有工具都在您的指尖,但您似乎并没有使用它们。

php执行命令返回可用于诊断问题的信息,具体来说

字符串 exec (字符串 $command [, 数组 &$output [, int &$return_var ]] )

返回的字符串可能包含有用的信息。如果没有,那么您可以通过提供一个数组来添加输出来获取扩展信息。阅读 php exec 命令的其余文档也会很有用,因为其中包含更多有用的信息。

答案3

这里存在一些巨大的安全隐患,因此你需要非常小心。你可以将 www-data 用户放在 sudoers 文件中,并提供要以 root 身份运行的脚本的明确路径。至关重要的你说仅有的您希望以 root 身份运行的脚本,否则某些恶意程序可能会闯入您的整个系统。

visudo

然后添加以下内容:

www-data ALL = NOPASSWD: /var/www/html/script/script.sh

您应该能够像这样调用该脚本:

<?php exec("sudo /var/www/html/script/script.sh"); ?>

说实话,我对此并不特别热衷。www-data 用户应该拥有尽可能少的权限。虽然我们通过明确说明我们想要以 root 身份执行的内容大大减少了攻击媒介,但将这些chown操作转移到 root 的 crontab 中定期运行可能是值得的,而不是通过脚本调用(如果你真的需要以这种方式改变这些目录,这似乎也是另一个巨大的安全漏洞)。

相关内容