2014-01-16 40 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來解決這個問題,而應該理解爲什麼它首先發生,到目前爲止你還沒有提供任何有用的證據。