Я озадачен этим вопросом, пожалуйста, помогите:Python MkDir неправильно владелец
Запуск Джанго, Python 2.7, Apache [mod_wsgi] для Джанго. Когда mkdir или запись файла происходит, пользователь/группа всегда root: root. Все родительские каталоги принадлежат Apache UID/GID.
- Как в мире Python мог бы сделать что-то настолько опасное через Apache без прямого кодирования root: 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 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 в веб-пространстве.
Не так ли, потому что процесс Python запускается приложением appache, который сам запускается под root? В этом случае владельцем, конечно же, должен быть root: root – adrin
Учитывая характер проблемы, вы можете связаться со мной прямо на моем Graham.Dumpleton по адресу Gmail об этом, чтобы его можно было исследовать дальше. Благодарю. –
У меня такая же проблема, используя простой старый скрипт python. Я работаю под Suse 13.1, как обычный пользователь. Проблема не зависит от того, запускаюсь ли я из Spyder или с консоли, или даже запускаю Python на консоли и используя os.mkdir() - результат всегда принадлежит root! – Zak