2014-01-16 41 views
3

我被这个问题难住了,请大家帮忙:Python中的mkdir错误的所有者

运行Django,Python 2.7版,阿帕奇[mod_wsgi的] Django的。当mkdir或文件写入发生时,用户/组始终是root:root。父目录全部由Apache UID/GID拥有。

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

按照要求,更多的细节:

这里是父目录:

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

下面是使用存档目录内os.mkdir()创建的文件夹:

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

我运行Enterprise Linux的无线网络个的Apache作为服务运行:

[[email protected] 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 

正如你可以看到,主服务为根(标准)运行,并且子进程分叉为apache用户(标准)。我可以在同一台服务器上执行PHP或Perl,通过Apache,在同一目录中,我得到了正确的权限:

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" 

- == === -

我不能评论阿尔丁,因为我使用我的工作帐户,而不是我的个人帐户。我明白你在说什么,但那会回到我上面提到的第一点。允许这是一个巨大的安全风险。从本质上讲,有人可以轻松入侵文件上传并以root身份执行 - 几分钟后,我可以删除所有备份,下载所有数据库,擦除文件系统,更改root用户密码,清除内核并重新启动服务器。 Apache用户没有shell访问权限,所以通过该用户发布和执行文件是保护您的Web服务器的最佳方式之一。我只知道这个来自斗争脚本小子十多年来一直这样做到我的服务器。作为一个方面说明:我是网络空间中的Python的新手。

+0

是不是因为Python进程正在由appache运行,它本身正在root下运行?在这种情况下,所有者当然应该是root:root – adrin

+0

考虑到问题的性质,您可以直接在我的Graham.Dumpleton上的Gmail地址与我联系,以便进一步调查。谢谢。 –

+0

我有同样的问题,使用普通的旧Python脚本。作为常规用户,我正在Suse 13.1下运行。问题与我是从Spyder还是从控制台运行,甚至是在控制台上启动Python并使用os.mkdir() - 结果始终由root拥有! – Zak

回答

0

你的问题缺乏信息。

  • 告诉我们的父目录的统计信息(不是所有的人,就直接父)
  • 什么用户在你的进程中运行的?提供ps输出,例如

    ps auxw | grep的阿帕奇

至于你的问题:

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

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