我被这个问题难住了,请大家帮忙:Python中的mkdir错误的所有者
运行Django,Python 2.7版,阿帕奇[mod_wsgi的] Django的。当mkdir或文件写入发生时,用户/组始终是root:root。父目录全部由Apache UID/GID拥有。
- 在世界上,Python如何通过Apache直接编码root来做一些如此危险的事情:根目录拥有目录?
- 我不介意通过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的新手。
是不是因为Python进程正在由appache运行,它本身正在root下运行?在这种情况下,所有者当然应该是root:root – adrin
考虑到问题的性质,您可以直接在我的Graham.Dumpleton上的Gmail地址与我联系,以便进一步调查。谢谢。 –
我有同样的问题,使用普通的旧Python脚本。作为常规用户,我正在Suse 13.1下运行。问题与我是从Spyder还是从控制台运行,甚至是在控制台上启动Python并使用os.mkdir() - 结果始终由root拥有! – Zak