Удаленный монитор изменений файлов
Логика работы
mkdir -p /var/www/path/to/your/dir
usermod -G ftpusers ftpuser
nano /path/diffserver/diffserver.sh
Заменить на свою почту
Суть работы,- выборочное копирование файлов с клиента на сервер раз в период с обработкой на сервере. На сервере проверяет изменения между последними двумя передачами. При наличии изменений:
1 записывает в лог какие были изменения
2 отправляет изменения на почту
3 проводит действия с файлами по логике:
старые файлы переносит в архив с указанием даты
удаляет старые файлы и копирует на их место новые файлы
Логика работы на клиенте
Раз в период копирует файлы, которые зарегистрированы в diffclietn.conf, в свой каталог "files". При этом, если там уже есть файлы затирает их.
Изменяет имя файла на полный путь к файлу, заменяя знак "/" на "_". Пример, - файл "rc.local" будет иметь вид "_etc_rc.local"
Скрипт не изменяет исходные файлы и работает только с их копиями
Авторизуется на фтп сервер и копирует файлы по пути "/папка_фтп_пользователя/files"
Установка клиента
yum install ftp
nano /path/diffclietn.sh
Логика работы на клиенте
Раз в период копирует файлы, которые зарегистрированы в diffclietn.conf, в свой каталог "files". При этом, если там уже есть файлы затирает их.
Изменяет имя файла на полный путь к файлу, заменяя знак "/" на "_". Пример, - файл "rc.local" будет иметь вид "_etc_rc.local"
Скрипт не изменяет исходные файлы и работает только с их копиями
Авторизуется на фтп сервер и копирует файлы по пути "/папка_фтп_пользователя/files"
Установка клиента
yum install ftp
nano /path/diffclietn.sh
#!/bin/shchmod +x diffclietn.sh
HOST="192.168.10.10"
USER="ftptest"
PASSWD="ftptest"
log=lost.inf
echo "Файлы скопированы для проверки">$log
files=( $(cat "diffclient.conf") )
rm -rf files
mkdir files
for((i=0;i<${#files[@]};i++))do
cp ${files[$i]} files/${files[$i]////_}
done
#DEBUG ftp -inv
ftp -inv $HOST << EOF
user $USER $PASSWD
mkdir files
mput files/*
put lost.inf
bye
EOF
Заменить на свои данные
HOST="192.168.10.10"
USER="ftptest"
PASSWD="ftptest"
Создаем конфиг с путями к файлам, которые будем мониторить
nano /path/diffclietn.conf
пример содержания файла
/etc/rc.localДобавляем исполнение файла в крон
/etc/my.cnf
/etc/php-fpm.d/www.conf
/etc/nginx/nginx.conf
/etc/nginx/conf.d/admin_vhost.conf
/usr/local/etc/raddb/radiusd.conf
/usr/local/etc/raddb/sites-enabled/dhcp
00 07 * * * root /path/diffclient.sh
Настройка фтп на сервере
yum install vsftpd
Обязательно добавить нового пользователя с его папкой на сервере
useradd -d '/var/www/path/to/your/dir' -s /sbin/nologin ftpuser
passwd ftpusermkdir -p /var/www/path/to/your/dir
chown -R ftpuser '/var/www/path/to/your/dir'
chmod 775 '/var/www/path/to/your/dir'
groupadd ftpuserschmod 775 '/var/www/path/to/your/dir'
usermod -G ftpusers ftpuser
Автозапуск фтп
chkconfig --levels 235 vsftpd on
service vsftpd start
Проверяем
локально
ftp localhost
Вывод :
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
***
удаленно
ftp your.ftp.server.comВывод :
Connected to your.ftp.server.com.Установка сервера
220 (vsFTPd 2.2.2)
Name (your.ftp.server.com:yourname):
Name (localhost:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
***
nano /path/diffserver/diffserver.sh
#!/bin/sh
log=diffserver.log
mail=mail@gmail.com
DATE=`date +%F`
files=( $(cat "diffserver.conf") )
set $(wc -l $log);LOGSTART=$1
let "LOGSTART=LOGSTART+1"
echo -e "\n" " `date +%F`">>$log
for((i=0;i<${#files[@]};i++))do
DIR=${files[i]}
echo " $DIR">>$log
if !([ -d "$DIR" ])then
echo "$DIR Родительский каталог не найден!">>$log
else
if !([ -d "$DIR/files.old" ])then
if !([ -d "$DIR/files" ])then
echo "$DIR/files Каталог для проверки не найден!">>$log
else
echo "$DIR/files.old Каталог не создан. Создание каталога и копирование файлов">>$log
mkdir $DIR/files.old
cp $DIR/files/* $DIR/files.old
fi
else
#Сверка последнего копирования клиента
if !([ -f $DIR/lost.inf ])then
echo "$DIR/lost.inf не найден. Создание файла">>$log
echo "Создан сервером">$DIR/lost.inf
fi
INF=( $(cat "$DIR/lost.inf") )
if ([ ${INF[0]} = "Проверен" ])
then
echo "$DIR не обновлялся с последней проверки">>$log
elseecho "Проверен">$DIR/lost.inf#Сверка каталоговif diff -r $DIR/files $DIR/files.old >> $log; thenecho "Каталоги совпадают">> $logelseecho "Есть отличия">> $log#Переносим файлыtar -czvf $DIR/$DATE.tar.gz $DIR/files.oldrm -rf $DIR/files.oldmkdir files.oldcp $DIR/files/* $DIR/files.old#Почтаset $(wc -l $log);LOGEND=$1"p"(echo "Subject:$DIR Отличия в конфигурации"; sed -n $LOGSTART,$LOGEND $log;) | sendmail -F "Differ" $mail.fifififidone.............................#Log in terminalset $(wc -l $log);LOGEND=$1"p"sed -n $LOGSTART,$LOGEND $log
chmod +x diffserver.sh
Заменить на свою почту
mail=mail@gmail.com
Создаем конфиг с путями к папкам фтп клиентов, которых будем мониторить
nano /path/diffserver/diffserver.conf
пример содержания файла
/var/www/klient1Добавляем исполнение файла в крон
/var/www/klient2
/var/www/klient3
30 07 * * * root /path/diffserver/diffserver.sh
Комментарии
Отправить комментарий