前天干了件吐血的大事,是这样的,同事让我帮他清理下服务器上一些乱七八糟的用户,我cat下/etc/passwd文件,里面一堆的用户乱七八糟的用户文件,更为可耻的是有人还把用户加入sudoers里面去了(之前接触过该台服务器的人),我二话不说,一个个使劲的删,连同用户所属的文件也通通删了(使用命令usrdel -f -r xxx,以后删除东西的时候千万千万要注意-f参数,最好任何时候都别用),包括一些FTP账户,FTP用户直接使用的是本地用户,自然FTP是用来管理网站程序的,于是我也把它删了,悲剧发生了,这些FTP账户所属目录就是网站程序文件,一删除用户资料带着程序文件全删除了,后来网站不能访问了检查一遍机器其他问题后才发现问题,当时都没反应过来,之后那个悔,那个慌。还好有备份,不过这两天的图片没了得重新上传。
于是,在这件事情的基础上,就决定配置一个实时性比较强的数据备份,自然用rsync。至于rsync是什么东东,同学们自己Google或者百度去。
Ubuntu Server,Centos,Debian等安装rsync服务可以直接使用在线安装包。
1
|
sudo
apt-get install
rsync |
或
1
|
yum
install
rsync |
安装好了之后,我们接下来需要配置三个文件,分别是rsyncd.conf、rsyncd.motd、rsyncd.secrets,这三个文件分别是主配置文件、显示欢迎界面文件以及密码验证文件,并且rsyncd.conf默认是不存在的,得自己创建。
1
|
touch
rsyncd.conf |
接下来,在该配置文件里写入如下配置代码:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#
Distributed under the terms of the GNU General Public License v2 #
Minimal configuration file for rsync daemon #
See rsync(1) and rsyncd.conf(5) man pages for help #
This line is required by the /etc/init.d/rsyncd script pid
file
= /var/run/rsyncd .pid port
= 873 address
= 192.168.1.1 #uid
= nobody #gid
= nobody uid
= root gid
= root use
chroot = yes read
only = yes #limit
access to private LANs hosts
allow=192.168.1.2 /255 .255.255.0 hosts
deny=* max
connections = 5 motd
file
= /etc/rsyncd .motd #This
will give you a separate log file log
file
= /var/log/rsync .log #This
will log every file transferred - up to 85,000+ per user, per sync #transfer
logging = yes log
format
= %t %a %m %f %b syslog
facility = local3 timeout
= 300 [larro] path
= /var/www/larro list= yes ignore
errors auth
users
= root secrets
file
= /etc/rsyncd .secrets comment
= This is the System file
of Larro's Blog exclude
= easylife/ samba/ |
大概解释下上面的配置代码:
address =192.168.1.1 rsync服务器的IP地址
uid = root 使用root用户
gid = root 使用root用户组
注意:服务器端传输文件时,需要配置使用哪个用户和用户组来执行,默认是nobody。 如果用nobody用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。偷懒为了方便,用了root ,或者也可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
hosts allow=122.224.164.218/255.255.255.0
hosts deny=*
上面两行是指定那些客户端IP可以连接到该rsync服务器,这个配置能很大程度上提高安全性,host allow 是允许的IP列,格式为IP/网段,多个空格隔开
log file=/etc/log/rsync.log rsync的日志记录文件
以及,上面的rsyncd.conf配置文件是分为两部分,包括第一部分公共配置参数(上面解释部分)以及单个模块的配置,如上:
1
2
3
4
5
6
7
8
|
[larro] path
= /var/www/larro list= yes ignore
errors auth
users
= root secrets
file
= /etc/rsyncd .secrets comment
= This is the System file
of Larro's Blog exclude
= unrsync/ |
这里,是指配置了一个名为larro的同步备份项目模块:
path = /var/www/larro 是要备份的文件的位置
list = yes 参数是表示是否允许列出文件结构,一般不要配置成yes,因为这样别人就能知道文件结构了,多少是个不太安全的因素。
auth users = root 验证时候使用的用户
secrets file = /etc/rsyncd.secrets 验证时候使用的密码验证文件,就是上面提到的三个配置文件之一
comment = This is the system file of Larro’s Blog 这个是当你列出该项目模块时候的一个说明文字,可以任意配置
exclude = unrsync/ 配置项目模块里你不想同步备份的文件及文件夹,多个空格隔开
至此,rsyncd.conf配置文件弄好了,具体的其他详细配置项目在官方配置文档里查看,大家可仔细参考,接下来来配置rsyncd.motd,rsyncd.secrets.
rsyncd.motd也是可以任意配置,因为它仅仅是一个显示欢迎的话语,不过可以写得工整点,比如:
1
2
3
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++ +
Welcome to use the rsync
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
然后配置rsyncd.secrets,前面rsyncd.conf里面使用的验证用户名是root,那么这里面配置的就是root的验证密码.
1
2
3
|
echo
"mypasswod"
> /etc/rsyncd .secrets chown
root /etc/rsyncd .secrets chmod
600 /etc/rsyncd .secrets |
听上去有点恐怖,太不安全了吧呵呵,这个配置文件权限必须是设置成600,不然无法使用rsync服务,到时候会提示以下错误信息:
1
2
3
|
password
file
must not be other-accessible continuing
without password file Password: |
这样子就没关系了,因为权限设置为600,也就是只有root用户本身才能读写,也就是说其他用户登录系统后,并不能查看到root的账户信息,不过前提是你是这样设置的并且rsync服务被你配置成功了,呵呵。
到这里,一个rsync服务器上面的简单配置就好了。
启动服务:
1
|
rsync
--daemon --config= /etc/rsyncd .conf |
上面命令是通过–daemon参数在后台启动rsync服务,并且通过使用/etc/rsyncd.conf配置文件来启动rsync服务,如果配置文件为默认的/etc/rsyncd.conf则可以不使用–config参数来指定配置文件位置。
然后你得弄另外一个机器192.168.1.2来备份上面机器项目文件。
一样,先安装rsync。
然后,使用下面命令测试下:
1
|
rsyncd
--list-only [email protected]::larro |
之后会提示输入密码,成功后会列出larro模块下所有的文件,或者通过在客户机上配置存放一个密码文件来访问,省得每次都提示输入密码,创建某个rsync账户的密码文件,比如上面用的root密码。
1
2
3
|
mkdir
/etc/rsync touch
/etc/rsync/rsync .larro. passwd echo
"mypassword"
> /etc/rsyc/rsync .larro. passwd |
然后你就可以直接这样使用命令:
1
2
|
rsync
--list-only -- passwd - file = /etc/rsync/rsync .larro. passwd
root@19\ 2.168.1.1::larro |
rsync有六种不同的工作模式:
- rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
- rsync [OPTION]… [USER@]HOST:SRC DEST
- rsync [OPTION]… SRC [SRC]… DEST
- rsync [OPTION]… [USER@]HOST::SRC [DEST]
- rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
- rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
解释:
- 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
- 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
- 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
- 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
- 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
- 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
rsync中的参数
-a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD -r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档; -e ssh的参数建立起加密的连接。 -u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时 --progress 是指显示出详细的进度情况 --delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致 --password-file=/password/path/file 来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
在这篇文章里就先讲讲rsync的基本配置,在下一篇写写怎么通过rsync、crontab、shell来完成备份同步服务器上数据文件。
原文地址:使用RSYNC备份网站数据(1)
// -_- Larro