【问题标题】:Allowing web server to delete uploaded files, how?允许网络服务器删除上传的文件,如何?
【发布时间】:2015-05-26 18:22:39
【问题描述】:

我正在 symfony2 中实现文件上传。我的文件实体归用户所有,代表上传的文件。除了管理员和所有者之外,任何人都不能访问上传的文件。为了解决这个问题(除了保护控制器),我将它们保存在不在 /web/ 下的目录中。我将此目录命名为 /private_files/(位于项目的根目录)。

为了允许网络服务器写入该目录,我运行了这个(我在 Mac OS X Mavericks 上):

$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" private_files/

$ sudo chmod +a "www allow delete,write,append,file_inherit,directory_inherit" private_files/

上传工作正常。但是,当尝试通过控制器删除文件时,使用

unlink($path)

我收到错误“警告:取消链接(路径/到/文件):权限被拒绝”。

当使用ls -al 在终端上列出文件时,我得到了

drwxr-xr-x+ 3  myuser   staff      204 Mar 23 11:59 .
drwxr-xr-x  24 myuser   staff      816 Mar 21 19:51 ..
-rw-r--r--  1  _www     wheel  7395585 Mar 23 11:59 uploaded_file_1

我注意到上传的文件缺少可执行权限和代表 ACL 的“+”。

允许使用 unlink 方法删除这些文件的正确方法是什么?文件是否应该继承 ACL(如果是,如何继承)?还是应该在目录上应用 chmod?非常感谢。

【问题讨论】:

  • 我认为这是因为您的文件夹不属于处理 php 的 apache 用户。
  • 好的,所以用sudo chown www:wheel private_files 更改所有者和组就可以了,但我仍然想知道为什么相同的 ACL 可以用于 app/cache 而不是我的上传文件夹。
  • 我猜是因为您使用另一个用户而不是 apache 用户创建了文件夹 /private_files/,所以应用程序/缓存是通过程序创建的,因此他拥有它并可以创建/删除。我会将其更新为答案

标签: php symfony upload acl chmod


【解决方案1】:

我认为这是因为您的文件夹不属于处理 php 的 apache 用户。

因为您使用另一个用户而不是 apache 用户创建了文件夹 /private_files/,因为应用程序/缓存是通过程序创建的,因此他拥有它并可以创建/删除。我会将其更新为答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多