我被這個問題難住了,請大家幫忙: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