2014-01-16 2 views
3

Я озадачен этим вопросом, пожалуйста, помогите:Python MkDir неправильно владелец

Запуск Джанго, Python 2.7, Apache [mod_wsgi] для Джанго. Когда mkdir или запись файла происходит, пользователь/группа всегда root: root. Все родительские каталоги принадлежат Apache UID/GID.

  1. Как в мире Python мог бы сделать что-то настолько опасное через Apache без прямого кодирования root: 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 wi го 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 

Как вы можете видеть, основная служба работает как корневой (стандарт) и дочерние процессы раздвоенные как пользователь апача (стандарт). Я могу выполнить 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" 

- == === -

Я не могу комментировать Ардина, потому что я использую свою учетную запись, а не свою личную учетную запись. Я понимаю, что вы говорите, но это вернется к пункту № 1, который я сделал выше. Это огромный риск для безопасности. По сути, кто-то может легко взломать загрузку файла и выполнить его как root - через несколько минут я смогу удалить все ваши резервные копии, загрузить все ваши базы данных, уничтожить вашу файловую систему, изменить пароль пользователя root, уничтожить ядро ​​и перезагрузить сервер. У пользователя Apache нет доступа к оболочке, поэтому отправка и выполнение файла через этого пользователя - один из лучших способов защитить ваш веб-сервер. Я знаю это только от борьбы с детьми-сценаристами в течение более десяти лет, которые делают это все время на моих серверах. В качестве примечания: я новичок в 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, чтобы исправить это, но лучше понять, почему это происходит в первую очередь, и до сих пор вы не предоставили никаких полезных доказательств.

Смежные вопросы