linux 目录防篡改,linux 下同步方案以及站点文件的防篡改(伪)

linux 下同步方案以及站点文件的防篡改(伪)

通道: 使用ssh协议通信,利用ssh的 authorized_keys 特性,使用ssh-keygen生成不带有密码的密钥。

执行: crond来设定执行周期

注: 下面 local 指本地,server指同步的服务器,pwd 指当前目录路径

安全方面, 使用普通非登录(nologin)用户进行数据的交换。

静态文件同步 - rsync

视频文件和图片文件比较大,不适合监控具体内容,利用 rsync 同步文件夹,可以快速计算文件夹对比索引同步。

rsync --log-file="/local/rsync.log" -az --delete -e ssh user@ssh-server-ip:/server/pwd /local/pwd

不使用同步删除时,去除 --delete 即可。

站点中心同步 - git 防篡改

使用git自动管理中心站点代码,检测站点文件变动,防止客户端的文件篡改以及添加删除等。

A-server:中心端

在站点根目录中添加过滤列表文件 .gitignore

*.log

*.html

upload/

log/

cache/

则在检测变动的时候,可以过滤 所有 log,html后缀和 upload,log,cache等变动的文件夹。

如果没有库索引则建立git库

$ git init

$ git add .

$ git commit -a -m "site source init"

建议 建立分支 develop 开发分支,本地运行成功后推送到服务器,然后合并到master供同步端拉取

B-client: 同步端

拷贝站点

$ git clone user@ip:/pwd/.git

每5m 更新下拉 master 分支 文件数据。

流程:

脚本功能实现

检测文件变动

无有变动则拉取服务器A的变动内容

有变动的时候则将变动文件提交到临时git分支中,并删除。 之后拉取服务器A的变动内容

同时将被篡改的内容部分写入到日志文件中去。

#!/bin/bash

# file : /pwd/shell/gitpull.sh

# 修改地址

cd `pwd`

# 修改日志地址

gitlog='/pwd/git.log'

today=`date +%Y%m%d`

gitstatus=`git status`

echo '检测库状态'

if [[ $gitstatus == *"working directory clean"* ]];then

echo '无任何改变'

echo '拉取'

git pull >> $gitlog

else

echo '有文件变动'

echo '将改变提交到分支 '$today

git checkout -b $today

echo '写入日志'

touch $gitlog

echo " " >> $gitlog

date '+%Y-%m-%d %H:%M' >> $gitlog

echo "==========================================" >> $gitlog

git diff >> $gitlog

echo "==========================================" >> $gitlog

echo " " >> $gitlog

git add .

git commit -a -m 'its change'

echo '回到 master'

git checkout master

echo '删除分支'

git branch -D $today

echo '拉取'

git pull >> $gitlog

fi

添加执行

$ crontab -e

*/5 * * * * /pwd/shell/gitpull.sh

会产生5m的时间差。

mysql 文件备份

非均衡负载,可查阅mysql 主从同步

#!/bin/bash

# filename: bakmysql.sh

# set path 文件存储位置

bakpath='/pwd/backup/'

logfile='/pwd/backup/bak.log'

themonth=${bakpath}`date +%y%m`'/'

theday=${themonth}`date +%d`'/'

thetime=${theday}`date +%Y%m%d%H%M`'.dbname.sql.bak'

declare -i month=`date +%y%m`

month=$month-2

echo '' >> $logfile

echo `date +%D\ %T` >> $logfile

for i in `ls -F $bakpath`; do

if [[ -d $bakpath$i ]]; then

if [[ $i < $month ]]; then

echo 'delete out 2 month '$i >> $logfile

rm -rf ${bakpath}$i

fi

fi

done

if [[ -d $themonth ]]; then

echo $themonth 'is exist;' >> $logfile

else

echo 'makedir ' $theday >> $logfile

mkdir -p $theday

fi

if [[ -d $theday ]]; then

echo $theday 'is exist;' >> $logfile

else

echo 'makedir ' $theday >> $logfile

mkdir $theday

fi

echo 'bakup mysqldatabase dbname - '${thetime} >> $logfile

mysqldump -uroot -p123456 dbname > $thtime

# -h host

添加每 30m 执行

$ crontab -e

*/30 * * * * /pwd/shell/mysqlbak.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值