【问题标题】:Problems with php shell_exec permissionsphp shell_exec 权限问题
【发布时间】:2013-05-15 17:39:14
【问题描述】:

我正在以 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

【问题讨论】:

  • 你能在sudo su www-data之后检查whoami吗?通常它没有登录shell,你会直接回到root... 这可以解释问题,因为除非www-datamybar 组中,否则它不能在那里写入。

标签: php linux apache2


【解决方案1】:

我认为可以有两种选择:

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

【讨论】:

    【解决方案2】:

    这对我有用:

    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 所有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2018-09-17
      • 2018-06-09
      相关资源
      最近更新 更多