Python и os.chroot - PullRequest
       22

Python и os.chroot

2 голосов
/ 26 января 2009

Я пишу веб-сервер на Python как хобби-проект. Код предназначен для машин * NIX. Я новичок в разработке для Linux и даже новее для самого Python.

Я беспокоюсь о том, что люди выбегают из папки, которую я использую для обслуживания сайта. Самый очевидный способ сделать это - отфильтровать запросы на такие документы, как /../../etc/passwd. Тем не менее, я беспокоюсь, что могут быть хитрые способы подняться по дереву каталогов, о которых я не знаю, и, следовательно, мой фильтр не поймает.

Я рассматриваю возможность добавления с помощью os.chroot, чтобы корневым каталогом был сам веб-сайт. Это безопасный способ защиты от этих атак? Есть ли какие-либо потенциальные подводные камни, которые могут повредить мне в будущем?

Ответы [ 2 ]

7 голосов
/ 26 января 2009

Да, есть подводные камни. Мудрая безопасность:

  1. Если вы запускаете с правами root, всегда есть способы вырваться. Поэтому сначала chroot (), а затем ПОСТОЯННО отбросьте привилегии другому пользователю.
  2. Не помещайте ничего, что не является абсолютно обязательным, в дерево chroot. Особенно нет файлов suid / sgid, именованных каналов, доменных сокетов unix и узлов устройств.

Python, потому что весь процесс загрузки модуля облажался. Python просто не создан для таких сценариев. Если ваше приложение умеренно сложное, у вас будут проблемы с загрузкой модулей.

Я думаю, что гораздо более важным, чем использование chroot, является использование непривилегированного пользователя и простое использование разрешений файловой системы, чтобы этот пользователь не мог прочитать что-либо важное.

3 голосов
/ 26 января 2009

Выезд Витая . twistd поддерживает сброс привилегий и операцию chroot из коробки. Кроме того, у него есть целая среда для написания сетевых сервисов, демонов и почти всего.

...