PHP从root用户,mkdir权限被拒绝



今天我遇到了一种奇怪的行为,我不明白。
我正在尝试使用PHP 7.0脚本使用mkdir()函数在本地磁盘上创建目录,但它产生"permission denied"错误。

根据我的经验(虽然很少),这总是意味着执行PHP脚本的用户没有被授权写入目录。这对我来说很有意义,在开发web应用程序时通常不是问题。当使用Apache时,默认的PHP用户是www-data,我没有遇到任何问题。

在这种情况下,虽然我使用的是Zend Framework 2,特别是我使用它的控制台路由,所以我不会通过Apache(纠正我,如果我错了)。我调用我的脚本为:

php index.php route name [--options]

与我的用户(这是不是根,而是sudoer)。如果我输出PHP的get_current_user()函数的结果,问题就开始了,因为我得到'root'而不是我期望的用户名。不仅如此,当在以下目录中使用mkdir()时,我得到'permission denied'

drwxr-xr-x 2 www-data www-data 4096 Aug 19 21:21 logs

我从中理解的是,我可能不是PHP所建议的根用户。如果我然后用'sudo'在前面运行脚本,我就能够创建所需的文件夹,但权限与我在mkdir()函数中指定的权限不匹配。如果我写mkdir('path', 0777),我得到:

drwxr-xr-x 3 root root

这个我不明白。所以,如果有人能帮我找出我做错了什么,我会非常感激。请记住,我正在使用Zend Framework 2的事实可能会影响这种行为(尽管我并不热衷于这样想)。

提前感谢您的宝贵时间。

编辑。

我刚刚意识到我没有告诉你我的最终目标是什么,所以我现在要把事情放在上下文中,对不起。

我想做的是使用这个脚本(从或从我的用户,最好从我的用户运行)在

中创建这些文件夹
/var/www

,然后能够读取和写入文件(和可能的其他文件夹)到那些目录与标准的PHP用户,在我的情况下是www-data

您的PHP作为apache扩展运行,并使用apache权限。如果需要以根用户身份创建文件夹,可以为其创建cron脚本,它将监视某些文件中的更改,并以根用户身份创建目录。另一种方法是使用suid扩展,但它有点复杂。

最新更新