【问题标题】:PHP rename() Ignoring Permissions?PHP rename() 忽略权限?
【发布时间】:2011-09-26 19:49:43
【问题描述】:

环境

  • PHP -V 输出: PHP 5.3.5-1ubuntu7.2 和 Suhosin-Patch (cli)(构建时间:2011 年 5 月 2 日 23:00:17) 版权所有 (c) 1997-2009 The PHP Group Zend Engine v2.3.0,版权所有 (c) 1998-2010 Zend Technologies
  • cat /etc/issue 输出: Ubuntu 11.04
  • Apache2 -V 输出: 服务器版本:Apache/2.2.17 (Ubuntu) 服务器构建时间:2011 年 9 月 1 日 09:31:14
  • 浏览器关于输出: Firefox 6.0.2

PS -AUX输出

root      2943  0.0  0.3 206420 12428 ?        Ss   Sep19   0:20 /usr/sbin/apache2 -k start
www-data 18658  0.0  0.2 208552 11096 ?        S    Sep25   0:00 /usr/sbin/apache2 -k start
www-data 18659  0.0  0.3 208976 12036 ?        S    Sep25   0:00 /usr/sbin/apache2 -k start
www-data 18660  0.0  0.3 210532 12476 ?        S    Sep25   0:00 /usr/sbin/apache2 -k start
www-data 18661  0.0  0.3 210276 11820 ?        S    Sep25   0:00 /usr/sbin/apache2 -k start
www-data 18662  0.0  0.2 206948 10236 ?        S    Sep25   0:00 /usr/sbin/apache2 -k start
www-data 20037  0.0  0.3 208976 12128 ?        S    08:22   0:00 /usr/sbin/apache2 -k start
www-data 20039  0.0  0.3 209132 11748 ?        S    08:23   0:00 /usr/sbin/apache2 -k start
www-data 20120  0.0  0.3 209004 12000 ?        S    09:04   0:00 /usr/sbin/apache2 -k start

文件权限

drwxr-xr-x 2 www-data www-data   4096 2011-09-26 15:24 .
drwxr-xr-x 4 www-data www-data   4096 2011-08-26 11:31 ..
-rw-r--r-- 1 root     root     161976 2011-08-26 16:26 market.txt
-rw-r--r-- 1 root     root          0 2011-09-26 14:55 test1.txt
-rw-r--r-- 1 root     root          0 2011-09-26 14:55 test2.txt
-rw-r--r-- 1 root     root          0 2011-09-26 14:55 test3.txt
-rw-r--r-- 1 root     root          0 2011-09-26 14:55 test4.txt
-rw-r--r-- 1 root     root          0 2011-09-26 15:02 test5.txt

代码

rename($file, "$dest/$file");

问题

当我对上面“文件权限”部分中列出的文件运行上述代码时,它会正确地将文件从当前位置移动到新位置并删除原始位置。当 apache2 作为 www-data 运行并且文件由 root 拥有并且仅对非 root 用户具有读取权限时,这怎么可能?在 PHP 文档中它说:

如果目标文件系统不允许对文件进行 chown() 或 chmod() 系统调用,则可能会生成警告 - 例如,如果目标文件系统是 FAT 文件系统。

rename() 在这个过程中是否调用了这些系统函数中的任何一个?如果是这样,为什么?无论如何,这并不重要,因为 www-data 无论如何都不应该能够对 root 拥有的文件进行 chown/chmod。

谁能给我解释一下这是怎么回事?

附加信息

  • 我已经使用 root 和 www-data 拥有的 PHP 脚本进行了尝试,它可以工作。

我试图提供尽可能多的相关信息,但如果您需要其他信息,请告诉我。

【问题讨论】:

    标签: php apache ubuntu-11.04


    【解决方案1】:

    移动不会“删除”原始文件,除非移动跨越文件系统边界。在单个文件系统中,移动只是重写相关的目录条目,因此看起来您已经复制/删除了文件,但您所做的只是一些家务。由于 www-data 拥有相关目录,因此它可以根据需要重写代表这些文件的目录条目,而永远不会触及实际文件。

    【讨论】:

    • 这是有道理的。我测试了将文件夹 chowning 到 root:root 并且我无法移动文件。谢谢!
    【解决方案2】:

    移动文件时,您不是在编辑文件本身,而是在编辑它们所在的目录。在您的情况下,该目录归www-data(apache 进程)所有

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2015-12-11
      • 2016-04-05
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多