rsync 相较于 scp 免密情况下的传输文件、目录,可谓之安全高效、实用性高。如下,直接上步骤!

1、rsync服务器一般有两种方式

  • a)通过密码文件配置访问
  • 优点:对客户端请求 ip 没有限制,访问用户及密码匹配即可访问
  • 不足:用户每次访问都得携带密码文件,具有密码部署成本,不利于服务器对客户端的 ip 控制
  • b)通过添加白名单配置访问
  • 优点:客户端访问来源 ip 控制能力强,指定ip访问,且命令相对简单
  • 不足:不利于动态添加ip,每次新增ip都得更新配置文件,重启服务

2、环境介绍

  • 一台服务器,两台客户端机器测试下载,共三台机器
  • 同一网段,两两相互ping通

主机

IP

server1

172.25.20.1

server2

172.25.20.2

server3

172.25.20.3

3、搭建服务器

本次演示三种情况,第前两者是对于添加 ip 白名单的方式进行管理控制,第三种是通过对密码文件管理实现的访问控制。

  • 安装
# yum install -y  rsync
  • 编辑配置文件

为方便管理 ,创建 rsyncd 服务目录

# mkdir  /etc/rsyncd/

为其创建配置文件,包含一个全局参数和一个或多个模块参数

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

## 全局参数
port = 873              
use chroot = yes
max connections = 200
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log

## 模块参数(服务器端通过指定 IP 限制客户端传输文件功能)
[LOL]
# [LOL],模块名,客户端传输文件时使用
uid = root
# 传输文件时守护进程应该具有的uid,默认值为nobody
gid = root
# 传输文件时守护进程应该具有的gid,默认值为nobody
path = /data/LOL/
# 此模块指定的根路径
read only  = no
# 该选项设定是否允许客户上传文件,no 表示可以读写,默认为 yes
secrets file = /etc/rsyncd/rsyncd.secrets
# 指定一个包含定义用户名:密码对的文件
hosts allow = 172.25.20.2
# 白名单 ip ,指定授权访问 ip

## 模块参数(服务器端通过指定 IP 限制客户端传输文件功能)
[CS]
# [CS],模块名,客户端传输文件时使用
uid = root
# 传输文件时守护进程应该具有的uid,默认值为nobody
gid = root
# 传输文件时守护进程应该具有的gid,默认值为nobody
path = /data/CS/
# 此模块指定的根路径
read only  = no
# 该选项设定是否允许客户上传文件,no 表示可以读写,默认为 yes
secrets file = /etc/rsyncd/rsyncd.secrets
# 指定一个包含定义用户名:密码对的文件
hosts allow = 172.25.20.3
# 白名单 ip ,指定授权访问 ip

## 模块参数(服务器端通过 密码 限制客户端传输文件)
[CF]
# [CF],模块名,客户端传输文件时使用
uid = root
# 传输文件时守护进程应该具有的uid,默认值为nobody
gid = root
# 传输文件时守护进程应该具有的gid,默认值为nobody
path = /data/CF/
# 此模块指定的根路径
read only  = no
# 该选项设定是否允许客户上传文件,no 表示可以读写,默认为 yes
secrets file = /etc/rsyncd/rsyncd.secrets
# 指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。
auth users =root      #  只有在"auth users"被定义时,该密码文件才有作用!!!!!
# auth users 定义root

上述参数,通过三个模块对比说明服务端对客户端的不同方式限制。
server1服务器限制 LOL 模块仅对 ip 172.25.20.2 开放,且无密码限制;
server1服务器限制 CS 模块仅对 ip 172.25.20.3 开放,且无密码限制;
server1服务器限制 CF 模块对所有 ip 开放rsync免交互处理 rsync免密传输_rsync免密
建议读者选 ip 或 密码限制 一种即可。

  • 服务器端:编辑密码文件【 密码文件权限600,文件内容格式:用户名(auth users):密码 】
## 用户名:密码
[root@server1 ~]#  echo 'root:redhat' > /etc/rsyncd/rsyncd.secrets
## 设定权限 600
[root@server1 ~]#  chmod 600 /etc/rsyncd/rsyncd.secrets
  • 创建服务器端测试文件
[root@server1 ~]# mkdir -p /data/LOL/lol 
[root@server1 ~]# touch /data/LOL/lol/test_lol{1..5}
[root@server1 ~]# mkdir -p /data/CS/cs 
[root@server1 ~]# touch /data/CS/cs/test_cs{1..5}
[root@server1 ~]# mkdir -p /data/CF/cf 
[root@server1 ~]# touch /data/CF/cf/test_cf{1..5}
  • 指定配置文件启动
[root@server1 ~]#  /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

4、客户端测试验证

4.1 测试 LOL 模块,ip 白名单控制

此模块指定 ip 开放传输文件功能

  • server2 可 ping 通 server1
  • server2 下载 server1 中 LOL 模块 数据 到 /mnt 目录下
[root@server2 ~]# yum install -y  rsync
[root@server2 ~]# rsync -av  172.25.20.1::LOL/lol/* /mnt

rsync免交互处理 rsync免密传输_linux_02

  • server3 也可 ping 通 server1,却 无法下载 LOL 模块数据
[root@server3 ~]# yum install -y  rsync

rsync免交互处理 rsync免密传输_rsync免交互处理_03

4.2 测试 CS 模块,ip白名单管理控制

此模块也是指定 ip 开放传输文件功能

  • server2 可 ping 通 server1 却 无法下载 CS 模块数据
  • server3 可 ping 通 server1,也可以 下载 CS 模块数据
4.3 测试 CF 模块,通过密码文件管理控制

此模块虽然放开所有的可ping通 ip ,但通过 auth users 来限制 客户端 使用 密码 传输功能,因此客户端拿到密码即可。

通过 auth users 来限制 客户端 使用 密码 传输功能,因此客户端拿到密码即可访问,注意:客户端用户密码文件里不能包含用户名。

server2、server3 均无 密码 的情况下
  • server2 可 ping 通 server1,需要密码验证,仍然无法下载
  • server3 可 ping 通 server1,也是需要密码验证,仍然无法下载
server2、server3 获得 密码 的情况下(该密码是上述server1中配置密码文件的密码)
  • server2 获取密码后,即可进行文件传输
    注意用户密码文件里只包含密码即可!
[root@server2 ~]# echo 'redhat'  >  /etc/rsyncd.passwd
[root@server2 ~]# chmod 600 /etc/rsyncd.passwd 
[root@server2 ~]# rsync -av  172.25.20.1::CF/cf/*  --password-file=/etc/rsyncd.passwd /mnt/

rsync免交互处理 rsync免密传输_rsync免密_04

  • server3 获取密码后,即可进行文件传输
    注意用户密码文件里只包含密码即可!
[root@server3 ~]# echo 'redhat'  >  /etc/rsyncd.passwd
[root@server3 ~]# chmod 600 /etc/rsyncd.passwd 
[root@server3 ~]# rsync -av  172.25.20.1::CF/cf/*  --password-file=/etc/rsyncd.passwd /mnt/

rsync免交互处理 rsync免密传输_rsync免密_05