Python mkdir错误的拥有者

时间:2014-01-16 17:03:00

标签: apache python-2.7 mod-wsgi

我对这个问题感到困惑,请帮忙:

为DJANGO运行DJANGO,Python 2.7,Apache [mod_wsgi]。当mkdir或文件写入发生时,用户/组始终是root:root。父目录全部归Apache UID / GID所有。

  1. 如果没有直接编写root:root来拥有dir,那么Python在世界上如何通过Apache做一些如此危险的事情呢?
  2. 我不介意通过os.chown()明确强制所有者,但为了更好的安全实践,我宁愿它选择正确的权限。关于为什么会发生这种情况的任何想法?

  3. 根据要求,更多细节:

    这是父目录:

    drwxrwxrwx.  7 apache apache 4096 Jan 16 00:57 archives
    

    这是使用archives目录中的os.mkdir()创建的文件夹:

    drwxr-xr-x. 3 root   root   4096 Jan 16 00:57 test_dir
    

    我正在使用Apache作为服务运行Enterprise Linux:

     [root@s2 archives]# ps wwwwwwwwwwwwwaux | grep httpd
     apache   21634  0.7  5.2 1321760 101400 ?      Sl   Jan12  52:04 /usr/sbin/httpd
     apache   21657  0.0  0.5 329104 10724 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21658  0.0  0.5 329248 10740 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21659  0.0  0.5 329264 10756 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21660  0.0  0.5 329280 10796 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21661  0.0  0.5 329104 10684 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21662  0.0  0.5 329280 10796 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21663  0.0  0.5 329248 10740 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21664  0.0  0.5 329104 10664 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21665  0.0  0.5 329104 10684 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   21666  0.0  0.5 329248 10760 ?        S    Jan12   0:05 /usr/sbin/httpd
     apache   22705  0.0  0.5 329256 10756 ?        S    Jan13   0:05 /usr/sbin/httpd
     apache   22711  0.0  0.5 329240 10696 ?        S    Jan13   0:05 /usr/sbin/httpd
     apache   22752  0.0  0.5 329280 10776 ?        S    Jan13   0:03 /usr/sbin/httpd
     apache   22806  0.0  0.5 329104 10648 ?        S    Jan13   0:02 /usr/sbin/httpd
     root     25238  0.0  0.0 103236   864 pts/0    S+   17:19   0:00 grep httpd
     root     25893  0.0  0.6 326980 13092 ?        Ss    2013   3:52 /usr/sbin/httpd
    

    如您所见,主服务以root(标准)运行,子进程以apache用户(标准)分叉。我可以在同一台服务器上通过Apache在同一目录中执行PHP或Perl,并获得正确的权限:

     drwxr-xr-x. 3 apache apache 4096 Jul 19 23:39 sqa-test1-php
     drwxr-xr-x. 3 apache apache 4096 Jul 22 19:22 sqa-test2-perl
     drwxr-xr-x. 3 apache apache 4096 Dec  4 21:31 sqa-test3-ruby
    

    这是我用于测试的WSGI配置:

      WSGIScriptAlias / "apache/conf/Extra/django_nix.wsgi"
    

    - ===== -

    我无法对Ardin发表评论,因为我使用的是我的工作帐户,而不是我的个人帐户。我明白你在说什么,但那会回到我上面提到的第一点。允许这样做是一个巨大的安全风险。从本质上讲,有人可以轻松破解文件上传并以root身份执行 - 几分钟后我就可以删除所有备份,下载所有数据库,清除文件系统,更改root用户密码,清除内核并重新启动服务器。 Apache用户没有shell访问权限,因此通过该用户运送和执行文件是保护Web服务器的最佳方法之一。我只知道十多年来一直在与我的服务器这样做的脚本小伙伴。作为旁注:我是Web Space中的Python新手。

1 个答案:

答案 0 :(得分:0)

你的问题缺乏信息。

  • 显示父目录的统计信息(不是所有目录,只是直接父目录)
  • 您的进程运行的用户是什么?提供ps输出,例如

    ps auxw | grep apache

关于你的问题:

  1. 在这个世界中,Python就像任何其他编程语言一样尊重底层的Unix库。是的,以root身份运行的进程可以创建root拥有的目录。你为什么要这么做?

  2. 你不应该使用chown来解决这个问题,而应该首先了解它为什么会发生这种情况,到目前为止你还没有提供任何有用的证据。