- Выберите квалифицированного хостинг-провайдера
- Самое важное решение
- Риски публичных серверов
- Избегайте безграмотных конфигураций серверов
- Настройка виртуального хоста apache
- Используйте файлы Apache .htaccess
- PHP запускаемый как модуль Apache
- Используйте Apache mod_security
- Настройка сервера баз данных MySQL
- Защита баз данных
- Настройка сервера PHP
- Поймите, как работает PHP
- Используйте PHP7
- Используйте локальные файлы php.ini
- Нужно помнить несколько важных моментов:
- Используйте настройку PHP disable_functions
- Подумайте об использовании настройки PHP open_basedir
- Настройте magic_quotes_gpc
- Не используйте настройку PHP safe_mode
- Не используйте настройки PHP register_globals
- Не используйте настройку PHP allow_url_include
- Используйте allow_url_fopen
- Разрешения для файла
- Настройка резервного копирования и восстановления
- Самое главное правило
- Безопасность joomla – заключение
Выберите квалифицированного хостинг-провайдера
Самое важное решение
Наверно, ни одно решение не является настолько же важным для безопасности сайта, как выбор хостинга и серверов. Из-за огромного разнообразия функций и конфигураций хостингов нереально составить полный перечень всех ситуаций.
Но при поиске «своего» провайдера можно отталкиваться от списка хостингов, которые полностью отвечают требованиям безопасности для типичного Joomla-сайта и рекомендованы сообществом.
Риски публичных серверов
Если у вас ограниченный бюджет, а сайт не обрабатывает конфиденциальные данные, вы можете, скорее всего, обойтись публичным сервером. Но при этом нужно понимать возможные неизбежные риски. Большинство рекомендаций, перечисленных ниже, подходит для обеспечения защиты сайтов в среде публичных серверов.
Избегайте безграмотных конфигураций серверов
Чтобы уяснить проблему, почитайте отчет о том, как неаккуратные конфигурации позволили Google проиндексировать результаты phpinfo() на тысячах сайтов. Не повторяйте эту ошибку на своем сайте!
Отчет Google включает тревожную статистику о проценте сайтов, которые используют устаревшие настройки вроде register_globals ON, или у которых вообще толком не установлен параметр open_basedir. Между прочим, если термины «php ini» и «register_globals» звучат для вас как китайская грамота, вероятно, вы пока не готовы управлять безопасностью своего сайта.
Настройка виртуального хоста apache
Используйте файлы Apache .htaccess
Заблокируйте типичные попытки вторжения через локальные файлы Apache .htaccess. Эта опция доступна не на всех серверах. Свяжитесь со своим хостинг-провайдером, если у вас возникла проблема при выполнении этой рекомендации.
Используя .htaccess, вы можете защитить паролем такие важные директории, как папка администратора, ограничив к ним доступ по IP-адресу. В зависимости от конфигурации вашего сервера, вы можете улучшить защиту своего сайта, переключившись на php7.
Joomla поставляется с предустановленным .htaccess, но вам нужно изменить этот файл, чтобы его использовать. Файл называется htaccess.txt. Переименуйте его в .htaccess и переместите в корневую директорию вашего сайта, воспользовавшись FTP-доступом.
Важный момент: так как в дистрибутиве поставляется htaccess.txt, а рабочий файл на сайте называется .htaccess, при обновлении Joomla рабочий файл НЕ обновляется автоматически. Вы должны вносить изменения вручную, чтобы использовать новую версию файла .htaccess.
Важные изменения этого файла содержатся в обновлении до версии 1.5.23 и выше, а также до версии в 1.6.2 и выше.
Руководствуйтесь принципом наименьших привилегий для работы с PHP с помощью таких инструментов, как PHPsuExec, php_suexec или suPHP.
Замечание: это продвинутые методы, которые требуют согласования и координации с хостинг-провайдером. Такие функции включаются или отключаются на стороне сервера и не могут устанавливаться индивидуально для каждого сайта на публичных серверах.
PHP запускаемый как модуль Apache
Это вызывает проблемы использования и, как следствие, проблемы с правами доступа, что, в свою очередь, приводит к вопросам безопасности. Лучше выбрать установку сервера или хостинга, где php запускается как /cgi/ процесс (такой, как cgi-fcgi), наряду с использованием phpSuExec или похожей конфигурации.
Вот два самых лучших руководства среди официальных документов по Joomla, объясняющих концепции прав доступа, использования и их связи:
Где вы можете больше узнать о правах доступа к файлам?
Почему вы не можете инсталлировать какие угодно расширения?
#File_ownership_advice_from_ianmac
Темами для ознакомления, которые представляют интерес, могут быть:
- — Основы прав доступа Unix
- — Использование phpSuExec (для получения информации о phpSuExec и похожих реализациях).
Используйте Apache mod_security
Настройте фильтры Apache mod_security и mod_rewrite для блокировки php-атак. Поищите информацию о mod_security и mod_rewrite в Google.
(Примечание: это расширенные методы, которые требуют согласования и координации с хостинг-провайдером. Такие функции включаются или отключаются на стороне сервера и не могут настраиваться индивидуально для каждого сайта на публичных серверах).
Настройка сервера баз данных MySQL
Защита баз данных
Убедитесь, что для аккаунтов MySQL настроен ограниченный доступ. Исходная установка MySQL незащищенная и нуждается в аккуратной конфигурации. Посмотрите руководство по MySQL.
Замечание: это пункт касается только тех пользователей, которые сами администрируют свои серверы (например, выделенные серверы). Пользователи публичных серверов зависят от того, насколько хорошую защиту баз данных настроил их хостинг-провайдер.
Настройка сервера PHP
Поймите, как работает PHP
Разберитесь, как работать с файлом php.ini и как управлять конфигурациями PHP. Изучите официальный список директив php.ini на http://www.php.net, а также хорошо задокументированные настройки по умолчанию, которые входят в каждый инсталлятор PHP.
Самые свежие настройки файла php.ini находятся на официальном сайте здесь.
Используйте PHP7
Версии PHP устаревают и становятся не рекомендуемыми. Некоторые хостинг-провайдеры держат на серверах несколько версий PHP, чтобы поддерживать устаревшие скрипты. Для Joomla предпочтительно использование PHP7.x.
Используйте локальные файлы php.ini
На публичных серверах нет возможности редактировать основной файл php.ini, но вы можете добавить пользовательскую, локальную версию этого файла. В этом случае вам нужно скопировать файлы php.ini в каждую пользовательскую поддиректорию, где требуются локализованные настройки.
Нужно помнить несколько важных моментов:
- Настройки локальных файлов php.ini действуют только в том случае, когда сервер сконфигурирован нужным образом. Это касается файла php.ini в вашей корневой директории http_root. Вы можете протестировать, влияют или нет эти файлы на ваш сайт, указав очевидные директивы в локальном файле php.ini и затем проверив изменения на сайте.
- Локальный файл php.ini влияет только на php-файлы, которые находятся в той же директории (или указаны в командах included() или required()). Это означает, что обычно есть только две директории Joomla, где вы захотели бы разместить файл php.ini.Речь идет о папке http_root (настоящее имя директории, которое вы используете, может отличаться), где находится файл index.php клиентской стороны, и директория администратора Joomla где находится администраторский файл index.php серверной стороны. Остальные директории, в которых нет файлов, вызываемых через веб-интерфейс, не нуждаются в локальных php.ini файлах.
- Если файлы php.ini лежат в каждой директории, видимо, это работа какого-то скрипта. Если вы не указывали ему выполнить такое действие, то, почти наверняка, можете их удалить. Возвращаясь к пункту 2, вас должны беспокоить только файлы php.ini в директориях http_root и администратора.
Используйте настройку PHP disable_functions
Используйте настройку disable_functions, чтобы отключить небезопасные функции PHP, в которых нет необходимости.
Вот типичная настройка для сайта Joomla:
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
Подумайте об использовании настройки PHP open_basedir
Вы должны рассмотреть возможность использования настройки open_basedir. Эта директива ограничивает список файлов, которые может открывать php, указанным деревом директорий. Директива не зависит от того, включен или выключен безопасный режим.
Ограничение, определяемое open_basedir, является префиксом, а не именем директории. Это означает, что open_basedir = /dir/incl предоставляет доступ к директориям /dir/include и /dir/incls, если они существуют.
Если нужно ограничить доступ конкретной директорией, поставьте в конце слэш «/». Больше информации ищите в документации по директивам конфигурации для защиты и безопасного режима PHP Security and Safe Mode Configuration Directives.
open_basedir = /home/users/you/public_html
Кроме того, если установлена настройка open_basedir, может понадобиться установить директиву конфигурации PHP upload_tmp_dir для пути, который находится в границах действия open_basedir или, как вариант, добавить путь upload_tmp_dir в open_basedir, использовав соответствующий разделитель пути для хост-системы.
open_basedir = /home/users/you/public_html:/tmp
PHP будет использовать временную директорию системы, если настройка upload_tmp_dir не установлена или в ней указана несуществующая директория. Поэтому может понадобиться добавить её в open_basedir, как показано выше, чтобы в Joomla не возникали ошибки загрузки.
Настройте magic_quotes_gpc
Эта функция PHP стала игнорироваться в версии 5.3.0 (30-06-2009) и была удалена в версии PHP 5.4.0.
Настройте директиву magic_quotes_gpc так, как нужно для вашего сайта.
Joomla 3.0 и выше требует, чтобы magic_quotes_gpc была отключена, и запрещает инсталляции, если эта директива находится в состоянии «ON» (включено). Для версий Joomla 2.5.xx также рекомендуется отключать эту директиву.
Joomla 1.5 игнорирует настройки magic_quotes_gpc и прекрасно работает в любом состоянии директивы. Самый безопасный способ – отключить magic_quotes_gpc и отказаться от использования любых плохо написанных расширений.
Для Joomla 1.0.x рекомендуется установить директиву в состояние « ON», чтобы защитить сайт от сторонних расширений с плохим кодом.
Больше информации по директиве и связанным с ней вопросам безопасности можно найти в документации Magic (https://docs.joomla.org/Magic_quotes_and_security)
Настройка magic_quotes_gpc:
установить в состояние «off» magic_quotes_gpc = 0 установить в состояние «on» magic_quotes_gpc = 1
Не используйте настройку PHP safe_mode
Эта функция PHP стала игнорироваться в версии 5.3.0, и была удалена из PHP 5.4.0.
Доверять этой функции крайне нежелательно. С её помощью попытались решить проблему безопасности общего доступа, дав ложное чувство защищенности.
Безопасный режим также может вызывать проблемы использования приложений и любых файлов, которые создаются приложениями.
Больше информации можно найти на официальном сайте PHP в руководстве PHP Manual: Safe Mode.
Правильная настройка для safe_mode:
safe mode = 0
Не используйте настройки PHP register_globals
Эта функция PHP стала игнорироваться в версии 5.3.0, и была удалена из PHP 5.4.0.
Автоматическая регистрация глобальных переменных было, наверно, одним из самых дурацких решений разработчиков PHP.
Эта директива определяет, регистрировать или нет EGPCS-переменные (NV, GET, POST, COOKIE и SERVER) как глобальные, после чего они сразу же становятся доступными всем PHP-скриптам и могут легко переписать установленные вами значения переменных, если не предпринять меры предосторожности.
К счастью, разработчики php давно поняли свою ошибку и игнорируют эту «функцию».
Если ваш сайт расположен на публичном сервере, хостинг-провайдер которого считает, что директива register_globals должна быть включена, у вас могут возникнуть огромные проблемы.
Вы можете регулярно выключать register_globals для своего сайта с помощью локального файла php.ini. Но это не сильно улучшает безопасность, так как другие сайты на этом же сервере остаются уязвимыми для хакеров, которые могут затем попытаться атаковать ваш сайт уже изнутри сервера.
Правильная настройка для register_globals:
register_globals = 0
Не используйте настройку PHP allow_url_include
Не включайте директиву allow_url_include. Эта опция позволяет программисту добавлять удаленный файл, используя его url, а не локальный путь файла.
Это небезопасно.
Если приложение или расширение получает доступ к собственному содержанию по внешнему адресу, хакеры могут перехватить управление таким приложение и запустить исполняемый код с собственного сайта.
Если приложение или расширение требует разрешить использование этой настройки, лучше поищите альтернативные программы. Потому что включение в скрипт этой директивы указывает на серьезные проектные недостатки приложения или расширения.
Используйте allow_url_fopen
Эта функция делает доступными поддерживающие URL fopen-оболочки, которые позволяют получить доступ к сетевым объектам как к файлам. По умолчанию оболочки предназначены для доступа к удаленным файлам по протоколам ftp или http.
Некоторые расширения, вроде zlib, могут регистрировать дополнительные оболочки.
Замечание: из соображений безопасности эту директиву можно устанавливать только в php.ini.
Сделайте доступной и используйте allow_url_fopen, чтобы корректно работало быстрое обновление Joomla One-Click-Update.
Правильная настройка директивы имеет вид:
allow_url_fopen = 1 allow_url_include = 0 PHP default: allow_url_fopen включена PHP default: allow_url_include выключена
Разрешения для файла
Если Joomla развернута на сервере apache с mod_php, то все виртуальные хосты на этом сервере запускаются в той же среде, что и ваш код joomla.
Если файлы принадлежат каким-то другим пользователям, кроме ‘nobody’ или ‘wwwrun’, самые безопасные разрешения – те, которые предотвращают изменения в коде Joomla, за исключением доступа по авторизированным каналам вроде протокола FTP.
Настройка разрешений:
- *директория DocumentRoot: 750 (например, public_html)
- *файлы: 644
- *директории: 755 (711, если вы – параноик, но не для директорий, которые должны перечисляться) (владелец : любой пользователь)
С этими настройками разрешений вам нужно использовать FTP для обновления установленной версии Joomla. Не все модули поддерживают это способ. Удалите модули, которые не поддерживают обновление по FTP.
Другие процессы, запускаемые под mod_php, могут читать ваш файл configuration.php. Вы пресечете автоматизированные хакерские атаки, переименовав этот файл. Вы не должны хранить пароль от FTP-доступа в конфигурационном файле на таких хостах, поскольку ваш аккаунт может оказаться под угрозой захвата.
Если Joomla развернута на apache с fast-cgi, suphp или cgi запускаются как разные пользователи, и вы можете установить разрешения следующим образом:
- * директория DocumentRoot: 750 (например, public_html)
- * PHP файлы: 600 (400, если вы настоящий параноик)
- * HTML и графические файлы: 644 (444, если вы настоящий параноик)
- * директории: 755 (711, если вы – параноик, но не для директорий, которые должны перечисляться).
Сверьте настройки разрешений со своим хостинг-провайдером, чтобы увидеть, обеспечивают ли они безопасность сервера, на котором находится ваш сайт. Также уточните, кто делает регулярные (еженедельные) обновления безопасности сервера – вы или провайдер.
Проверьте доступность функции jail (клеток). Правило номер один – чем меньше вы платите, тем меньше провайдер заботится о вашей безопасности.
Настройка резервного копирования и восстановления
Самое главное правило
В любой момент у вас должна быть возможность вернуть сайт в предыдущее рабочее состояние благодаря регулярному использованию качественного, удаленного процесса резервного копирования и восстановления.
Убедитесь, что ваш процесс резервного копирования и восстановления находится в рабочем состоянии и протестирован до того, как вы его запустите. Это самый лучший способ (а часто и единственный), чтобы восстановить ресурс после таких фатальных катастроф, как:
- Нерабочий сайт после некорректного обновления.
- Отказ аппаратных средств типа «смерти» жестких дисков, перебоев питания, кражи серверов и так далее.
- Авторитарное вмешательство государства.
- Необходимость быстрого переезда на новый сервер или к новому хостинг-провайдеру.
Резервные копии не рекомендуется использовать для восстановления взломанного или скомпрометированного сайта, так как они могут содержать измененный код и взломанные файлы.
Использование резервных копий в этом случае могло бы просто вернуть на место взломанный сайт с переписанным злоумышленниками кодом.
Безопасность joomla – заключение
Безопасность сайта — всегда будет актуальной проблемой и от этого никуда не уйти.
Как было уже сказано ранее в статье «начало работы», идеальной защиты не существует.
И если вы решили все делать самостоятельно, но плохо разбираетесь в этих вопросах, лучше делать все поэтапно, предпринимая только те шаги, которые вам понятны.
В остальных случаях стоит обратиться к специалистам, которые помогут правильно настроить сервер и саму систему чтобы обеспечить надежную безопасность joomla-сайта.
«Профессиональная защита Joomla»