【问题标题】:PHP from root user, mkdir permission denied来自root用户的PHP,mkdir权限被拒绝
【发布时间】:2016-08-19 20:11:35
【问题描述】:

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

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

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

php index.php route name [--options]

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

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

据我了解,我可能不是 PHP 似乎建议的 root 用户。如果我然后在前面运行带有 'sudo' 的脚本,我可以创建所需的文件夹,但权限与我在 mkdir() 函数中指定的权限不匹配。如果我写mkdir('path', 0777),我会得到:

drwxr-xr-x 3 root root

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

提前感谢您的宝贵时间。

编辑。

我刚刚意识到我没有告诉你我的最终目标是什么,所以我现在将事情放在上下文中,抱歉。

我想做的是使用这个脚本(从 rootmy user 运行,最好从 my user 运行)在里面创建这些文件夹

/var/www

然后能够使用标准 PHP 用户(在我的例子中是 www-data

【问题讨论】:

  • 也许是 selinux 引起了问题?
  • 不确定为什么 get_current_user() 返回“root”,但是您的用户不应该能够写入该日志目录是正确的。我假设您不在 www-data 组中,并且它不是世界可写的。作为旁注,请不要创建 777 目录。我知道这是用于测试,但使用 UNIX 组或 setfacl。
  • 啊哈,古老的“不要使用 777”建议。我明白了,谢谢。我只是用它来帮助我更轻松地查明问题而不必担心权限(在虚拟机上,在我的电脑上没有任何重要内容,所以不用担心)。我编辑了这个问题,所以也许你现在可以进一步帮助我

标签: php linux command-line permissions zend-framework2


【解决方案1】:

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

【讨论】:

  • 他在问题中声明他正在以 root 身份从命令行运行脚本。
  • 您好,谢谢您的回答。我已经编辑了我的问题,并提供了一些关于我的实际目标的附加信息,以便您可以为我提供更多帮助。我无法用您当前的答案解决我的问题
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2021-10-22
  • 2016-08-24
  • 2013-07-01
  • 2012-08-13
相关资源
最近更新 更多