需求場景:
部署一套sftp環境,用於客戶上傳電子檔案(合同檔案或視訊檔案等),檔案上傳到sftp後立即實時同步到業務應用伺服器上。為了安全考慮,檔案在首次同步後,後續再同步時就不覆蓋同名檔案,這樣做是為了防止檔案被篡改!
部署思路:
1)sftp高可用環境部署,參考:http://www.cnblogs.com/kevingrace/p/7868049.html
2)rsync+inotify實時同步環境部署,參考:http://www.cnblogs.com/kevingrace/p/6001252.html
3)防篡改做法:當檔案被首次實時同步到應用伺服器上後,立馬使用chattr命令將其鎖定,即禁止寫入!可以在應用伺服器上寫一個鎖定檔案的指令碼,實時執行的!
sftp的上傳目錄是/data/test,實時同步到應用伺服器上的目錄也是/data/test,那麼應用伺服器上的鎖定檔案的指令碼為:
[root@centos6-05 ~]# vim /root/chattr_test.sh #!/bin/bash while [ "1" = "1" ] do for A in `ls -l /data/test/|grep -v total|awk '{print $9}'`;do /usr/bin/chattr +ai /data/test/${A} done done
實時執行改指令碼:
[root@app01 ~]# nohup sh -x /root/chattr_test.sh & [root@app01 ~]# ps -ef|grep chattr_test.sh root 5684 9769 0 21:33 pts/0 00:00:00 grep chattr_test.sh root 28227 9769 37 18:36 pts/0 01:05:48 sh -x chattr_test.sh
上面指令碼針對的是上傳目錄/data/test下全是檔案,沒有子目錄。如果/data/test 下面有子目錄,那麼就在指令碼中新增find命令查詢對應子目錄下的檔案進行chattr鎖定。
測試效果:
sftp上傳一個新檔案A,該檔案會實時同步到應用伺服器/data/test 目錄下,接著修改A檔案並上傳覆蓋到sftp目錄下,則該檔案不會覆蓋到應用伺服器的同名檔案了。