允许网络服务器删除上传的文件,如何?
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。我会更新它作为答案
我正在 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。我会更新它作为答案