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



我有一个用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目录中,该新目录上的属性是drwxr-xr-x。

要在类似 unix 的环境中删除文件,您需要对目录的写入权限,而不是文件本身。

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

顺便说一句:恕我直言,以上述方式修补静态文件存储不是一个好的解决方案,无论如何都不需要。

>collectstatic使用FILE_UPLOAD_PERMISSIONSFILE_UPLOAD_DIRECTORY_PERMISSIONS(后者是Django 1.7中的新功能)。

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

相关内容

最新更新