跳转至

基于rsync协议的演示

在vsftpd中,有虚拟用户(管理员自定义的模拟用户),原因在于使用匿名用户和本地用户都不太安全。 我们知道基于SSH协议的服务器必须要保证有一个系统的用户, 当有许多的同步需求时,就可能需要创建许多的用户, 这显然不符合GNU/Linux的运维标准(用户数越多,服务器越不安全),在rsync中,为了安全性考虑,就有了rsync协议验证登录方式。

具体如何操作?

在配置文件中写入对应的参数以及值就可以了。 在Rocky Linux 8中,需要手动创建 /etc/rsyncd.conf 这个文件。

[root@Rocky ~]# touch /etc/rsyncd.conf
[root@Rocky ~]# vim /etc/rsyncd.conf

该文件的部分参数以及值如下,这里 有更多的参数说明。

说明
address = 192.168.100.4 rsync默认监听的IP地址
port = 873 rsync默认监听的端口
pid file = /var/run/rsyncd.pid 进程pid的文件位置
log file = /var/log/rsyncd.log 日志的文件位置
[share] 共享名称
comment = rsync 备注或者描述信息
path = /rsync/ 所在的系统路径位置
read only = yes yes表示只读,no表示可读可写
dont compress = *.gz *.gz2 *.zip 哪些文件类型不对它进行压缩
auth users = li 启用虚拟用户,定义个虚拟用户叫什么。 需要自行创建
secrets file = /etc/rsyncd_users.db 用来指定虚拟用户的密码文件位置,必须以.db结尾。 文件的内容格式是"用户名:密码",一行一个

提示

密码文件的权限必须是 600

写入一些文件内容到 /etc/rsyncd.conf,且将用户名与密码写入到 /etc/rsyncd_users.db 中,权限为 600

[root@Rocky ~]# cat /etc/rsyncd.conf
address = 192.168.100.4
port = 873
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
[share]
comment = rsync
path = /rsync/
read only = yes
dont compress = *.gz *.bz2 *.zip
auth users = li
secrets file = /etc/rsyncd_users.db
[root@Rocky ~]# ll /etc/rsyncd_users.db
-rw------- 1 root root 9 November 2 16:16 /etc/rsyncd_users.db
[root@Rocky ~]# cat /etc/rsyncd_users.db
li:13579

你可能需要dnf -y install rsync-daemon,然后才能将服务启动: systemctl start rsyncd.service

[root@Rocky ~]# systemctl start rsyncd.service
[root@Rocky ~]# netstat -tulnp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      691/sshd            
tcp        0      0 192.168.100.4:873       0.0.0.0:*               LISTEN      4607/rsync          
tcp6       0      0 :::22                   :::*                    LISTEN      691/sshd            
udp        0      0 127.0.0.1:323           0.0.0.0:*                           671/chronyd         
udp6       0      0 ::1:323                 :::*                                671/chronyd  

pull/下载

服务器中创建一个文件进行验证:[root@Rocky]# touch /rsync/rsynctest.txt

客户端执行以下操作:

[root@fedora ~]# rsync -avz li@192.168.100.4::share /root
Password:
receiving incremental file list
./
rsynctest.txt
sent 52 bytes received 195 bytes 7.16 bytes/sec
total size is 883 speedup is 3.57
[root@fedora ~]# ls
aabbcc anaconda-ks.cfg fedora rsynctest.txt

成功! 基于rsync协议除了上面的写法外,您还可以这样写:rsync://li@10.1.2.84/share

push/上传

[root@fedora ~]# touch /root/fedora.txt
[root@fedora ~]# rsync -avz /root/* li@192.168.100.4::share
Password:
sending incremental file list
rsync: [sender] read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(784) [sender = 3.2.3]

提示您读取错误,和服务器的read only = yes有关。 更改为no然后重启服务[root@Rocky ~]# systemctl restart rsyncd.service

再次尝试,提示您权限拒绝:

[root@fedora ~]# rsync -avz /root/* li@192.168.100.4::share
Password:
sending incremental file list
fedora.txt
rsync: mkstemp " /.fedora.txt.hxzBIQ " (in share) failed: Permission denied (13)
sent 206 bytes received 118 bytes 92.57 bytes/sec
total size is 883 speedup is 2.73
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender = 3.2.3]

我们这里的虚拟用户为 li,它默认映射为 nobody 这个系统用户, 当然您可以更改为其他的系统用户。 换句话说就是,nobody对 /rsync/ 这个目录没有w权限。 当然,我们可以使用[root@Rocky ~]# setfacl -m u:nobody:rwx /rsync/,再次尝试,成功。

[root@fedora ~]# rsync -avz /root/* li@192.168.100.4::share
Password:
sending incremental file list
fedora.txt
sent 206 bytes received 35 bytes 96.40 bytes/sec
total size is 883 speedup is 3.66

Author: tianci li

Contributors: Steven Spencer, Ganna Zhyrnova