#!/bin/bash ##### Основные переменные ##### logfile='proftpd.log' logdir='/var/log/proftpd' basedir='/root/ftp' basename='users' i=0 ## Проверка наличия основных директорий и файлов ## ## Очистка базы ## if [ -d /tmp/users.txt ]; then rm -R /tmp/users.txt fi ##### Считываем файл лога FTP-сервера ##### awk -F " " '{print $4 " " $8 " " $9" "$10}' $logdir/$logfile |grep 'Login successful' > /tmp/1.txt awk -F " " '{print $2}' /tmp/1.txt > /tmp/2.txt rm -R /tmp/1.txt rev /tmp/2.txt |cut -c2- |rev > /tmp/3.txt rm -R /tmp/2.txt ##### Считываем построчно файл с пользователями ##### ##### Пишем количество подключений юзеров из базы в файл ##### FILE=$basedir/$basename FILE2=/tmp/3.txt while read line; do #Считывается строка из базы пользователей FTP #echo "$line" >> /tmp/line IN1=`echo $line | awk '{print $2}'` # Количество разрешенных коннектов #echo "$IN1" >> /tmp/IN.txt IN2=`echo $line | awk '{print $1}'` # Имя пользователя while read line2; do # Считывается строка из лога коннектов if [[ $IN2 == $line2 ]]; # Сравниваем строку из базы со строкой из лога. При совпадении, счетчик i увеличивается на 1 then let "i = i+1" fi #echo "$line2" >> /tmp/line2 done < $FILE2 echo "$line" "$i" >> /tmp/users.txt if [[ $i -ge $IN1 ]]; then passwd -l $IN2 echo "Учетная запись $IN2 заблокирована" >> /var/log/proftpd/blocked.log fi i=0 done < $FILE rm -R /tmp/3.txt exit 0