一、文件拷贝
正如业界专家所分析和预测的趋势一样,Linux正在和微软与UNIX争夺服务器市场份额,尽管UNIX系统一直在做服务器方面有绝对的优势。 如今,已成三足鼎立之势,Linux逐渐发展成为第三大服务器操作系统,也成为微软在低端服务器市场的主要竞争者。其中的原因之一就是 Linux的安全性能,另外一个就是费用问题了。如果需要执行自动备份操作或部署安全策略,无论是为一个单一的工作站还是为一个网络内的所 有服务器和工作站,rsync工具绝对是一个很好的选择。它能够及时报告所有意外事件的发生,尤其是把它和其他合适的工具配合使用的时候, 可以极大地提高安全防护性能。
rsync被设计成一个简单的文件拷贝工具,但不同于其他拷贝工具,如cp和rcp,在功能上比他们更胜一筹。因为rsync具备校验比较功能,可以 决定哪个文件需要被拷贝,哪个文件已经存在目标机上而不需拷贝。例如,如果需要将位于foo计算机上一个包含30个文件的目录拷贝到bar机 上时,如果选用cp,则拷贝的仅仅只是文件,并且覆盖bar机器上具有相同文件名的文件,可能某些文件已经从foo拷贝到bar上了。但是,如果 选用的是rsync,它将快速的比较foo和bar上相同的目录,查看两者之间的差别所在,最后将那些foo上存在而bar上不存在的文件拷贝到bar上 ,不用拷贝重复文件。这将极大地节省在文件拷贝上所花费的总时间,尤其是需要将某台机器上的数据备份到另外一台机器上的时候。rsync工 具使用起来非常简单、方便,若使用得当的话还可以增强操作的安全性。此外,它还可以被用作一款安全检测工具,不需要任何其他软件的支 持,就可以完成文件系统的完整性审计。
文件拷贝功能
数据安全性的实施一般需要备份关键数据。可以通过效仿小生意的经营方法来解决 ,比如:到办公室的每一台工作站上,将一些重要的文件刻 录到一张光盘上,这比在网络上运行一些自动备份软件要快一些。最有效的方式当然是使用目前推出的低成本并带有高速硬盘的备份服务器, 通过网络定期的将需要备份的文件复制到备份服务器的硬盘上。对于那些办公任务比较大的单位来说,可以调用出一台老式的计算机来扮演这 个备份服务器的角色,它的工作极为简单,在需要在没有人使用网络的时间段,如半夜或周末,拷贝重要的数据文件,完成备份。rsync在计算 机之间通过网络拷贝文件是一个非常简单的过程。如果需要拷贝的文件在一个Linux系统上,则还有一个极为简单的方法,只需要在目标Linux 系统上键入如下命令即可:
rsync localdir host:remotedir
上述命令行是使用rsync默认的操作,在本地系统上(localdir) 指定希望被拷贝的目录,同时指定远程系统的主机名(host)和用来存放被拷贝 文件的目录(remotedir) 。例如,如果想将位于foo系统上/home/baz目录拷贝到主机bar的/home/backup/qux目录中,在主机foo上,则需要键 入的命令为:
rsync /home/baz bar:/home/backup/qux
二、Shell
数据备份完成后该操作会自行终止。但如果仅有上述操作的话,在安全性方面还是没有保障。同时,上述操作也不能拷贝链接文件,不能保存 权限、用户与群之间的的所有关系,以及新建的时间。对于此,最好是在上述命令的基础上再添加一个“-a”选项(对于文件)和“-e”选 项,指定使用远程的shell程序,以保障安全。此时,远端的shell将使用一个加密协议,比如ssh,以便远程的shell可以使用-e ssh格式。这 样,上述rsync命令就有了ssh加密协议的保护,具体形式如下:
rsync -a -e ssh localdir host:remotedir
如果想了解整个文件拷贝过程中所发生的一切,可以使用-v和-progress选项。-v选项表示打印出详细的操作过程。rsync默认的操作是单纯地 拷贝文件,不打印任何东西,尽量不打扰用户,只是简单而快速地完成任务。若只使用一次,-v选项将会报告所有被拷贝的文件,并在最后给 出总量。若使用两次-v选项,即在命令中使用-vv的话,rsync将不仅报告所有被拷贝的文件,还会报告那些勿需拷贝的文件,并在最后给出更 详细的信息。-progress选项的任务则主要是显示当前的拷贝进度,包括当前文件的大小,已完成的百分比,当前的传输速度,剩余时间估计, 等。如果要写一条使用复选项模式和ssh隧道协议的命令,同时还要求有进度指示器的话,则可采用如下形式:
rsync -avv -e ssh -progress localdir host:remotedir
如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件。如果想在下次拷贝时续传文件 ,不需要重新拷贝所有文件的话,可以使用-partial选项阻止rsync在传输中断时删除已拷贝的部分。如果希望同时使用-partial和-progress 选项的功能,则可以使用-P选项,这是rsync提供的一个更便捷的选项,可以代替上述两者。因此,如果想使用复选项模式的文件拷贝,并关闭 删除选项,同时要求有进度指示器和ssh隧道协议的保护,则可以采用如下命令:
rsync -avvP -e ssh localdir host:remotedir
如果希望系统按照预定的调度计划自行处理,可以简单地在后台守护进程任务中添加rsync命令。如:要添加rsync命令到/etc/crontab文件中 ,方法如下所示:
30 4 * * * user rsync -aP -e ssh localdir host:remotedir
后台作业任务中的前五项用于定义某个任务何时被调度,第六项告诉后台守护进程哪一个用户将运行该任务。可以把以下例子中的“user”字 符串替换为将运行该任务的实际的用户帐号。例中的后台守护程序被设置为每天早上4:30运行一次。前五个字段的含义依次为秒,小时,月份 中的某一天,年份中的某月和一周中的星期几。时间以0开头,所以秒为0-59,小时为 0-23。接下来的两个字段,月份中的某一天和年份中的 某月,为1-31和1-12。最后一个字段,星期中的某一天,为0-7,不管是0还是7都代表星期天。实际的后台守护进程配置文件都比这复杂,但这 些是用rsync进行数据备份时创建后台程序的基本操作。如果还想了解更多的创建后台守护程序的相关信息,可以通过启动命令man cron,man crontab和man 5 crontab来获取。如果想集中管理数据备份后台守护进程,可以在备份服务器上创建如下的后台守护项:
30 4 * * * user rsync -aP -e ssh host:remotedir localdir
按照如上所述的方式设置后,rsync将从某个特定的远程主机上的目录(remotedir)中收集文件信息,并复制这些文件到你所指定的本地 (localdir)目录中。
三、完整性检测
通常,文件系统的完整性检查是通过操作特定的安全工具来完成的,比如tripwire。这类工具的操作十分彻底,功能非常强大,并提供一系列 灵活的策略,来帮助系统管理员完成文件系统的完整性检测。但是,对系统管理员来说,可能由于诸多原因而倾向于采用另外的方法来完成完 整性检测。rsync工具就具备这个功能。它所具有的校验功能能够将原始文件和拷贝后的文件进行对比,可以判断并检查出哪些文件被改变,还 可以判断这些文件的更改操作是否合法,是否具备足够的授权。对文件系统的完整性检测来说,rsync所做的第一件事情是为文件系统创建一份 快照。这必须在检查文件系统的完整性之前完成,因为必须有一份完好无缺的拷贝用于检查文件系统是否正确。
完成上述操作之后,在命令行简单地运行一条rsync复制命令。这里需要注意一下:为了确保所使用rsync版本不可被入侵者用于和他自己的版 本进行比较,这样文件系统的变化就无法被检测出,需要拷贝一个rsync的二进制文件版本(可能位于/usr/bin/rsync)到一个可写的媒介上,如 光盘上。然后,当使用rsync时,还需要指定rsync二进制文件位于哪个媒介上,而不是指向计算机上的某个版本。例如,如CD安装/mnt/cdrom ,运行如下命令,可从一台计算机上复制文件到另外一台主机上:
rsync -av --rsync-path=/mnt/cdrom/rsync -e ssh host:/ localdir
上述命令表示,从远端主机上复制整个文件系统(期望被检查的文件系统)到运行rsync所在机器的一个本地文件目录中,一旦拥有了文件系统 的快照,就可以使用如下的命令来检查文件系统的完整性了:
rsync -avn --rsync-path=/mnt/cdrom/rsync -e ssh host:/ localdir
前面提到的-n选项是用来确保没有任何文件被拷贝。而在rsync工具中则有所不同,它仅报告拷贝之前和拷贝之后的差别所在。如果不希望两者 间出现差别,就应该对它们进行仔细检查,确保没有发生未授权的更改。bin/ls, /bin/bash, 和/bin/sshd等文件若发生改变的话是需要特别 留意一下的,如果它们本来是不应该被更改的但却被改动了,这可能表示系统已遭受了某种安全威胁。但是,如果系统自动更新程序正在运行 ,这些文件被更新进程所改变就是很正常的了。因此,最好让更新程序做好日志记录,将那些更新进程替换过的包或文件都做好标记,再和 rsync的完整性检测报告中列出来的所有被更改过的文件进行对照,这样就可以检测出哪些文件已经被非法更改了。
四、系统备份与完整性检查相结合
可以将自动备份和完整性检查合并起来。例如,用自动备份工具备份整个系统,在备份之前创建一个后台守护进程,用于完成完整性检查,并 将输出结果重定向到一个日志文件中。在这种情况下,如果需要备份整个文件系统时,一般只需要检测出那些未曾被更改的部分文件。例如, 假设需要将系统文件备份到root目录,但完整性检测的审计过程却遗漏了一些目录,而这些目录中的内容发生了常规变化,如/home 和/var等 都内容都发生了变化。在这种情况下,如果文件系统的审计程序总是过于“热心”地检查每一个文件的话,结果往往会导致系统备份的效率大 大降低。
如果想象力丰富,思维活跃的话,可以尝试去写一个脚本程序,在后台守护进程上运行。在第一次进行完整性检查的过程中,只有当完整性检 测没有发现任何错误时,才允许系统接着运行备份程序。然后,再亲自对完整性检查产生的日志文件进行仔细的检查,如果仍然没有发现任何 错误,就可以选择一个比较空闲的时间段来运行系统备份程序。一般来说,最好是在完成完整性检测过程之后,且自动审计程序没有发现任何 被改动的文件时,再来运行系统备份程序。shell脚本的功能时非常强大的,但是具备写shell或Perl脚本的能力,对一个Linux系统管理员来说 是很有必要的,常常需要用到。而且,学会写shell或Perl脚本程序也并不是很难。
rsync实现文件的自动备份是相当简单的,这也正是设计rsync工具的动机和目标。不过,除此之外,rsync也有很多其他的功能。比如,可以用 rsync完成文件系统的完整性检测,也是Linux提供的工具的灵活性的一个例证。Linux提供了很多小工具,每个工具都可以非常出色的完成某一 类操作。这也正是与那些大程序的区别所在,一个大程序总是试图解决所有的问题,但最后的结果往往并不理想。此外,这些小工具使用起来 十分灵活,用户可以按照自己的需要将它们组合起来完成一些比较大的复杂的任务。比如rsync借助SSH就可以用来加密和压缩经由网络所传输 的数据,只需要键入简单的命令行就可以大大的提高数据安全性和系统安全性。总之,rsync工具简单易用,值得推荐。在那些富有经验的系统 管理员眼中,rsync是一套多功能的、高效的安全防护工具。
阅读(1424) | 评论(0) | 转发(0) |