Rsync配置

1 简介

rsync用于文件同步,它可以在本地与远程主机之间,或者两个本地目录之间同步文件。

2 安装

yum install rsync

注:传输的双方都必须安装rsync。

3 基本用法

3.1 本地同步

基本格式 rsync [options] source destination。其中,source 是源目录或文件,destination 是目标目录或文件。

示例:

本地目录 source 同步到目标目录 destination,并排除所有 .txt 文件:

rsync -av –exclude=’*.txt’ source/ destination

或者rsync -av –exclude ‘*.txt’ source/ destination

排除某个目录里面的所有文件,但不希望排除目录本身:

rsync -av –exclude ‘dir1/*’ source/ destination

多个排除模式,用多个–exclude参数:

rsync -av –exclude ‘file1.txt’ –exclude ‘dir1/*’ source/ destination

如排除模式很多,可以写入一个文件,每个模式一行,然后用–exclude-from参数指定文件:

rsync -av –exclude-from=’exclude-file.txt’ source/ destination

3.2 远程同步

3.2.1 SSH方式(使用操作系统用户)

基本格式 rsync [options] source user@remote_host:destination。

示例:

本地目录 source 同步到远程主机上的 destination 目录:

rsync -av source/ username@remote_host:destination

如需要指定 SSH 命令参数,如使用特定端口,使用 -e 选项:

rsync -av -e ‘ssh -p 2234’ source/ user@remote_host:/destination

3.2.2 守护程序方式(不使用操作系统用户,使用虚拟用户密码)

如果另一台主机安装并运行了rsync守护程序(类似服务端),则可以用rsync://(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::。

rsync -av source/ remote_host::module/destination

注:上面地址中的module不是实际路径名,而是rsync配置文件中指定的一个资源名,由管理员分配。

查询rsync守护程序分配的所有module列表,执行下面命令:

rsync rsync://remote_host

除使用双冒号,rsync 协议也可以直接用rsync://指定地址。

rsync -av source/ rsync://remote_host/module/destination

4 守护程序配置

4.1 rsync服务端配置示例

4.1.1编辑rsync配置文件/etc/rsyncd.conf,添加如下内容:

# 全局配置

uid = nobody

gid = nobody

pid file = /var/run/rsyncd.pid

fake super = yes          #允许在同步过程中保留文件的所有属性信息

use chroot = yes

read only = no

log file = /var/log/rsyncd.log

transfer logging = yes

timeout = 300

#第一个模块:公共下载区(匿名只读,没有 auth users,允许匿名访问)

[public_download]

path = /app/rsync/public

comment = Public Download Area (Read-Only)

read only = yes

list = yes

#第二个模块:备份目录(需要认证,可读写)

[backup]

path = /app/rsync/backup

comment = Secure Backup Directory

read only = no

list = yes

auth users = backup_admin

secrets file = /etc/rsyncd.secrets

#第三个模块:日志上传(需要认证,只写)

[log_upload]

path = /app/rsync/logs

comment = Log Upload Directory (Write-Only)

read only = no

write only = yes           #客户端只能上传,不能下载或列表

list = no

auth users = logger

secrets file = /etc/rsyncd.secrets

保存退出。

重启rsync服务:systemctl restart rsyncd

查看rsync服务状态:systemctl status rsyncd

设置服务开机自启:systemctl enable rsyncd

4.1.2创建虚拟用户密码文件,并授权为600

echo “backup_admin:p@ss123w0rd” >/etc/rsyncd.secrets

echo “logger:p@ss456w0rd” >>/etc/rsyncd.secrets

chmod 600 /etc/rsyncd.secrets

4.1.3创建目录,并授权

mkdir -p /app/rsync/{public,backup,logs}

chown -R nobody:nobody /app/rsync/

4.2 rsync客户端配置

rsync客户端仅需配置虚拟用户的密码,并授权为 600

4.2.1虚拟用户密码配置至文件中  

echo “p@ss123w0rd” >/etc/rsync.pass.backup_admin

echo “p@ss456w0rd” >>/etc/rsync.pass.logger

chmod 600 /etc/rsync.pass.backup_admin

chmod 600 /etc/rsync.pass.logger

4.2.2 客户端验证

匿名访问验证:

rsync -av /local/path/ rsync://remote_host/public_download/remote/path/

或rsync -av /local/path/ remote_host::public_download/remote/path/

示例:

不能上传rsync -av public/list.txt 192.168.195.186::public_download/

可以下载rsync -av 192.168.195.186::public_download/ public/

可读写验证:

上传rsync -av /backup/app1.tar.gz backup_admin@192.168.195.186::backup –password-file=/etc/rsync.pass.backup_admin

下载rsync -av backup_admin@192.168.195.186::backup/ /backup/ –password-file=/etc/rsync.pass.backup_admin

只写验证:

可以上传rsync -av /logs/messages.log logger@192.168.195.186::log_upload/ –password-file=/etc/rsync.pass.logger

不能下载rsync -av logger@192.168.195.186::log_upload/ /logs/ –password-file=/etc/rsync.pass.logger

注:nobody,backup_admin关系见下图:

5 配置文件常用参数说明

rsyncd.conf文件通常由两部分组成:

全局参数:设置在文件开头,对所有模块生效。

模块定义:以 [模块名] 的形式开始一个模块节,其后的参数只对该模块生效,直到下一个模块节开始。

全局参数:

参数说明示例
pid file指定 rsync 守护进程写入其 PID 的文件路径。用于管理服务。pid file = /var/run/rsyncd.pid
port指定 rsync 守护进程监听的端口号,默认为 873。port = 873
address指定 rsync 守护进程绑定的 IP 地址。默认为所有地址。address = 192.168.195.100
uid守护进程在处理文件时使用的默认用户 ID。建议设为 nobody 或一个无特权用户。uid = nobody
gid守护进程在处理文件时使用的默认组 ID。建议设为 nogroup 或 nobodygid = nogroup
use chroot是否在传输前将客户端锁定到模块路径。出于安全考虑,强烈建议设为 yesuse chroot = yes
read only全局默认的只读设置。如果为 yes,客户端不能上传文件。read only = yes
hosts allow允许连接的主机/IP/网段,用空格或逗号分隔。支持通配符。hosts allow = 192.168.195.0/24, 10.0.0.100
hosts deny拒绝连接的主机/IP/网段。默认为允许所有。hosts deny = *
max connections最大并发连接数。0 表示无限制。max connections = 10
timeout连接超时时间(秒)。timeout = 300
log file指定守护进程的日志文件路径。log file = /var/log/rsyncd.log
transfer logging是否记录传输日志。transfer logging = yes
dont compress指定哪些文件不进行压缩传输。默认会压缩以节省带宽。dont compress = *.gz *.zip *.bz2
motd file指定一个 “Message Of The Day” 文件,客户端连接时会显示其内容。motd file = /etc/rsyncd.motd

模块参数:

参数说明示例
path(必需) 该模块在服务器上对应的物理路径。path = /data/backup
comment模块的描述信息,客户端使用 rsync host:: 命令时会显示。comment = Our main backup repository
read only覆盖全局设置。该模块是否只读。read only = no
write only该模块是否只写(较少使用)。write only = no
list当客户端列出所有可用模块时,是否显示此模块。list = yes
auth users允许访问该模块的用户名列表,用逗号分隔。这些用户不是系统用户。如果未设置,则允许匿名连接。auth users = tom, jerry
secrets file与 auth users 配合使用。指定存储 用户名:密码 的文件路径。该文件权限必须为 600secrets file = /etc/rsyncd.secrets
hosts allow覆盖全局设置。允许访问此模块的客户端。hosts allow = 192.168.195.50
hosts deny覆盖全局设置。拒绝访问此模块的客户端。hosts deny = *
max connections覆盖全局设置。此模块的最大并发连接数。max connections = 2
exclude / exclude from排除文件/目录列表。exclude 直接跟模式,exclude from 跟一个文件路径,该文件包含排除模式列表。exclude = .tmp ~/
exclude from = /etc/rsyncd.excludes
include / include from包含文件/目录列表。与 exclude 逻辑相反。include = important_dir/
timeout覆盖全局设置。此模块的连接超时时间。timeout = 600
dont compress覆盖全局设置。此模块中不压缩的文件类型。dont compress = *.jpg *.mp4
lock file该模块的锁文件路径。用于支持 max connectionslock file = /var/run/rsyncd.%R.lock