当前位置: 首页 > Linux

使用rsyncdaemon跨主机安全同步

时间:2023-04-07 01:53:03 Linux

文章原文:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/rsync命令已经被用来快速同步主机间文件,例如定期备份WordPress文件和数据库到其他主机。之前对rsync不太了解,一直都是用shell的方式同步文件。为了避免在连接时输入密码,公钥分布在多个主机之间。今天发现这种方式存在严重的安全问题:如果一台主机被黑了,黑客很容易漫游所有主机!于是又研究了一下rsync,发现rsyncdaemon可以用来跨主机安全同步。本文链接:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/使用rsync守护进程安全同步rsync的三种工作模式rsync命令有三种用法,对应三种两种工作模式:本地同步,类似cp命令:rsync[option]SRCDEST;shell远程同步,类似scp命令:\#远程主机文件同步到主机rsync[option]USER@HOST:SRCDEST\#this同步电脑文件到远程主机rsync[option]SRCUSER@HOST:DESTdaemonremotesynchronization:\#远程主机文件同步到本地,可以使用::或者使用rsync://来指定daemon模式rsync[option]USER@HOST::SRCDESTrsync[option]rsync://USER@HOST/SRCDEST\#同步本地文件到远程主机rsync[option]SRCUSER@HOST::DESTrsync[option]SRCrsync://USER@HOST/DESTshell和daemon模式的区别是shell模式使用冒号:,而守护进程模式使用两个冒号::或使用rsync://明确指定。前两种工作方式比较简单,直接输入源和目标路径即可进行数据同步。第三种用法区分客户端和服务端,需要在服务端配置才能正常工作。接下来介绍使用daemon进行数据同步。rsync守护进程模式类似于V2ray,rsync命令既可以作为客户端,也可以作为服务端。我们平时使用的rsync作为client,加上--daemon参数就变成了server模式。CentOS7、Ubuntu/Debian系统安装rsync后会自动配置rsync服务,但CentOS8系统需要安装rsync-daemon包才能配置rsync服务:\#Ubuntu/Debianinstallrsyncsudoaptupdatesudoaptinstall-yrsync\#CentOS/RHEL安装rsyncsudoyuminstall-yrsync\#CentOS8安装rsyncdaemonsudoyuminstall-yrsync-daemonrsyncdaemon默认的配置文件是/etc/rsyncd.conf,不是在Ubuntu/Debian中默认创建。编辑/etc/rsyncd.conf,写入类似下面的内容(#开头的行是注释):\#rsyncd.conf的配置项分为全局参数和模块参数。全局参数只有几个,一般保持默认\#以[模块名]开头的模块,后面的参数只适用于本模块\#卸载模块外的参数适用于所有模块\#说明rsyncd.conf文件和值,请参考manrsyncd.conf\#欢迎文件motdfile=/etc/rsyncd.motd\#用户和组iuid=rootgid=root\#是否chroot,出于安全考虑,建议是yesusechroot=yes\#是否记录传输记录transferlogging=no\#是否只读,值为true时客户端不能上传readonly=false\#是否只写,当值为true时,客户端无法下载writeonly=false\#默认拒绝所有主机连接hostsdeny=*\#用户名密码文件,每行格式为:用户名:密码,例如\#tlanyan:12343112\#文件权限必须设置为600,除非严格模式设置为falsesecretsfile=/etc/rsyncd.secrets\#定义一个名为backup的模块[backup]\#moduleDescriptioncomment=backupdirectory\#模块路径,把request改成自己的path=/data\#allowedhostiphostsallow=xx.xx.xx.xx\#allowedusernameauthusers=tlanyan\#allowtolist这个模块建议在上面nolist=no配置文件,/etc/rsyncd.motd和/etc/rsyncd.secrets需要自己创建,例如:\#设置欢迎标语echo'WelcometoRsyncDaemon'>/etc/rsyncd.motd\#设置用户名和密码echo'tlanyan:12343112'>>/etc/rsyncd.secrets\#设置密码文件权限chmod600/etc/rsyncd.secrets并启动rsync服务:\#CentOS/RHELsystemctlenablersyncdsystemctlstartrsyncd\#Ubuntu/Debian的服务名为rsyncsystemctlenablersyncsystemctlstartrsyncrsyncdaemon默认监听873端口,打开防火墙后需要释放该端口(Aliyun/AWS/GCP等网页有安全后台组,需要登录和释放):\#CentOS7/8和其他启用firewalld的系统firewall-cmd--permanent--add-port=873/tcpfirewall-cmd--reload\#CentOS7/8等系统启用了iptablesiptables-IINPUT-ptcp--dport873-jACCEPT\#Ubuntu/Debian等系统启用了ufwufwallow873/tcp使用rsyncdaemon同步文件接下来使用授权用户在授权机器上同步文件:rsync-avPauthorizeduser@serverip::backup/var/www/data/连接过程中需要在rsyncd.secrets中输入用户密码,或者使用--password-file指定无需每次手动输入的密码文件:\#将密码写入文件echo'12343112'>secrets\#设置密码文件权限chmod600secrets\#免密码同步文件rsync-avP--password-file=secrets已授权user@serverip::backup/var/www/data/除了使用两个冒号::,其他使用方法与shell方法相同。rsyncdaemon总结了使用rsyncdaemon避免跨主机同步时的安全风险,可以指定授权ip和授权用户,实践中推荐。参考1.rsync复制文件的一些注意事项2.rsync同步与备份文件到本地3.WordPress备份方案与备份脚本4.rsync安装与配置实践