1.rsync的配置说明

rsync服务器的配置文件为/etc/rsyncd.conf,默认是没有的的,需要手动创建,在其中标写出控制认证、访问、日志记录等等。该文件是由一个或多个模块结构组成。一个模块定义以方括弧中的模块名开始,直到下一个模块定义开始或者文件结束,模块中包含格式为name = value的参数定义。每个模块其实就对应需要备份的一个目录树,比如说三个目录树需要备份:/var/www/html//var/ftp/pub//root/,那么就需要在配置文件中定义三个模块,分别对应三个目录树。配置文件的每个新行都表示一个新的注释、模块定义或者参数赋值。以#开始的行表示注释,以""结束的行表示下面一行是该行的继续。参数赋值中等号后可能是一个大小写不敏感的字符串、一个以trure/false表示的布尔值。

2.rsync.conf配置文件中的全局参数

在文件中[modlue]之前的所有参数都是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。

motd file

"motd file"参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。

log file

"log file"指定rsync的日志文件,而不将日志发送给syslog

pid file

指定rsyncpid文件。

syslog facility

指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security,sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6local7。默认值是daemon


例如下设置:

[root@www www]# cat /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid指定rsyncpid文件

uid = nobody#指定当该模块传输文件时守护进程应该具有的uid

gid = nobody #指定当该模块传输文件时守护进程应该具有的gid

log file = /var/log/rsync.log #日志文件


1.4、模块参数

在全局参数之后就需要定义一个或多个模块了,模块中可以定义以下参数:

comment

给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

path

指定该模块的供备份的目录树路径,该参数是必须指定的。

use chroot

如果"usechroot"指定为true,那么rsync在传输文件以前首先chrootpath参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true

max connections

指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

lock file

指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock

read only

该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true

list

该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true

uid

该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是"nobody"

gid

该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为"nobody"

exlude

用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-""+"来指定是exclude还是include

但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exlude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。

exlude from

指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exlude列表定义。


include

用来指定多个由空格隔开的多个rsync并应该exlude的模式列表。这等同于在客户端命令中使用--include来指定模式,结合includeexlude可以定义复杂的exlude/include规则。一个模块只能指定一个include选项,但是可以在模式前面使用"-""+"来指定是exclude还是include

include from

指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users

该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)

secrets file

该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个。(例如:/etc/rsyncd.secrets)

strict modes

该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true

hosts allow

该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形:

xxx.xxx.xxx.xxx,客户主机只有完全匹配该IP才允许访问。例如:192.167.0.1

o a.b.c.d/n,属于该网络的客户都允许连接该模块。例如:192.168.0.0/24

o a.b.c.d/e.f.g.h,属于该网络的客户都允许连接该模块。例如:192.168.0.0/255.255.255.0

o一个主机名,客户主机只有拥有该主机名才允许访问,例如:www.gzh.com

o *.gzh.com,所有属于该域的主机都允许。

默认是允许所有主机连接。

hosts deny

指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

ignore errors

指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。

ignore nonreadable

指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。

transfer logging

使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。

log format

通过该选项用户在使用transferlogging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:

o %h 远程主机名

o %a 远程IP地址

o %l 文件长度字符数

o %p 该次rsync会话的进程id

o %o 操作类型:"send""recv"

o %f 文件名

o %P 模块路径

o %m 模块名

o %t 当前时间

o %u 认证的用户名(匿名时是null)

o %b 实际传输的字节数

o %c 当发送文件时,该字段记录该文件的校验码

默认log格式为:"%o %h[%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。在源代码中同时发布有一个叫rsyncstatsperl脚本程序来统计这种格式的日志文件。

timeout

通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600

refuse options

通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名,而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩,应该是:"dont compress = *"

dont compress

用来指定那些不进行压缩处理再传输的文件,默认值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

3.服务启动,

a、加入rc.local

编辑/etc/rc.d/rc.local,在最后添加:

