Featured image of post rsync服务器的配置与使用

rsync服务器的配置与使用

通过rsync服务器实现安全而高效的文件备份

背景

一直以来,我都使用群晖(自带rsync服务)来备份服务器上的文件,但是有个问题就是,群晖无法完全保留文件的属性。这样一来,如果真的有天需要用到这些备份文件时,修改权限又是一份工作量。

正好,家庭服务器主机上有个Raid5阵列,可以为备份提供足够的安全保障,所以何不直接在家庭服务器上建立一个 rsync 服务器呢。

安装

1
sudo apt install rsync

目前大多数Linux发行版本都默认安装了rsync工具,而且rsyncssh结合就可以在任意包含这两个工具的主机上进行文件同步/备份,那我们为什么又要弄一个rsync服务器呢?

rsyncssh的结合是个强绑定,需要系统登陆账号,这本来不是问题,但是为了在脚本中使用,我们往往需要通过ssh-copy-id将本机的密钥拷贝到远程主机上,用以实现无密码ssh登陆。这就相当于打开了一扇没有上锁的大门,这在不是很受信的主机上做这样的事是非常危险的。

但这在rsync服务器上就不一样了,下面我们慢慢讲。

配置服务

1
2
sudo systemctl enable rsync.service --now 
sudo systemctl status rsync.service

这时我们会看到ConditionPathExists=/etc/rsyncd.conf was not met,不急,一步一步慢慢来,下面我们来添加一个配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo vim /etc/rsyncd.conf 
# add following lines

#模組名稱
[backups]
#說明
comment = Backup Module
#允許使用rsync連入的ip
hosts allow = *
#不允許連入的ip,*表示全檔
#hosts deny = *
#存放備份資料的目錄
path = /path/to/backup
#認證帳號 (要設定於rsyncd.secrets 內的帳號)
auth users = backup
#用來啟動rsync server 的uid
uid = root
#用來啟動rsync server 的gid
gid = root
#密碼檔存放路徑
secrets file = /etc/rsyncd.secrets
#是否設定為唯讀
read only = no
#不要對這些附檔名的檔案做壓縮
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

(哈哈,借鉴了一下)

重点来了,注意此处的auth users为独立用户,与系统登陆用户没有关联。

下面再创建个密码文件:

1
2
3
4
5
6
7
8
sudo vim /etc/rsyncd.secrets
# add password line

backup:<your password here>

## 指定权限 => 很重要
sudo chown root:root /etc/rsyncd.secrets
sudo chmod 0600 /etc/rsyncd.secrets

注意:此处的用户名必须与上面的auth users相同。

我们可以使用openssl rand -base64 12生成随机密码,更改后面的数字实现不同长度的密码。我个人就用这个命令生成各种token、密码、随机字符等。

至此,就配置完成了,最后重启一下服务:

1
sudo systemctl restart rsync.service

测试

查看873端口是否开启

1
sudo netstat -tunlp | grep 873

(这里使用sudo可以看到具体命令行程序名称)

同步测试:

1
2
export RSYNC_PASSWORD="your password here"
rsync -avcz /path/to/backup/ backup@<your host here>::backups/

这里有两点需要注意:

  1. 使用RSYNC_PASSWORD指定密码,可以实现在脚本中免除密码输入。当然我们也可以使用--password-file来指定参数文件,但需要注意,客户端的密码文件与服务端不一样,客户端的密码文件没有用户名(我真的有点不理解它的设计意图了)。
  2. 这里目标路径使用的是模块名:backups,这样不但隐藏了实际路径,也做到了前后端的分离,如果服务端变更路径就不需要对客户端进行同步修改。

日志

作为一个优秀的运维人员,保留日志是一个很好的习惯。

如果需要记录传输日志,可以在/etc/rsyncd.conf文件开头添加两行:

1
2
syslog facility = syslog 
max verbosity = 2

这样,传输日志就会记录在syslog中,可以使用journalctl -u rsync -f来查看。

总结

其实,rsync是一个古老而强大的工具,只是随着时代的发展而逐渐被人遗忘了。举个例子,我们可以使用rsync -avcz a/ b/来实现桌面操作系统中常用的合并两个文件夹的操作。


最后更新于 2023-12-13
小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次