我有一个shell脚本,在执行时会生成一些文件夹并将文件复制到其中。我还有一个node.js" program",它完全与shell脚本相同。
当我使用PHP shell_exec
调用shell脚本时,我收到一个权限错误,基本上说shell脚本没有制作文件夹的权限。我做了一些谷歌搜索,结果发现我必须设置无密码的sudo,谁知道还有什么其他技巧来解决这个问题。
然而,我对节点做了一个完全相同的事情,当我运行节点" program"通过像以前一样用{{1}}调用它,似乎这个节点" program"有权做任何事情。
这背后的原因是什么?为什么"节目"运行时有权限,但是shell脚本没有?这是一种合法的方式,例如,文件系统操作(调用PHP中的node.js创建的东西)?因为如果我尝试用PHP执行相同的操作,那么摆弄权限会很烦人。
答案 0 :(得分:0)
Php由apache或类似的东西运行,并在用户www-data或http或类似的东西下运行。您的节点服务器可能在piwwoli用户下运行。 piwwoli可以在/ home / piwwoli下创建一个目录,但www-data不能。
程序和shell脚本在运行时都有权限,问题是谁在运行它们。
您可以创建一个可由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