Полезные закладки:
Загрузка

Хостинг на вкус и цвет

Иногда, при установке на сервер-хостинг CMS(системы управления сайтом) возникают некие непонятные ошибки и это при соблюдении всех модулей которые необходимы для работы сайта, причем на локальном пк они не возникали(Денвер,WampServer), дак в чем же проблемы? Для понимания этого привожу следующую инфо.

Начнём с того, что убедимся, что у вас именно такой хостинг, про который мы говорим. В любом случае у вас должен быть FTP-доступ к каталогу web-сервера на хостинге. Создайте в этом каталоге (или скопируйте со своей машины) файл phpinfo.php следующего содержимого:

<?php
phpinfo();
?>


Затем вызовите эту же страничку через браузер: (http://yoursite.ru/phpinfo.php), где разумеется yoursite.ru нужно заменить на имя вашего сайта. Вы увидите страницу со справочной информацией о PHP, установленном на хостинге, а также всех его настройках. Для нас, в данном случае, интерес представляют следующие параметры:

  • Server API. Этот параметр должен выглядеть так: Apache 2.0 Handler или Apache 1.3 Handler. Такие значения означают, что PHP на хостинге работает в режиме mod_php. Если значение CGI/FastCGI, то дальше статью можно не читать - не ваш случай.
  • safe_mode. Этот параметр должен быть установлен в On. Вернее данная статья рассматривает ситуацию, когда значение On. Если же значение Off - это уже совсем другая история и из данной статьи применим только параграф 1.
  • open_basedir. Этот параметр может иметь, например такое значение: /tmp:/home/z0000013/public_html. Но может иметь и другие значения, в зависимости от пути, который использует тот или иной хостер для вашей учётной записи (аккаунта) на хостинге. Для нас же главное, что есть какое-либо значение. Также, обратите внимание, что данный параметр имеет силу при ЛЮБОМ значение safe_mode. Т.е. не важно включен или выключен safe_mode.

1 . Ограничение mod_php

В режиме mod_php, любой PHP-скрипт работает с правами не вашей учётной записи, а с правами web-сервера[1]! Обычно web-сервер (Apache) запускается от имени либо пользователя apache, либо пользователя nobody, хотя возможны и другие варианты. Однако, вне зависимости от этих вариантов, важно то, что для вашего домашнего каталога хостер устанавливает такие права, согласно которым писать в этот каталог (и все его подкаталоги) может только его владелец! Т.е. по-умолчанию, web-сервер не может писать никаких файлов в ваш каталог или изменять в нём какие-либо файлы. Однако, в процессе работы Drupal, ему требуется сохранять закаченые файлы и создавать временные файлы. Это первая проблема, с которой обычно сталкивается пользователь. Чтобы её решить, он вынужден создавать в нужных для Drupal местах каталоги, в которые даются права на запись ВСЕМ пользователям или группе владельца (если в неё входит пользователь, от имени которого работает web-сервер). Но тут же возникает вторая проблема, связанная уже с безопасностью: если в каталог может писать любой пользователь, то он автоматически становится доступен любому PHP-скрипту, который выполняется на этом же хостинг-сервере, даже если этот PHP-скрипт выполняется не на вашем сайте! Таким образом, вредоносные скрипты с других сайтов, расположенных на этом же физическом сервере получают возможность изменять или удалять ваши файлы, что является дырой в безопастности и недопустимо! Именно поэтому и был придуман safe_mode и директива open_basedir!

2 . Ограничение safe_mode

safe_mode в переводе с английского означает "безопасный режим". В этом режиме некоторый функционал PHP просто выключен. Очень хорошо о том, что такое safe_mode описано здесь. Кроме того, что в этом режиме не работают многие функции PHP, для нас наиболее важным является вот это: Когда safe_mode включён/on, PHP проверяет, совпадает ли владелец текущего скрипта с владельцем файла, которым оперирует функция работы с файлами.. Непонятно? Поясняю. Допустим вы заливаете ваши PHP-скрипты на хостинг по FTP или распаковываете архив с PHP-скриптами, зайдя по SSH. Владелец залитого или распакованого файла будет установлен согласно вашей учётной записи (аккаунту) (права же доступа к PHP-скриптам определяются либо настройками системы по умолчанию, либо теми правами, которые сохранены в распаковываемом архиве, либо теми правами, которые устанавливает в процессе закачки ваш FTP-клиент). Теперь, когда вы попытаетесь открыть какой-либо файл залитым PHP-скриптом, будет произведена проверка владельца того файла, который вы пытаетесь открыть. Если данный владелец не совпадёт с владельцем PHP-скрипта (т.е. вашим аккаунтом), будет выдано сообщение об ошибке. Таким образом, вы не сможете открыть ни одного файла, владельцем которого вы не являетесь. Это предохраняет ваши данные от чтения и записи чужими пользователями! Однако остаётся ещё одна возможность атаки на ваши данные. Как уже говорилось, для нормальной работы Drupal вам необходимо дать права на запись в каталог web-серверу. При этом, создаваемые web-сервером файлы и каталоги будут иметь другого владельца! Этим владельцем станет пользователь, от имени которого работает web-сервер. Т.е. если с помощью вашего Drupal записали PHP-скрипт, то теперь вы можете запустить этот PHP-скрипт и читать/писать (если конечно позволяют права) с его помощью все файлы, владельцем которых является web-сервер, даже если эти файлы находятся в каталоге вашего соседа по хостингу (который точно также вынужден был открыть этот каталог на запись web-серверу, чтобы иметь возможность закачивать файлы (например картинки) через PHP. Снова дыра в безопасности! И вот чтобы эту дыру закрыть и была придумана директива open_basedir.

3 . Ограничение open_basedir

open_basedir содержит перечень каталогов, в которых вы можете открывать файлы. Напоминаю, что open_basedir работает как при включеном, так и при выключеном safe_mode. Таким образом, попытка открыть любой файл в любом каталоге, который не перечислен в open_basedir, приведёт к ошибке, даже если владелец открываемого файла и владелец PHP-скрипта, который пытается открыть этот файл один и тот же. Таким образом, с одной стороны обеспечивается безопасность при работе PHP в режиме mod_php, а с другой стороны создаётся куча проблем для нормальной работы PHP-скриптов в том случае, если требуется что-то не предусмотренное такой системой безопасности, например запуск внешних программ, установленных в операционной системе.

Не забывайте про open_basedir. Если при вызове какой-либо внешней программы или открытии какого-либо файла или каталога вы получите сообщения об отсутствии доступа, например:
* warning: file_exists() [function.file-exists]: open_basedir restriction in effect.
File(/style.css) is not within the allowed path(s):
(/home/z000001) in /home/z000001/yoursite.ru/includes/theme.inc on line 67.

* warning: realpath() [function.realpath]: open_basedir restriction in effect.
File(/tmp) is not within the allowed path(s):
(/home/z000001) in /home/z000001/yoursite.ru/includes/file.inc on line 287.

* warning: tempnam() [function.tempnam]: open_basedir restriction in effect.
File(/tmp) is not within the allowed path(s):
(/home/z000001) in /home/z000001/yoursite.ru/includes/file.inc on line 526.
* Невозможно создать файл.

Информация взята с drupalist.org.ru

20:05
KiB
Нет комментариев. Ваш будет первым!
|
%