Как ограничить область выполнения PHP скрипта include?
Здравствуйте. Возникла следующая задача:
Представте себе веб сервер, на котором у каждого «пользователя» есть своя папка, в которую он может загружать свои скрипты. Скрипты — это модули к открытому API проекта, «пользователь» — это программист допущенный взаимодействовать с системой.
Использование скриптов «пользователей» всегда начинается с корневого index.php, который живет в document_root, далее в зависимости от URL собирается цепочка include, в какой то момент подключается кусочек с которым работал «пользователь».
Так как «пользователь» загружает скрипт на чистом PHP — зону видимости таких функций как file(), file_get_contents(), rmdir() необходимо ограничить и свести к работе внутри доверенной ему категории.
Вопрос может показаться глупым и тривеальным, но хочется найти оптимальный способ решения этой задачи.
Буду рад услышать ваши предложения по этому вопросу!
Да, но будет ли include из цепочки инициализированной в <document_root>/index.php определять область видимости внутри этой директории после подключения файла скрипта?
Kichee нет, не будет. choot интерпретатора позволяет лишь отгородить приложение от остальной системы. Внутри самого choot-а разных разработчиков-юзеров приходится разделять на уровне прав доступа к файлам.
alekciy, а надо, чтоб не жили, то есть, чтоб не были доступны (если я правильно понял задачу). Чтобы не было возможности прочитать /etc/ или грохнуть весь /tmp/
Masterme, а системные и не доступны. Просто в choot создаются новые. И в них перетаскивается необходимый для работы минимум (как-то подсистема резолвинга имен).
В контексте задачи лучше чем chroot+грамотные permission на файлы-директории не найти.
Именно, скрипт запускается с index.php, собирается API, его использует «пользователь» в своем скрипте (не хочется загонять программиста в рамки и заставлять его учить какие то дополнительные команлы если можно дать чистый код), НО выше своей директории «пользователь» не должен видеть, читать, удалять и делать что то еще.
Как вариант можно переназначить те функции, которые могут причинить вред и создать для них аналоги с другими путями, но результат пока предствляется сомнительным.
НО выше своей директории «пользователь» не должен видеть, читать, удалять и делать что то еще.
Если код основного движка лежит вне директории пользователя, то для нормальный работы запретить чтение ни как не получится. В случае опасения за исходники скрипты движка стоит кодировать. Остальное, как я уже говорил, решается chroot-от (закрытие основной системы) + правильные права внутри (что бы один юзер не имел доступа к файлам другого). Работать это вполне неплохо может через php-fpm.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.