Linux文件系统保护最佳实践:Tripwire

原创
运维 系统运维
Linux的系统安全管理主要可以分为四个部分,最重要的部分莫过于其文件系统。Linux系统的最大特点就是文件系统,其中所有的设备都是通过文件进行操作和管理。用户可以采用Linux开源领域最为优秀的Tripwire工具来协助进行文件系统安全保护。

【51CTO特稿】Tripwire是UNIX安全规范中最有用的工具之一,Tripwire可检测多达10多种的UNIX文件系统属性和20多种的NT文件系统(包括注册表)属性。Tripwire首先使用特定的特征码函数为需要监视的系统文件和目录建立一个特征数据库,所谓特征码函数就是使用任意的文件作为输入,产生一个固定大小的数据(特征码)的函数。入侵者如果对文件进行了修改,即使文件大小不变,也会破坏文件的特征码。利用这个数据库,Tripwire可以很容易地发现系统的丝毫细微的变化。而且文件的特征码几乎是不可能伪造的,系统的任何变化都逃不过Tripwire的监视。

推荐专题:Linux系统全方位管理

为了防止被篡改,Tripwire对其自身的一些重要文件进行了加密和签名处理。这里涉及到两个密钥:site密钥和local密钥。其中,前者用于保护策略文件和配置文件,如果多台机器具有相同的策略和配置的话,那么它们就可以使用相同的site密钥;后者用于保护数据库和报告,因此不同的机器必须使用不同的local密钥。

下要给出该软件的安装以及使用步骤,要得到该软件可以从Sourceforge直接获得(当前最新版本为tripwire-2.4.1.2-src.tar.bz2)。

(1)解压缩安装文件到/usr/local目录

//切换工作路径
#cd /usr/local/       

//解压缩
#tar xvfj tripwire-2.4.1.2-src.tar.bz2  

(2)执行make命令,进行安装

//进入已经解压的文件夹
#cd tripwire-2.4.1.2-src  

//生成makefile文件
#./configure

//执行make命令
#make         

//执行make install命令
#make install

(3)生成基准数据库

成功编译Tripwire,就可以准备开始对须要监控的文件进行扫描,以生成Tripwire数据库,在Tripwire的src目录下:如下操作:

#./tripwire –init      

(4)测试

数据库生成了,使用命令运行Tripwire,扫描系统变化和细小改变

#./tripwire—check

当第一次运行Tripwire时,须要进行一些准备工作,主要有编辑config文件、检查邮件报告是否正常、根据需要配置策略文件和初始化数据库文件,即创建一个签名的基线数据库。下一次运行时,它使用twpol.txt文件产生一个新的签名数据库。然后,比较两个数据库,实施用户定义的任何选项屏蔽(排除经常更改的文件),最后通过电子邮件或显示器来为用户在终端上输出一个可读的报告。

为了确保Tripwire正确地运行,要特别注意其安装和配置的过程,具体步骤如下:

#p#

1.创建密钥和签名

在安装Tripwire之后,可以使用如下命令进行设置:

#./twinstall.sh

脚本twinstall.sh的作用在于执行下列任务:

  1. 创建site和local密钥,这时会要求输入口令(参见下面的步骤);如果这两个密钥也已存在,则可以跳过此步骤。其中,site密钥存放在site.key文件中,而local密钥则存放在hostname-local.key(这里的hostname是指该机器的主机名)文件之中。
  2. 利用site密钥对默认配置文件twcfg.txt进行签名,并将签名(而非被签名的文件twcfg.txt)存放于文件tw.cfg之中。
  3. 利用site密钥对默认策略文件twcfg.pol进行签名,并将签名(而非被签名的文件twcfg.pol)存放于文件tw.pol之中。

2.编辑配置文件

首先打开文本格式的配置文件twcfg.txt,该文件的位置在前面所述安装过程后的/usr/local/etc目录下。然后根据需要修改配置文件,修改完毕后存盘。最后使用twadmin命令根据已编辑的文本文件生成一个加密的配置文件。

