PHP:shell_exec shell 脚本与 Linux 上的shell_exec程序(权限)


PHP: shell_exec a shell script vs. shell_exec a program on linux (permissions)

我有一个shell脚本,它在执行时会创建一些文件夹并将文件复制到其中。我还有一个节点.js"程序",它完全按照 shell 脚本的作用执行。

当我使用 PHP 的 shell_exec 调用 shell 脚本时,我收到一个权限错误,基本上是说 shell 脚本没有创建文件夹的权限。我做了一些谷歌搜索,结果发现我必须设置无密码的sudo,谁知道还有什么技巧来解决这个问题。

但是,我对node做了完全相同的事情,当我像以前一样用shell_exec调用节点"程序"来运行节点"程序"时,似乎这个节点"程序"有权做任何事情。

这背后的原因是什么?为什么"程序"在运行时有权限,而 shell 脚本没有?例如,这是一种合法的文件系统操作方式(从 PHP 调用用 node .js 制作的东西(?因为如果我尝试使用 PHP 执行相同的操作,摆弄权限很烦人。

Php由apache或类似的东西运行,并在用户www-data或http或类似的东西下运行。您的节点服务器可能在 piwwoli 用户下运行。Piwwoli可以在/home/piwwoli下创建一个目录,但www-data不能。

程序和 shellscript 在运行时都有权限,问题是谁在运行它们。

您可以创建一个可由 www-data 和 piwwoli 写入的目录:

mkdir /path/to/dir
chmod o+w,g+w /path/to/dir
chown piwwoli.www-data /path/to/dir # maybe you'll need sudo for this to work