Добрый день. Имеется виртуальный хостниг c FreeBSD, на котором установлен PHP (MySQL, Perl и т.п.). На хостинге размещаются несколько сайтов, каждый в своей папке: /home/имя_аккаунта/сайт1.ru/docs/файлы_сайта /home/имя_аккаунта/сайт2.ru/docs/файлы_сайта и т.д. Владелец всех файлов и папок один. На данный момент любым php скриптом из сайта1 я свободно могу получить доступ к любому файлу в папке сайта2, что не есть хорошо. Собственно вопрос в том как запретить скриптам подниматься выше уровня папки docs, т.е. чтобы скрипт одного сайта не мог получить доступ к файлам другого? Хостер говорит, что так сделать не получится. Создать ещё пользователей, чтобы на каждую папку сайта приходился отдельный пользователь они тоже не могут. Выставление прав на файлы на "только для чтения" не спасает ситуацию, т.к. права теме же скриптами легко меняются. Очень надеюсь на вашу помощь, т.к. это большая угроза безопасности и я не знаю как решить данную проблему. P.S. Извиняюсь, если написал не в той теме, я посчитал, что данный вопрос больше относится к настройке PHP.
Есть мегакостыль под названием http://php.net/manual/en/features.safe-mode.html Поскольку это мегакостыль - в 5.3 оно помечено деприкейтед (т.е. запросто может в 5.4 перестать поддерживаться... к счастью). А вообще такие задачи решаются разными пользователями.
При включении Safe Mode сразу появляется куча ошибок на всех сайтах и на скорость работы тоже влияет в отрицательную сторону. Так что этот вариант не подходит. document_root для каждого сайта выставлен нормально, т.е., например, для сайта1 это /home/имя_аккаунта/сайт1.ru/docs хм, open_basedir вообще не задана. Подскажите, пожалуйста, как правильно задать open_basedir (доступ к php.ini у меня имеется) P.S. На хостинге стоит PHP Version 5.2.10
еще раз: open_basedir с 5.3 ставится через ini_set, в более старых версиях - силами хостера надо поставить свой open_basedir на каждый сайт
karakh, подскажите, пожалуйста, как можно задать open_basedir для каждого сайта? MiksIr, подскажите, пожалуйста, как можно запретить указанные вами функции?
С чего бы? Точно так же можно любую системную команду вызвать. disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Вот на счёт open_basedir вопрос. Можно ли с помощью этой директивы указать несколько каталогов? И если можно, то как?