ROOT          =/usr/local/sbin
POLFILE       =/usr/local/etc/tw.pol
DBFILE        =/usr/local/lib/tripwire/$(HOSTNAME).twd
REPORTFILE    =/usr/local/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE   =/usr/local/etc/site.key
LOCALKEYFILE  =/usr/local/etc/localhost.localdomain-local.key
EDITOR        =/bin/vi
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL   =3
MAILMETHOD    =SENDMAIL
SYSLOGREPORTING =false
MAILPROGRAM   =/usr/sbin/sendmail -oi -t
 
#twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key twcfg.txt 

安装完毕后,该文件已存在,因此不必再重新创建。通常情况下,配置文件的内容不会发生变化,因此没有必要去修改它,使用Tripwire默认的就可以了。在此时我们应该测试一下Email报告功能是否起作用,以防以后遇到麻烦,输入以下命令进行测试。

#tripwire --test --mail user@domain.com 

3.编辑策略文件

首先打开文本格式的策略文件twpol.txt。该文件的位置在前面所述安装过程后的/usr/local/etc目录下。Tripwire在安装时已经在策略文件中写入了默认的检查规则。这些默认的规则主要检查重要的系统文件和Tripwire自身文件的完整性。

由于默认的配置就不能监视系统中的SUID和SGID文件,而这对于我们的系统安全是非常重要的,因此,我们需要修改配置加入对这个项目的监视。使用如下命令可以找出系统中的所有SUID文件:

#find / -type f -perm -4000 -print

以下命令可以找出系统中的所有SGID文件:

#find / -type f -perm -2000 -print

现在,我们需要把以上命令找出的SUID和SGID文件加入到Tripwire的/策略文件中去。除此之外,我们还要把所有用户home目录下的初始文件也纳入监视的范畴。主要包括以下文件:

  1. .bashrc、.profile、.bash_profile、.cshrc、kshrc、.login等
  2. bash、csh以及ksh登录之后的初始化命令或者脚本
  3. .forward:告诉/usr/lib/sendmail把邮件转发到某些地址
  4. .rhosts:可以使用rsh登录到本帐户的远程主机名
  5. .xinitrc、.Xauthority、Xdefault等X窗口系统的一些重要文件

在创建Tripwire的特征码数据库之前,还有一件事情要做,就是检查.netrc和.rhosts文件的权限是否是600。修改完策略文件后存盘。最后使用twadmin命令根据已编辑的文本文件生成一个加密的策略文件。最后,策略文件的文本文件要删除掉,否则该文件的内容易被察看。

#twadmin --create-polfile twpol.txt 

安装完毕后,该文件已存在,因此不必再重新创建。

4.生成基准数据库

配置文件和策略文件都编辑和生成好了之后,就应该根据配置文件的规则生成基准数据库。基准数据库在Tripwire安装完毕后生成一次即可。我们使用Tripwire命令来生成基准数据库。

#tripwire --init 

基准数据库生成时,Tripwire会提示输入local key,对其进行高强度的加密,以防止对文件内容的非法改变。

5.运行完整性检查

基准数据库生成完毕之后,我们可以使用tripwire命令随时进行完整性检查了:

#tripwire --check 

进行检查时可以指定检查报告的存贮位置:

#tripwire --check --twfile/var/lib/report/report.twr 

进行检查时也可发送Email报告结果:

#tripwire --check --email-report 

进行检查时指定使用Email进行发送的报告等级:

#tripwire --check --email-report --email-report-level 2 

使用指定严重性等级的规则进行检查:

#tripwire --check --severity 80 

使用指定的规则名进行检查:

#tripwire --check --rule-name rulename 

只检查指定的文件或目录:

#tripwire --check object1 object2 object3 … 

进行检查时忽略某些属性(因为有些属性的检查比较耗费系统资源,比如Hash算法):

#tripwire --check --ignore "property, property, property, property" 

如果完整性检查完毕后,发现Email报告功能未生效,可以检查两个方面:一个是策略文件中规则的emailto属性必须填写妥当,另一个是运行tripwire命令时,--email-report选项必须被包含。

6.查阅报告

完整性检查进行完毕后,我们就可以查阅报告以发现有哪些文件遭到了改动,改动了什么。使用twprint命令可以输出报告,它有多种使用方式。

