(Django)删除www-data拥有的文件(我是其中的成员)的权限被拒绝

时间:2013-09-10 10:00:23

标签: python django permissions denied

我有一个内置在 Django 的网站,允许用户上传文件。然后处理该文件并创建一堆其他文件。这些文件归我的帐户所属的用户/组 www-data 所有。其他人编写了创建这些文件的脚本,并使用了我不熟悉的程序。这些文件具有rw-r-r--权限,我可以手动删除它们以及通过网站删除它们。

然后网站调用“ collectstatic ”Django命令将这些文件(由www-data拥有)复制到static_root目录。这些文件我无法手动删除,也无法让网站调用脚本删除它们。我收到“权限被拒绝”错误。最初这些文件与他们从中复制的文件(rw-r - r--)具有相同的权限,但我设法通过扩展django StaticFilesStorage对象来获得rw-rw-rw,如下所示:

from django.contrib.staticfiles.storage import StaticFilesStorage
import os

class MyStaticFilesStorage(StaticFilesStorage):        
    def save(self, name, content):
        os.umask(0)
        super(MyStaticFilesStorage, self).save(name, content)

我今年夏天刚刚开始使用Django和Python,所以我真的不熟悉它。任何帮助,将不胜感激。我不明白我如何删除对我所属的组具有“写入”权限的文件。


修改

我认为问题所在:创建文件的程序为他们创建了一个具有drwxrwxrwx权限的目录。 “ collectstatic ”将此目录复制到我的static_root目录,并且该新目录上的permsissions是drwxr-xr-x。

2 个答案:

答案 0 :(得分:0)

要删除类似unix的environemnt中的文件,您需要对目录具有写权限,而不是文件本身。

所以尝试chmod 775你的静态文件所在的目录,它应该可以工作。

BTW:以上述方式修补StaticFilesStorage并不是一个很好的解决方案,无论如何都不应该被要求。

答案 1 :(得分:0)

collectstatic使用FILE_UPLOAD_PERMISSIONSFILE_UPLOAD_DIRECTORY_PERMISSIONS(后者在Django 1.7中是新的)。

请参阅https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic