允许网络服务器删除上传的文件,如何?

Allowing web server to delete uploaded files, how?

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

为了允许 Web 服务器写入该目录,我 运行 这个(我在 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)

我收到错误 "Warning: unlink(path/to/file): Permission denied"。

当使用 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 的“+”。

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

我认为这是因为您的文件夹不属于处理 php.

的 apache 用户

因为您创建文件夹 /private_files/ 的另一个用户不是 apache 用户,因为 app/cache 是通过程序创建的,所以他拥有它并且可以 create/delete。我会更新它作为答案