Очистка сайта от вирусов через SSH

Очистка сайта от вирусов через SSH

Эта инструкция предназначена для быстрого поиска, удаления вредоносного кода и защиты сайта на CMS Joomla при повторном заражении.

ШАГ 1: Изоляция и подготовка

1.     Сделайте резервную копию (бэкап файлов и базы данных) через панель хостинга.

2.     Смените пароли от панели хостинга, SSH/FTP и баз данных.

3.     Подключитесь по SSH и перейдите в корень сайта: cd /путь/к/сайту/

ШАГ 2: Поиск и удаление вредоносных файлов

1. Поиск PHP-скриптов в медиа-папках (100% вирусы)

В этих папках Joomla не должно быть исполняемых файлов:

bash
find images/ -type f -name "*.php"
find cache/ -type f -name "*.php"
find tmp/ -type f -name "*.php"
find logs/ -type f -name "*.php"

Если команда нашла файлы (например, images/stories/wp-log.php), удалите их командой:

bash

rm путь/к/найденному_файлу.php

2. Поиск по сигнатурам (внутри кода файлов)

Ищем скрытые обфусцированные загрузчики, функции сжатия и выполнения кода:

bash
# Поиск функций сжатия (gzuncompress, часто идет с eval)
grep -rnw . -e "gzuncompress" --include=\*.php

# Поиск опасных конструкций (eval, base64_decode, assert)
grep -rnw . -e "eval(" -e "base64_decode(" -e "assert(" --include=\*.php

Внимательно проверьте строки. Если код выглядит как случайный набор букв и цифр, файл заражен. Удалите его или вырежьте вредоносный код через nano.

3. Поиск файлов по дате изменения

Если вы знаете примерную дату взлома, найдите все файлы PHP, измененные за последние 7 дней:

bash
find . -type f -name "*.php" -mtime -7

ШАГ 3: Защита и закрытие уязвимостей

1. Блокировка запуска PHP в папке картинок (Критически важно)

Даже если хакер снова загрузит вирус в images/, этот шаг запретит серверу его выполнять.
Выполните команду:

bash

nano images/.htaccess

Вставьте в файл этот код, нажмите Ctrl+O, затем Enter (для сохранения) и Ctrl+X (для выхода):

apache
<Files *.php>
    Deny from all
</Files>

2. Сброс прав на файлы и папки (Permissions)

Вирусы часто меняют права, чтобы закрепиться в системе. Верните безопасные стандарты:

bash
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

3. Проверка скрытого файла .htaccess

Проверьте корневой файл на наличие посторонних редиректов или вредоносных вставок в начале/конце:

bash
cat .htaccess

ШАГ 4: Действия в админ-панели Joomla

1.     Обновите всё: Обновите Joomla до актуальной версии. Обновите абсолютно все плагины, компоненты и модули (особенно JCE Editor, VirtueMart, K2, SP pagebilder). Уязвимости в них — главная причина взломов.

2.     Проверьте пользователей: Перейдите в Пользователи -> Менеджер пользователей. Удалите всех незнакомых администраторов. Смените пароли легитимным админам.

3.     Очистите кэш и сессии: Перейдите в Система -> Очистить весь кэш.

Для автоматизации этого процесса мы создадим Bash-скрипт. Вы сможете загрузить его на сервер один раз, а затем запускать одной короткой командой (или настроить запуск по расписанию в Cron). Скрипт сам проверит все критические зоны Joomla, выведет отчет на экран и запишет результаты в лог-файл.

Шаг 1: Создание файла скрипта

Подключитесь по SSH, перейдите в корень сайта и создайте новый файл (например, с именем scan.sh):

bash
nano myscan.sh

Шаг 2: Код скрипта

Скопируйте и вставьте в терминал следующий код. Он снабжен комментариями, безопасен и ничего самостоятельно не удаляет (только находит и предупреждает):

Показать код (нажмите здесь)

 

bash
#!/bin/bash

# Цвета для удобства чтения отчета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # Без цвета

LOG_FILE="joomla2_scan_report.log"
echo "=== ОТЧЕТ СКАНИРОВАНИЯ ОТ $(date) ===" > $LOG_FILE

echo -e "${YELLOW}Начало автоматического сканирования Joomla...${NC}"
echo "------------------------------------------------"

# 1. Проверка PHP-файлов в медиа-директориях
echo -e "${YELLOW}[1/4] Проверка запрещенных PHP-файлов в медиа-папках...${NC}"
MEDIA_DIRS=("images" "cache" "tmp" "logs")
FOUND_BAD_FILES=0

