Page 1 of 1

Как ограничить php скрипты только папкой юзера?

Posted: Wed Jul 03, 2013 2:58 pm
by GEniraL
Для теста залил на созданный домен шелл скрипт - файл менеджер на php. Так вот он оказывается может выходить из папки домена и выходить вплоть до верхнего уровня. В результате можно перейти в любую папку. Например ../../../../../etc/httpd/conf.d/ и почитать конфиги. Изменить конфиги не удалось, но на чтение открываются. Конечно же таким образом можно много чего найти на сервере.

Как можно запретить подобным php скриптам выходить за пределы папки юзера? Сделать бы примерно как у ФТП, там нельзя выйти за пределы домашней директории.

Re: Как ограничить php скрипты только папкой юзера?

Posted: Thu Jul 04, 2013 6:53 am
by skid
Таким образом можно получить только список пользоваталей. Узнать информацию о доменах не выйдет, так как конфигурация недоступна на чтение.

Добиться нужного поведения можно при помощи директивы open_basedir. Я подготовил шаблоны с примерами. Чтобы установить их, выполните:

Code: Select all

cd /usr/local/vesta/data/templates/web/httpd/
wget http://c.vestacp.com/0.9.8/rhel/templates/web/httpd/basedir.tpl
wget http://c.vestacp.com/0.9.8/rhel/templates/web/httpd/basedir.stpl
Затем зайдите в нужный домен и установите шаблон basedir. Если это то, что нужно, сделайте этот шаблон шаблоном по умолчанию в пакете.

Re: Как ограничить php скрипты только папкой юзера?

Posted: Thu Jul 04, 2013 8:20 am
by sartas
Только не забывайте что есть еще перловые скрипты, на которые open_basedir не действует. Некоторые мелкие хостеры забывают про это, и уверенные в своей безопасности, плохо следят за правами на файлы. Иногда попадаются файлы бэкапов с правами на чтение )

Re: Как ограничить php скрипты только папкой юзера?

Posted: Thu Jul 04, 2013 2:44 pm
by GEniraL
skid wrote:Таким образом можно получить только список пользоваталей. Узнать информацию о доменах не выйдет, так как конфигурация недоступна на чтение.

Добиться нужного поведения можно при помощи директивы open_basedir. Я подготовил шаблоны с примерами. Чтобы установить их, выполните:

Code: Select all

cd /usr/local/vesta/data/templates/web/httpd/
wget http://c.vestacp.com/0.9.8/rhel/templates/web/httpd/basedir.tpl
wget http://c.vestacp.com/0.9.8/rhel/templates/web/httpd/basedir.stpl
Затем зайдите в нужный домен и установите шаблон basedir. Если это то, что нужно, сделайте этот шаблон шаблоном по умолчанию в пакете.
Попробовал. Шеллы хорошо ограничило. Думаю open_basedir можно добавить во все шаблоны, хуже не будет, преимущество на лицо.

Re: Как ограничить php скрипты только папкой юзера?

Posted: Thu Jul 04, 2013 2:59 pm
by sartas
Думаю open_basedir можно добавить во все шаблоны, хуже не будет
Bitrix не одобряет open_basedir.

Re: Как ограничить php скрипты только папкой юзера?

Posted: Thu Jul 04, 2013 3:40 pm
by Enkil
sartas wrote:
Думаю open_basedir можно добавить во все шаблоны, хуже не будет
Bitrix не одобряет open_basedir.

нормально оно работает

сайт на битриксе, Nginx+php-fpm

вот содержание настройки пула

Code: Select all

[mayflower.ru]

listen = /var/run/php5-mayflower.sock
        listen.mode = 0666
        user = mayflower
        group = mayflower
        chdir = /var/www/vhosts/php/mayflower.ru/

        php_admin_value[upload_tmp_dir] = /var/www/vhosts/php/mayflower.ru/tmp
        php_admin_value[upload_max_filesize] = 100M
        php_admin_value[post_max_size] = 100M
        php_admin_value[open_basedir] = /var/www/vhosts/php/mayflower.ru
        php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
        php_admin_value[cgi.fix_pathinfo] = 0
        php_admin_value[date.timezone] = Europe/Moscow

        pm = dynamic
        pm.max_children = 10
        pm.start_servers = 2
        pm.min_spare_servers = 2
        pm.max_spare_servers = 4