php shell_exec权限问题

时间:2013-05-15 17:39:14

标签: php linux apache2

我正在以www-data身份运行而我正在尝试使用shell_exec(/foobar/script/myscript.sh)执行shell脚本,但是当脚本尝试写入时我收到以下错误到日志文件

cannot create /foobar/foo.log: Permission denied 

但是,如果我尝试直接从终端运行脚本,我不会遇到任何问题。即

$ sudo su www-data
$ /foobar/script/myscript.sh
$

知道会发生什么事吗?

我还应该补充一点,我将www-data添加到组mybar中,这是我列出目录时显示的内容

drwxrwxr-x 3 mybar mybar  4096 May 14 14:18 foobar     # ls -l /


-rw-rw-r-- 1 mybar mybar 2824 May 15 09:57 foo.log     # ls -l /foobar

2 个答案:

答案 0 :(得分:1)

我认为可以有两种选择:

  1. web-server和php-fpm在不同的用户下运行(默认情况下不应该这样)。尝试echo shell_exec('whoami');
  2. 在php-fpm进程启动后你已经将www-data添加到mybar所以它仍然“不知道”它是什么(然后我认为重启fpm会有所帮助)。

答案 1 :(得分:1)

这对我有用:

sudo chown www-data:www-data -R foobar/

您尝试创建文件的目录必须属于执行命令的任何人。

您可以输入:

ls -la 

看看它属于谁。

你应该看到这样的事情:

drwxr-xr-x  8 jack jack  4096 Jul 22 11:36 application

当我登录到我的ubuntu机器时,我以jack@jack身份登录,因此我可以在以下目录中创建文件而不发出sudo命令:

drwxr-xr-x  8 jack jack  4096 Jul 22 11:36 application

因为它归当前用户所有。

当您尝试运行通过访问网页执行的脚本时。 www-data是执行命令的用户,因此您尝试创建/修改/删除的任何目录或文件都必须归www-data所有。