如下命令将加密的报告内容输出到显示器:

#twprint --print-report --twrfile /var/lib/report/report.twr 

如下命令将加密的报告内容输出到一个文本文件:

#twprint --print-report --twrfile /var/lib/report/report.twr - >myreport.txt 

如下命令输出报告时指定输出的报告等级:

#twprint --print-report --report-level 4 --twrfile /var/lib/report/report.twr 

7.升级基准数据库文件

如果在报告中发现了一些违反策略的错误,而这些错误又是被认为正常的,那就要使用Tripwire命令更新基准数据库:

#tripwire --update --twrfile /var/lib/report/report.twr 

也可以在进行完整性检查之后立即自动进行更新:

#tripwire --check --interactive 

8.升级策略文件

随着系统的变化,原来的策略文件必然会不能满足需要,因此必须要不断的更新策略文件中的规则。更新和创建新的策略文件不同,因为如果为Tripwire创建了新的策略文件,那么就必须要重新生成基准数据库。更新时首先打开策略文件的文本文件:

#twadmin --print-profile > twpol.txt 

然后编辑该文件,完毕后存盘。最后使用Tripwire命令进行策略更新:

#tripwire --update-policy twpol.txt 

在此步骤中,Tripwire软件会要求输入site key。

9.改变site key和local key

sitekey和localkey是在安装时生成的,但是也可以随时修改。注意,如果已经用来加密的密钥文件被删除了或是被覆盖了,那么Tripwire加密过的文件都不能访问了。因此,我们要对这两个文件做备份。 很多时候会发现我们的口令可能不太安全,因此要改变口令。需执行以下命令即可:

#twadmin --generate-keys --local-keyfile /etc/tripwire/site.key
#twadmin --generate-keys --local-keyfile /etc/tripwire/local.key 

但是这么做的话,会造成使用以前密钥进行加密的文件无法打开的情况。我们要使用以前的策略文件、配置文件、数据库文件、报告文件的话,因此在改变口令之前,我们必须使用以下的命令把这些已加密的文件进行解密。

#twadmin --remove-encryption file1 file2 ... 

在生成新的密钥文件之后,我们还应该用新密钥对这些文件进行加密。配置文件和策略文件只能用site key加密,而数据库文件和报告文件只能用local key加密。

#twadmin --encrypt --site-keyfile /etc/tripwire/site.key file1 file2 file3 ...
#twadmin --encrypt --local-keyfile /etc/tripwire/local.key file1 file2 file3 ... 

以上就是Linux文件系统保护的实现步骤参考。Tripwire是一个非常不错的开源工具,可以说是系统运维们不可替代的工具,值得仔细研究学习。除了Linux文件系统保护之外,Linux系统的安全管理还包括用户管理、进程保护、日志管理等三个方面,这些将在之后的文章中进行讲解。

【编辑推荐】

  1. 轻松玩转Solaris ZFS文件系统的备份恢复
  2. 下一代Linux文件系统
  3. ZFS文件系统:Linux,让我们约会在9月
  4. Linux系统全方位管理
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2018-05-02 08:35:33

LinuxTripwire文件系统

2018-01-23 11:10:09

2013-04-17 09:17:37

Linux文件系统系统清理工具

2011-01-13 14:10:30

Linux文件系统

2020-07-22 14:53:06

Linux系统虚拟文件

2023-11-07 07:08:57

2021-04-12 05:44:44

Linux文件系统

2021-06-06 16:55:22

Linux文件系统

2009-11-24 13:26:17

2018-08-24 10:10:25

Linux文件系统技术

2019-09-20 10:04:45

Linux系统虚拟文件

2011-01-13 13:18:38

Linux网络文件

2009-12-14 13:14:57

2021-11-01 13:38:55

Linux文件系统

2010-08-19 11:55:39

2009-12-25 09:58:46

linux划分文件系统

2009-12-22 15:12:33

Linux扩展文件系统

2021-05-31 07:50:59

Linux文件系统

2014-08-05 10:30:58

tripwirelinux

2011-02-21 10:31:24

点赞
收藏

51CTO技术栈公众号