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

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

我的bash文件(它由root:www-data拥有root:www-datachmod 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"); ?> 

当我用rootlogin的时候,从命令行(putty)运行这个文件 – 没关系。 但不能从networking服务器运行。 它运行,但不chown。 任何解决scheme

PHP下运行的Web服务器的用户没有权限来使用这些目录。 它不应该有任何这样的特权,因为这将是一个很大的安全问题。

你需要find一些其他的方式来实现你想要做的事情。

所有你需要诊断这个问题的工具都在你的指尖,但你似乎没有使用它们。

php exec命令会返回可用于诊断问题的信息,具体而言,

string exec(string $ command [,array&$ output [,int&$ return_var]])

返回string可能包含有用的信息。 如果没有,那么你可以得到扩展的信息bu提供一个数组的输出添加到。 阅读php exec命令的其他文档也会非常有用,其中有更多有用的信息。

这里有一些巨大的安全问题,所以你需要非常小心。 您可以将www-data用户放置在sudoers文件中,并为您希望以root用户身份运行的脚本提供显式path。 你 需要陈述你希望以root身份运行的脚本,否则有些歹徒可能会触发你的整个系统。

visudo

然后添加以下内容:

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

你应该可以像这样调用脚本:

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

如果我是诚实的,我并不特别热衷于此。 www数据用户应尽可能至less拥有权限。 虽然我们通过明确地说明我们想要作为根来执行什么来大幅降低攻击向量,但是可能值得将这些chown操作转移到root的crontab中以定期运行,而不是由脚本调用(如果实际上需要 chown这样的目录,这似乎也是另一个巨大的安全漏洞)。