使用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:**DEST

  • daemon远程同步:

    # 远程主机文件同步到本地,可使用::或用rsync://指定daemon模式 rsync [选项] USER@HOST**::**SRC DEST rsync [选项] **rsync://**USER@HOST/SRC DEST

    # 本机文件同步到远程主机 rsync [选项] SRC USER@HOST**::**DEST rsync [选项] SRC **rsync://**USER@HOST/DEST

    shelldaemon模式的区别是shell模式使用一个冒号:,而daemon模式使用两个冒号::或用rsync://显式指定。

前两种工作模式比较简单,直接输入源和目标路径即可进行数据同步。第三种用法区分客户端和服务端,需要在服务端配置才能正常工作。

接下来我们介绍使用daemon方式进行数据同步。

rsync daemon模式

类似于 V2rayrsync 命令既可以用作客户端,也可以用作服务端。我们平常用的 rsync 便是作为客户端使用,加上--daemon参数则变成服务端模式。

CentOS 7Ubuntu/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 安装配置实践

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章