for dir in "${MEDIA_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        FILES=$(find "$dir" -type f -name "*.php")
        if [ ! -z "$FILES" ]; then
            echo -e "${RED}ВНИМАНИЕ! Найдены PHP-файлы в папке /$dir:${NC}"
            echo "$FILES"
            echo "Найдены файлы в /$dir:" >> $LOG_FILE
            echo "$FILES" >> $LOG_FILE
            FOUND_BAD_FILES=1
        fi
    fi
done

if [ $FOUND_BAD_FILES -eq 0 ]; then
    echo -e "${GREEN}Папки images, cache, tmp, logs чисты от PHP-скриптов.${NC}"
fi

echo "------------------------------------------------"

# 2. Поиск опасных сигнатур в коде
echo -e "${YELLOW}[2/4] Поиск подозрительного кода (eval, gzuncompress, base64)...${NC}"
echo "Результаты поиска по сигнатурам:" >> $LOG_FILE

# Ищем конструкции, исключая сам файл скрипта scan.sh
SIGNATURES=$(grep -rnw . -e "gzuncompress" -e "eval(" -e "base64_decode(" -e "assert(" --include=\*.php | grep -v "scan.sh")

if [ ! -z "$SIGNATURES" ]; then
    echo -e "${RED}Обнаружены подозрительные функции в следующих файлах:${NC}"
    # Показываем первые 10 строк для примера, чтобы не спамить терминал
    echo "$SIGNATURES" | head -n 15
    echo "...полный список сохранен в лог-файл."
    echo "$SIGNATURES" >> $LOG_FILE
else
    echo -e "${GREEN}Опасных текстовых сигнатур не обнаружено.${NC}"
fi

echo "------------------------------------------------"

# 3. Поиск файлов, измененных за последние 3 дня
echo -e "${YELLOW}[3/4] Поиск файлов PHP, измененных за последние 72 часа...${NC}"
RECENT_FILES=$(find . -type f -name "*.php" -mtime -3 | grep -v "scan.sh" | grep -v "$LOG_FILE")

if [ ! -z "$RECENT_FILES" ]; then
    echo -e "${YELLOW}Файлы, измененные недавно:${NC}"
    echo "$RECENT_FILES"
    echo "Недавно измененные файлы:" >> $LOG_FILE
    echo "$RECENT_FILES" >> $LOG_FILE
else
    echo -e "${GREEN}За последние 3 дня PHP-файлы не модифицировались.${NC}"
fi

echo "------------------------------------------------"

# 4. Проверка защиты в папке images
echo -e "${YELLOW}[4/4] Проверка файла защиты images/.htaccess...${NC}"
if [ -f "images/.htaccess" ]; then
    if grep -q "Deny from all" "images/.htaccess"; then
        echo -e "${GREEN}Защита папки images активна (.htaccess настроен верно).${NC}"
    else
        echo -e "${RED}ВНИМАНИЕ: images/.htaccess существует, но не блокирует PHP!${NC}"
        echo "Проблема с images/.htaccess" >> $LOG_FILE
    fi
else
    echo -e "${RED}ВНИМАНИЕ: Защита отсутствует! Файл images/.htaccess не найден.${NC}"
    echo "Отсутствует images/.htaccess" >> $LOG_FILE
fi

 

echo "------------------------------------------------"
echo -e "${YELLOW}Сканирование завершено! Подробный отчет: $LOG_FILE${NC}" 

 

Сохраните файл (в nano: нажмите Ctrl+O, затем Enter, для выхода Ctrl+X).

 

Шаг 3: Активация скрипта

Чтобы систему можно было запустить, дайте файлу права на исполнение:

bash
chmod +x myscan.sh

Как пользоваться в "одну кнопку":

Теперь, когда вам нужно проверить сайт, просто введите в консоли короткую команду:

bash
./myscan.sh

Скрипт мгновенно подсветит зеленым безопасные зоны и красным — места, где обнаружен вирус. Полный отчет со списком всех строк и файлов всегда будет доступен в текстовом файле joomla2_scan_report.log в корне сайта.

Обо мне

bottom-logo

Я дизайнер. Здесь вы можете увидеть мои работы. Хорошо я делаю свою работу или не очень — судить вам.

Главное правило — вы никогда не увидите незаконченной работы. Только досконально отточенный проект можно выпускать в жизнь.

Калькулятор упаковки

Выберите язык

Выберите язык

Настройки cookies
Мы используем cookies для удобной работы сайта и анонимной статистики посещений. Если вы отклоните cookies, часть функций сайта может работать иначе.
Принять все
Отклонить все
Read more
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Accept
Decline
Advertisement
If you accept, the ads on the page will be adapted to your preferences.
Google Ad
Accept
Decline
Save