Единый инструмент с меню:
-
1. Сканирование (поиск подозрительного кода, удаление PHP в
upload
, права, защита.htaccess
) -
2. Восстановление ядра (скачивание чистого ядра + замена
modules/ admin/ js/ tools/
) -
3. Бэкап ядра
-
4. Откат ядра из бэкапа
Универсальный скрипт для Bitrix: bitrix_tool.sh
#!/bin/bash # Универсальный инструмент для обслуживания и очистки Bitrix # Запускать от root или sudo SITE_PATH="/var/www/bitrix" LOG_FILE="/root/bitrix_tool.log" UPLOAD_DIR="$SITE_PATH/upload" CLEAN_CORE="/root/bitrix_clean_core" BACKUP_DIR="/root/bitrix_backup" DATE=$(date +%Y%m%d_%H%M%S) # === ФУНКЦИИ === scan_site() { echo "=== Сканирование сайта на вирусы ===" | tee -a $LOG_FILE echo "Дата запуска: $(date)" >> $LOG_FILE # Поиск подозрительных функций echo ">> Поиск подозрительного кода..." | tee -a $LOG_FILE grep -R --include="*.php" -n "eval(" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "base64_decode" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "gzuncompress" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "preg_replace.*e" $SITE_PATH >> $LOG_FILE 2>/dev/null # Удаление PHP в upload echo ">> Проверка папки upload..." | tee -a $LOG_FILE find $UPLOAD_DIR -type f -name "*.php" -print -delete >> $LOG_FILE # Права echo ">> Выставляем права..." | tee -a $LOG_FILE find $SITE_PATH -type f -exec chmod 644 {} \; find $SITE_PATH -type d -exec chmod 755 {} \; # Защита upload HTACCESS_FILE="$UPLOAD_DIR/.htaccess" if [ ! -f "$HTACCESS_FILE" ]; then echo ">> Создаём .htaccess в upload" | tee -a $LOG_FILE cat <<EOF > $HTACCESS_FILE <FilesMatch "\.php$"> Deny from all </FilesMatch> EOF fi # BitrixVM аудит if [ -x /opt/webdir/bin/bx-sites ]; then echo ">> Запускаем BitrixVM аудит..." | tee -a $LOG_FILE /opt/webdir/bin/bx-sites audit default >> $LOG_FILE fi echo "=== Сканирование завершено. Лог: $LOG_FILE ===" } download_core() { if [ ! -d "$CLEAN_CORE" ]; then echo ">> Скачиваем чистое ядро Bitrix..." | tee -a $LOG_FILE mkdir -p $CLEAN_CORE cd $CLEAN_CORE wget -q https://www.1c-bitrix.ru/download/cms.php -O bitrix.zip unzip -oq bitrix.zip echo ">> Чистое ядро скачано в $CLEAN_CORE" | tee -a $LOG_FILE else echo ">> Чистое ядро уже скачано" | tee -a $LOG_FILE fi } restore_core() { echo "=== Восстановление ядра Bitrix ===" | tee -a $LOG_FILE download_core for DIR in modules admin js tools; do if [ -d "$SITE_PATH/bitrix/$DIR" ]; then echo ">>> Обновление $DIR" | tee -a $LOG_FILE rsync -av --delete $CLEAN_CORE/bitrix/$DIR/ $SITE_PATH/bitrix/$DIR/ >> $LOG_FILE fi done echo "=== Восстановление завершено. Лог: $LOG_FILE ===" } backup_core() { echo "=== Создание бэкапа ядра Bitrix ===" mkdir -p $BACKUP_DIR/$DATE for DIR in modules admin js tools; do if [ -d "$SITE_PATH/bitrix/$DIR" ]; then tar -czf $BACKUP_DIR/$DATE/${DIR}.tar.gz -C $SITE_PATH/bitrix $DIR echo ">>> Сохранено: $DIR" fi done echo "=== Бэкап создан: $BACKUP_DIR/$DATE ===" } restore_backup() { if [ -z "$1" ]; then echo "Использование: $0 4 <папка_с_датой>" echo "Пример: $0 4 20250825_230000" exit 1 fi RESTORE_PATH="$BACKUP_DIR/$1" if [ ! -d "$RESTORE_PATH" ]; then echo "❌ Нет такого бэкапа: $RESTORE_PATH" exit 1 fi echo "=== Восстановление из бэкапа $RESTORE_PATH ===" for FILE in $RESTORE_PATH/*.tar.gz; do DIR=$(basename $FILE .tar.gz) echo ">>> Восстановление $DIR" tar -xzf $FILE -C $SITE_PATH/bitrix done echo "=== Восстановление завершено ===" } # === МЕНЮ === echo "=====================================" echo " Bitrix Tool - Антивирус и Защита" echo "=====================================" echo "1) Сканирование сайта" echo "2) Восстановление ядра из оригинала" echo "3) Создать бэкап ядра" echo "4) Восстановить ядро из бэкапа" echo "=====================================" read -p "Выберите действие: " choice case $choice in 1) scan_site ;; 2) restore_core ;; 3) backup_core ;; 4) read -p "Укажите папку с бэкапом (например 20250825_230000): " bdir restore_backup $bdir ;; *) echo "Неверный выбор" ;; esac
Как пользоваться
-
Сохранить скрипт:
nano /root/bitrix_tool.sh
-
Сделать исполняемым:
chmod +x /root/bitrix_tool.sh
-
Запустить:
/root/bitrix_tool.sh
-
В меню выбрать действие:
-
1
→ Сканирование сайта -
2
→ Восстановление ядра из оригинала -
3
→ Создание бэкапа ядра -
4
→ Восстановление ядра из бэкапа
-
Давайте сделаем так, чтобы скрипт отправлял уведомления на email/Telegram после сканирования или восстановления (с логом)
Добавим уведомления.
Скрипт будет уметь слать лог на email и/или в Telegram после выполнения любой операции (сканирование, восстановление, бэкап).
Универсальный bitrix_tool.sh
с уведомлениями
#!/bin/bash # Универсальный инструмент для обслуживания и очистки Bitrix # Сканирование, восстановление, бэкап + уведомления (email / Telegram) SITE_PATH="/var/www/bitrix" LOG_FILE="/root/bitrix_tool.log" UPLOAD_DIR="$SITE_PATH/upload" CLEAN_CORE="/root/bitrix_clean_core" BACKUP_DIR="/root/bitrix_backup" DATE=$(date +%Y%m%d_%H%M%S) # === НАСТРОЙКИ УВЕДОМЛЕНИЙ === EMAIL="admin@example.com" # email для уведомлений (оставить пустым, если не нужен) TELEGRAM_BOT_TOKEN="123456:ABCDEF" # токен бота Telegram TELEGRAM_CHAT_ID="123456789" # ID чата/канала для уведомлений # === ФУНКЦИИ === send_notifications() { SUBJECT="Bitrix Tool: $1" MESSAGE="[$(date)] Bitrix Tool завершил задачу: $1 Сервер: $(hostname) Сайт: $SITE_PATH Лог: см. вложение" # Email if [ -n "$EMAIL" ]; then echo -e "$MESSAGE\n\n---- Лог ----\n$(cat $LOG_FILE)" | mail -s "$SUBJECT" $EMAIL fi # Telegram if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then curl -s -X POST https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage \ -d chat_id=$TELEGRAM_CHAT_ID \ -d parse_mode="Markdown" \ -d text="*$SUBJECT*\n\n\`\`\`\n$(tail -n 30 $LOG_FILE)\n\`\`\`\n(полный лог: $LOG_FILE)" fi } scan_site() { echo "=== Сканирование сайта на вирусы ===" | tee -a $LOG_FILE echo "Дата запуска: $(date)" >> $LOG_FILE grep -R --include="*.php" -n "eval(" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "base64_decode" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "gzuncompress" $SITE_PATH >> $LOG_FILE 2>/dev/null grep -R --include="*.php" -n "preg_replace.*e" $SITE_PATH >> $LOG_FILE 2>/dev/null find $UPLOAD_DIR -type f -name "*.php" -print -delete >> $LOG_FILE find $SITE_PATH -type f -exec chmod 644 {} \; find $SITE_PATH -type d -exec chmod 755 {} \; if [ ! -f "$UPLOAD_DIR/.htaccess" ]; then cat <<EOF > $UPLOAD_DIR/.htaccess <FilesMatch "\.php$"> Deny from all </FilesMatch> EOF fi if [ -x /opt/webdir/bin/bx-sites ]; then /opt/webdir/bin/bx-sites audit default >> $LOG_FILE fi echo "=== Сканирование завершено ===" | tee -a $LOG_FILE send_notifications "Сканирование сайта" } download_core() { if [ ! -d "$CLEAN_CORE" ]; then mkdir -p $CLEAN_CORE cd $CLEAN_CORE wget -q https://www.1c-bitrix.ru/download/cms.php -O bitrix.zip unzip -oq bitrix.zip fi } restore_core() { echo "=== Восстановление ядра Bitrix ===" | tee -a $LOG_FILE download_core for DIR in modules admin js tools; do if [ -d "$SITE_PATH/bitrix/$DIR" ]; then rsync -av --delete $CLEAN_CORE/bitrix/$DIR/ $SITE_PATH/bitrix/$DIR/ >> $LOG_FILE fi done echo "=== Восстановление завершено ===" | tee -a $LOG_FILE send_notifications "Восстановление ядра" } backup_core() { echo "=== Создание бэкапа ядра Bitrix ===" | tee -a $LOG_FILE mkdir -p $BACKUP_DIR/$DATE for DIR in modules admin js tools; do if [ -d "$SITE_PATH/bitrix/$DIR" ]; then tar -czf $BACKUP_DIR/$DATE/${DIR}.tar.gz -C $SITE_PATH/bitrix $DIR fi done echo "=== Бэкап создан: $BACKUP_DIR/$DATE ===" | tee -a $LOG_FILE send_notifications "Создание бэкапа" } restore_backup() { if [ -z "$1" ]; then echo "Использование: $0 4 <папка_с_датой>" exit 1 fi RESTORE_PATH="$BACKUP_DIR/$1" if [ ! -d "$RESTORE_PATH" ]; then echo "❌ Нет такого бэкапа: $RESTORE_PATH" exit 1 fi for FILE in $RESTORE_PATH/*.tar.gz; do DIR=$(basename $FILE .tar.gz) tar -xzf $FILE -C $SITE_PATH/bitrix done echo "=== Восстановление из бэкапа завершено ===" | tee -a $LOG_FILE send_notifications "Восстановление из бэкапа" } # === МЕНЮ === echo "=====================================" echo " Bitrix Tool - Антивирус и Защита" echo "=====================================" echo "1) Сканирование сайта" echo "2) Восстановление ядра из оригинала" echo "3) Создать бэкап ядра" echo "4) Восстановить ядро из бэкапа" echo "=====================================" read -p "Выберите действие: " choice case $choice in 1) scan_site ;; 2) restore_core ;; 3) backup_core ;; 4) read -p "Укажите папку с бэкапом (например 20250825_230000): " bdir restore_backup $bdir ;; *) echo "Неверный выбор" ;; esac
Настройка уведомлений
-
Email:
-
Установите
mailutils
илиsendmail
(Debian/Ubuntu):apt install mailutils -y
-
В переменной
EMAIL="admin@example.com"
укажите свой почтовый адрес.
-
-
Telegram:
-
Создайте бота через @BotFather.
-
Получите токен (например
123456:ABCDEF
). -
Узнайте свой
chat_id
(через @userinfobot). -
Впишите в переменные
TELEGRAM_BOT_TOKEN
иTELEGRAM_CHAT_ID
.
-
В итоге после каждого действия (сканирование, восстановление, бэкап) вы получите:
-
Email с полным логом.
-
Telegram-сообщение с последними 30 строками лога.
Можно добавить расписание (cron), чтобы сканирование и уведомления запускались автоматически, например, каждый день ночью
Сделаем автоматизацию через cron, чтобы твой
bitrix_tool.sh
работал без ручного запуска.