使用rsync daemon跨主机安全同步
Posted tlanyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rsync daemon跨主机安全同步相关的知识,希望对你有一定的参考价值。
文章原文:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/
一直使用 rsync
命令在主机间快速同步文件,例如定时 备份WordPress文件和数据库 到其他主机。
之前对 rsync 了解不深,一直使用 shell
方式同步文件。为了避免连接时输入密码,便在多个主机间分发公钥。今天意识到这种做法有严重的安全问题:如果某台主机被黑,黑客能轻易漫游所有主机!
于是再次研究 rsync
,发现可以使用rsync daemon跨主机安全同步。
本文链接:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/
使用rsync daemon跨主机安全同步
rsync的三种工作模式
rsync
命令有三种用法,对应三种工作模式:
本机同步,类似于
cp
命令:rsync [选项] SRC DEST;
shell
远程同步,类似于scp
命令:\\# 远程主机文件同步到主机
rsync [选项] USER@HOST:SRC DEST
\\# 本机文件同步到远程主机
rsync [选项] SRC USER@HOST:DESTdaemon
远程同步:\\# 远程主机文件同步到本地,可使用::或用rsync://指定daemon模式
rsync [选项] USER@HOST::SRC DEST
rsync [选项] rsync://USER@HOST/SRC DEST\\# 本机文件同步到远程主机
rsync [选项] SRC USER@HOST::DEST
rsync [选项] SRC rsync://USER@HOST/DESTshell
和daemon
模式的区别是shell
模式使用一个冒号:
,而daemon
模式使用两个冒号::
或用rsync://
显式指定。
前两种工作模式比较简单,直接输入源和目标路径即可进行数据同步。第三种用法区分客户端和服务端,需要在服务端配置才能正常工作。
接下来我们介绍使用daemon
方式进行数据同步。
rsync daemon模式
类似于 V2ray,rsync
命令既可以用作客户端,也可以用作服务端。我们平常用的 rsync
便是作为客户端使用,加上--daemon
参数则变成服务端模式。
CentOS 7、Ubuntu/Debian系统安装 rsync
后会自动配置好rsync服务,但在 CentOS 8 系统中需要额外安装 rsync-daemon
包才会配置rsync服务:
\\# Ubuntu/Debian安装rsync
sudo apt update
sudo apt install -y rsync
\\# CentOS/RHEL安装rsync
sudo yum install -y rsync
\\# CentOS 8安装rsync daemon
sudo yum install -y rsync-daemon
rsync daemon的默认配置文件是 /etc/rsyncd.conf
,Ubuntu/Debian默认没创建。编辑 /etc/rsyncd.conf
,写入类似以下内容(#号开头的行是注释):
\\# rsyncd.conf的配置项分全局参数和模块参数,全局参数只有少数几个,一般保持默认即可
\\# 模块以[模块名]开头,后续参数仅作用于该模块
\\# 卸载模块外的参数适用于所有模块
\\# rsyncd.conf文件的指令和值请参考 man rsyncd.conf
\\# 欢迎文件
motd file = /etc/rsyncd.motd
\\# 用户和组id
uid = root
gid = root
\\# 是否chroot,出于安全考虑建议为yes
use chroot = yes
\\# 是否记录传输记录
transfer logging = no
\\# 是否只读,值为true时客户端无法上传
read only = false
\\# 是否只写,值为true时客户端无法下载
write only = false
\\# 默认拒绝所有主机连接
hosts deny = *
\\# 用户名密码文件,每一行格式是:用户名:密码,例如
\\# tlanyan:12343112
\\# 该文件权限必须设置为600,除非strict mode设置为false
secrets file = /etc/rsyncd.secrets
\\# 定义名为backup的模块
[backup]
\\# 模块说明
comment = backup directory
\\# 模块路径,请求改成自己的
path = /data
\\# 允许的主机ip
hosts allow = xx.xx.xx.xx
\\# 允许的用户名
auth users = tlanyan
\\# 是否允许列出该模块,建议为no
list = no
上述配置文件中,/etc/rsyncd.motd
和 /etc/rsyncd.secrets
需自行创建,例如:
\\# 设置欢迎标语
echo \'欢迎使用Rsync Daemon\' > /etc/rsyncd.motd
\\# 设置用户名和密码
echo \'tlanyan:12343112\' >> /etc/rsyncd.secrets
\\# 设置密码文件权限
chmod 600 /etc/rsyncd.secrets
然后启动rsync
服务:
\\# CentOS/RHEL
systemctl enable rsyncd
systemctl start rsyncd
\\# Ubuntu/Debian的服务名为rsync
systemctl enable rsync
systemctl start rsync
rsync daemon默认监听873端口,开启了防火墙需要放行端口(阿里云/AWS/GCP等网页后台有安全组,需要登录并放行):
\\# 启用了firewalld的CentOS 7/8等系统
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload
\\# 启用了iptables的CentOS 7/8等系统
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
\\# 启用了ufw的Ubuntu/Debian等系统
ufw allow 873/tcp
使用rsync daemon同步文件
接下来,在授权的机器上使用授权用户同步文件:
rsync -avP 授权用户@服务器ip::backup /var/www/data/
连接过程中需要输入rsyncd.secrets
中的用户密码,也可以使用--password-file
指定密码文件而无需每次手动输入:
\\# 将密码写入文件
echo \'12343112\' > secrets
\\# 设置密码文件权限
chmod 600 secrets
\\# 免密同步文件
rsync -avP --password-file=secrets 授权用户@服务器ip::backup /var/www/data/
除了使用两个冒号::,其他使用方式与shell方式都相同。
rsync daemon总结
使用rsync daemon,避免了跨主机同步时的安全隐患,并且可以指定授权ip和授权用户,实践中推荐使用。
参考
1. rsync复制文件的一些注意事项
2. rsync同步和备份文件到本地
3. WordPress备份方案和备份脚本
4. rsync 安装配置实践
以上是关于使用rsync daemon跨主机安全同步的主要内容,如果未能解决你的问题,请参考以下文章