/usr/local/bin/rsync –daemon

b、xinetd中启动

安装xinetd服务

service xinetd start ; chkconfigxinetd on

chkconfig rsync on

rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。


4.实例分析

假设有两台服务器:AB。其中A是主web服务器ip地址为192.168.81.102B服务器是备份服务器,ip地址为192.168.81.101。其中Aweb内容存放在以下目录:/var/www/html//var/ftp/pub//root/。在备份机B上建立对这几个目录内容的备份。

服务器配置实例

那么在192.168.81.101上创建rsyncd的配置文件/etc/rsyncd.conf,内容如下:


uid = nobody

gid = nobody

use chroot = no

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log


[html]

path = /var/www/html/

ignore errors

read only = true

list = false

hosts allow =192.168.81.101

hosts deny = 0.0.0.0/32

auth users = backup

secrets file = /etc/rsyncd.secrets#用户验证信息文件


[pub]

path = /var/ftp/pub/

ignore errors

read only = true

list = false

hosts allow = 192.168.81.101

hosts deny = 0.0.0.0/32

uid = ftp

gid = ftp

auth users = backup

secrets file = /etc/rsyncd.secrets#用户验证信息文件


[root]

path = /root/

ignore errors

read only = true

list = false

hosts allow = 192.168.81.101

hosts deny = 0.0.0.0/32

uid = root

gid = root

auth users = backup

secrets file = /etc/rsyncd.secrets #用户验证信息文件

这里定义有四个三个模块,分别对应于三个需要备份的目录树。这里只允许192.168.81.101备份本机的数据,并且需要认证。三个模块授权的备份用户都为backup,并且用户信息保存在文件/etc/rsyncd.secrets中,其内容如下:

backup:redhat

并且该文件只能是root用户可读写的,否则rsyncd启动时会出错。这些文件配置完毕以后,就需要在A服务器上启动rsyncd服务器:

#rsync --daemon

客户命令示例

#/usr/local/bin/rsync -vzrtopg--delete --exclude "logs/" --exclude "conf/ssl.*/" --progressbackup@192.168.168.102::www /backup/www/ --password-file=/etc/rsyncd.secrets

上面这个命令行中-vzrtopg里的vverbosez是压缩,rrecursivetopg都是保持文件原有属性如属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--exclude "logs/" 表示不对/www/logs目录下的文件进行备份。--exclude"conf/ssl.*/"表示不对/www/conf/ssl.*/目录下的文件进行备份。

backup@192.168.168.102::html表示对该命令是对服务器192.168.168.102中的html模块进行备份,backup表示使用backup来对该模块进行备份。

--password-file=/etc/rsyncd.secrets来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设为只有root可读。且服务器和备份服务器都要有,但是备份服务器的要求只读密码。

这里将备份的内容存放在备份机的/backup/www/目录下。

[root@linuxaid /]# rsync -vzrtopg --delete --exclude "logs/"--exclude "conf/ssl.*/" --progress backup@192.168.168.102::www/backup/www/ --password-file=/etc/ rsyncd.secrets

对其它两个模块操作的命令分别为:

#rsync -vzrtopg –delete backup@192.168.168.102::ftp /backupftp/--password-file=/etc/ rsyncd.secrets

#rsync –vzrtopg –delete backup@192.168.168.102::root /backup/root/--password-file=/etc/ rsyncd.secrets

在本实例中通过验证时提示一下错误

[root@www ~]# rsync -az mysql-5.1.26-rc 192.168.168.102::www

Password:

@ERROR: auth failed on module www

rsync error: error starting client-server protocol (code5) at main.c(1296) [sender=2.6.8]

主要是因为在配置密码的是有使用的是useruserpasswd格式,改为直接写密码的话就可以了,其中在服务器192.168.168.102/etc/ rsyncd.secretsuseruserpasswd格式,备份服务器只写密码,其权限都为600.