Bash-скрипты для администраторов: автоматизация рутины
Практическое руководство по написанию Bash-скриптов для автоматизации рутинных задач системного администратора Linux: мониторинг, бэкапы, ротация логов, управление пользователями.
Bash-скрипты для администраторов: автоматизация рутины
Введение
Системное администрирование Linux сопряжено с множеством повторяющихся задач: ротация логов, резервное копирование, мониторинг дискового пространства, управление пользователями. Bash — мощный инструмент для автоматизации этих процессов. В данном руководстве собраны практические скрипты для ежедневных задач администратора.
1. Мониторинг дискового пространства
Скрипт проверяет заполнение разделов и отправляет алерт при превышении порога.
#!/bin/bash
# Порог в процентах
THRESHOLD=85
# Проверяем все смонтированные разделы
df -h | awk 'NR>1 {print $5" "$6}' | while read output; do
usep=$(echo "$output" | awk '{print $1}' | sed 's/%//')
partition=$(echo "$output" | awk '{print $2}')
if [ "$usep" -ge "$THRESHOLD" ]; then
echo "ПРЕДУПРЕЖДЕНИЕ: Раздел $partition заполнен на ${usep}%" | logger -t disk_monitor
echo "ПРЕДУПРЕЖДЕНИЕ: Раздел $partition заполнен на ${usep}%" | mail -s "Disk Alert: $partition" admin@company.local
fi
done
Особенности:
- Использует
df -hдля человекочитаемого вывода - Отправляет уведомление в syslog и email
- Легко настраивается через переменную THRESHOLD
2. Ротация и архивация логов
#!/bin/bash
LOG_DIR="/var/log/app"
ARCHIVE_DIR="/var/log/archive"
RETENTION_DAYS=30
# Создаём директорию архива при необходимости
mkdir -p "$ARCHIVE_DIR"
# Архивируем логи старше 1 дня
find "$LOG_DIR" -name "*.log" -mtime +1 -exec gzip {} \;
# Перемещаем архивы
mv "$LOG_DIR"/*.gz "$ARCHIVE_DIR/" 2>/dev/null
# Удаляем старые архивы
find "$ARCHIVE_DIR" -name "*.gz" -mtime +$RETENTION_DAYS -delete
# Проверяем успешность
if [ $? -eq 0 ]; then
echo "$(date): Ротация логов завершена успешно" >> /var/log/maintenance.log
else
echo "$(date): ОШИБКА ротации логов" >> /var/log/maintenance.log
logger -t logrotate "Ошибка ротации логов"
fi
3. Резервное копирование с шифрованием
#!/bin/bash
SOURCE_DIR="/home/data"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
PASSPHRASE="your-strong-passphrase-here"
# Создаём архив с шифрованием
tar -czf - "$SOURCE_DIR" | gpg --symmetric --cipher-algo AES256 --passphrase "$PASSPHRASE" > "$BACKUP_DIR/backup_$DATE.tar.gz.gpg"
# Проверяем размер бэкапа
SIZE=$(du -h "$BACKUP_DIR/backup_$DATE.tar.gz.gpg" | cut -f1)
if [ -s "$BACKUP_DIR/backup_$DATE.tar.gz.gpg" ]; then
echo "Бэкап создан: $SIZE" | logger -t backup
else
echo "ОШИБКА: бэкап не создан" | logger -t backup -p err
exit 1
fi
# Удаляем бэкапы старше 7 дней
find "$BACKUP_DIR" -name "backup_*.tar.gz.gpg" -mtime +7 -delete
4. Управление пользователями: блокировка неактивных
#!/bin/bash
INACTIVE_DAYS=30
LOG_FILE="/var/log/user_audit.log"
# Находим пользователей, не входивших более INACTIVE_DAYS
lastlog -b "$INACTIVE_DAYS" | awk 'NR>1 && $1 != "Never" {print $1}' | while read user; do
# Блокируем пользователя
usermod -L "$user"
# Устанавливаем shell на nologin
usermod -s /sbin/nologin "$user"
echo "$(date): Пользователь $user заблокирован из-за неактивности" >> "$LOG_FILE"
logger -t user_audit "Блокировка неактивного пользователя: $user"
done
5. Проверка целостности критических файлов
#!/bin/bash
# Файл с хешами (должен быть защищён)
HASHES_FILE="/etc/secure/hashes.sha256"
LOG_FILE="/var/log/integrity_check.log"
if [ ! -f "$HASHES_FILE" ]; then
echo "Файл хешей не найден. Создаём базовую линию..."
mkdir -p /etc/secure
find /etc /usr/bin /usr/sbin -type f -exec sha256sum {} \; > "$HASHES_FILE"
chmod 600 "$HASHES_FILE"
exit 0
fi
# Проверяем целостность
sha256sum -c "$HASHES_FILE" > "$LOG_FILE" 2>&1
# Ищем несоответствия
if grep -q "FAILED" "$LOG_FILE"; then
logger -t integrity "Обнаружены изменения в критических файлах"
mail -s "Integrity Alert" admin@company.local < "$LOG_FILE"
else
logger -t integrity "Проверка целостности пройдена"
fi
Best Practices
-
Используйте
set -euo pipefailв начале скриптов:#!/bin/bash set -euo pipefail -
Логируйте всё — используйте
loggerдля syslog -
Никогда не храните пароли в скриптах — используйте vault или переменные окружения
-
Проверяйте коды возврата после каждой критичной команды
-
Добавляйте --dry-run для опасных операций
-
Используйте полные пути к бинарникам в production-скриптах
Развёртывание
# Копируем скрипты
cp scripts/* /usr/local/sbin/
chmod +x /usr/local/sbin/*
# Добавляем в crontab (пример)
# Ежедневная проверка диска в 2:00
0 2 * * * /usr/local/sbin/monitor_disk.sh
# Еженедельная ротация логов в воскресенье 3:00
0 3 * * 0 /usr/local/sbin/rotate_logs.sh
# Ежедневный бэкап в 1:30
30 1 * * * /usr/local/sbin/backup.sh
# Еженедельная проверка целостности в субботу 4:00
0 4 * * 6 /usr/local/sbin/integrity_check.sh
Заключение
Автоматизация — ключ к эффективному администрированию. Данные скрипты покрывают 80% рутинных задач. Адаптируйте их под вашу инфраструктуру и дополняйте по мере необходимости.
Категории: Администрирование Linux, Автоматизация
Теги: #bash #автоматизация #администрирование #скрипты #Linux #backup #monitoring #security