Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Серверные службы Linux

Безопасная установка Joomla!

Оригинал: Securing Joomla! installations
Автор: Razvan T. Coloja
Дата: 3 января 2008
Перевод: Александр Тарасов aka oioki
Дата перевода: 29 января 2008

Joomla! - распространенная система управления содержанием, настолько распространенная, что используется в тысячах профессиональных веб-порталов. Установка проста и состоит из шести элементарных шагов. Однако такую установку Joomla! "по умолчанию" нельзя назвать безопасной, так что давайте рассмотрим, как можно лучше защититься от возможных нападений.

Первое правило безопасности гласит, "обновляйтесь чаще", ведь каждая новая версия (недавно вышла стабильная версия Joomla! 1.5 - прим. переводчика) содержит исправления ошибок и улучшения безопасности. Если ваш хостинг позволяет, лучше использовать PHP5, нежели PHP4, так как 5-я версия более продвинута с точки зрения безопасности.

Когда вы будете готовы запустить сайт, убедитесь, что выставили на файл configuration.php права только для чтения - это важное действие, которым администраторы часто пренебрегают. Установите права доступа - chmod 644 для файлов и chmod 755 для каталогов - но каталоги для временных файлов и кэша (полный список каталогов отображается на первом шаге установки) нужно оставить с доступом на запись, иначе сайт будет работать неправильно или вообще не будет работать.

Нужно помнить, что каталоги, используемые расширениями Joomla! и которые работают с закачкой файлов, также должны иметь право на запись. Компонент, работающий с изображениями, бесполезен, если не будет работать закачка файлов. Для установки прав зайдите в административную панель Joomla!, в ней Site -> Global Configuration и выберите вкладку Server. Примените к файлам CHMOD 0644, а к каталогам - CHMOD 0755 и не забудьте сохранить изменения.

После установки нужно удалить каталог установки installation из корня Joomla!; доступа к сайту просто не будет, если этот каталог останется. Для большей безопасности измените пользовательское имя администратора с admin на что-нибудь другое менее очевидное и, конечно, задайте длинный трудно угадываемый пароль. Неплохо, если сочетать в пароле строчные и заглавные буквы, а также цифры. Хороший пароль должен быть длиной не менее 8 символов. Следует его запомнить, также не нужно использовать его в качестве пароля на других сайтах.

Важным шагом в улучшении безопасности Joomla! является создание и настройка файла .htaccess в корне сайта. Этот файл определяет права доступа для специальных каталогов, настройки модуля mod_rewrite и прочее. Содержимое этого файла зависит от того, какие возможности предоставляет ваш хостинг-сервер, и какие модули и компоненты вы будете использовать.

После окончания установки при входе в административную панель вы наверняка увидите следующее сообщение: "PHP register_globals setting is 'ON' instead of 'OFF'." Это означает, что переменные окружения, GET-, POST-, Cookie-переменные и переменные сервера регистрируются как глобальные. Если выключить register_globals, можно обезопасить себя от множества атак, связанных с инъекциями кода. Вам нужно будет отредактировать файл php.ini - но здесь есть одна загвоздка. Многие хостинг-провайдеры не позволяют напрямую редактировать главный файл php.ini. Проблему можно обойти, создав файл php.ini в корне своей установки и поместив в нем нужные нам строки. В некоторых случаях на применение указанных в этом файле настроек хостинг-серверу требуется некоторое время (до 1 часа), так что возможно придется подождать. Итак, в файл php.ini нужно поместить одну из следующих строк (PHP 5 и PHP 4 соответственно):

php_value register_globals off
или
register_globals = 0
Можно также защищиться от SQL-инъекций, дописав в php.ini следующие строки:
allow_url_fopen = OFF
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
Первая строка запрещает PHP открывать соединения с внешними серверами с помощью функций fopen(), file() и т.д. Вторая строка отключает многие PHP-функции в целях безопасности:
  • shows_source - псевдоним функции highlight_file(), предоставляющей возможность подсветки синтаксиса в файлах;
  • system - позволяет выполнение внешних программ;
  • shell_exec - позволяет выполнять команды через shell;
  • exec - позволяет выполнять команды;
  • passthru - аналогично exec(), позволяет выполнять команды;
  • phpinfo - выводит информацию о версии PHP и его конфигурации. Эта информация может быть использована злоумышленниками;
  • popen - открывает пайп для процесса, запущенного определенной командой;
  • proc_open - аналогично popen(), но предоставляет большую степень управления выполнением команд.
Таким образом, эти настройки отключают все возможности выполнения команд или скриптов. С другой стороны, это опять же может вызвать проблемы при установке компонентов и модулей, которые используют PHP-функции для выполнения каких-то своих команд, но таких компонентов очень мало.

Для применения вышеобозначенных строк и следственно для защиты портала, можно использовать файл .htaccess. Так как не все хостинг-провайдеры позволяют использовать свой файл .htaccess и некоторые функции могут быть указаны лишь в php.ini, нам придется придерживаться редактирования php.ini для задания своих ограничений. Теперь нужно раскопировать полученный php.ini по всем подкаталогам Joomla!, в которых есть .php-файлы. Это нужно сделать, когда сайт будет закончен и будет готов к запуску. После этого можно проверять, все ли работает как надо.

Затем, можно дополнительно защитить административный подкаталог. Создайте в каталоге /administrator два файла .htaccess и .htpasswd.

Файл .htaccess должен содержать следующие строки:

AuthType Basic
AuthName "Joomla Administrator"
AuthUserFile /полный/путь/к/joomla/administrator/.htpasswd
<Limit GET>
require valid-user
</Limit>
Укажите здесь имя пользователя (отличное от уже зарегистрированного в Joomla!) и создайте зашифрованный пароль для доступа к сайту. Это можно сделать с помощью онлайн-средства .htaccess Tools. Скопируйте вывод сайта - имя пользователя и зашифрованный пароль - и вставьте его в файл .htpasswd, после чего сохраните файл и перезагрузите административную страницу портала. У вас спросят имя пользователя и пароль, введите их и вы получите доступ ко второму экрану входа в Joomla!. Следует заметить, что эти имена пользователей и пароли должны быть различными!

Удалите временные установочные файлы и изображения, которые вам не нужны, из подкаталогов Joomla! Затем удалите ненужные модули. Проверьте все используемые расширения на уязвимости и почаще посещайте Vulnerability Database от Secunia - базу данных по уязвимостям. Также много полезных вещей пишут на форумах Joomla!, в подфоруме по безопасности. Если вам кажется, что вас взломали, прочитайте это. Я также рекомендую прочесть Joomla! Administrator's Security Checklist - расширенный свод правил, часть которых приведена в данной статье.

Главное в поддержке безопасности - это владеть информацией. Подписывайтесь на списки рассылки компонентов и обновляйте их как только выйдет новая версия. Также стоит не забывать о том, что чем меньше у вас расширений, тем меньше времени уйдет на заботу о них. Время от времени просматривайте логи сервера на предмет SQL-инъекций и в случае проблем сообщайте об этом своему хостинг-провайдеру.