linux下查看文件详细信息命令stat

有时候想要查看linux 文件的详细的一些时间 ls -l 出来的结果可能不是你想要的了

stat 出来的结果可能才是你想要的

[[email protected] ~]# stat hosts
  File: "hosts"
  Size: 1204        Blocks: 8          IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 1569988     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-10-25 12:07:04.174510054 +0800
Modify: 2013-05-22 18:27:06.100797625 +0800
Change: 2013-05-22 18:27:06.100797625 +0800

说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态
与文件相关的3个时间:

  1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

  2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。

  3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令文件名。

下面是 man stat 的详细信息解释

用法:stat [选项]… 文件…
Display file or file system status.

 -L, --dereference     follow links
  -Z, --context         print the SELinux security context
  -f, --file-system     display file system status instead of file status
  -c --format=格式    使用指定输出格式代替默认值,每用一次指定格式换一新行
      --printf=格式   类似 --format,但是会解释反斜杠转义符,不使用换行作
                输出结尾。如果您仍希望使用换行,可以在格式中
                加入"\n"
  -t, --terse       使用简洁格式输出
      --help        显示此帮助信息并退出
      --version     显示版本信息并退出

有效的文件格式序列(不使用 –file-system):

%a 八进制权限
  %A   用可读性较好的方式输出权限
  %b   计算已分配块数(参见%B)
  %B   以字节为单位输出%b 所报告的每个块的大小
  %C   SELinux 安全环境字符串
  %d    十进制设备编号
  %D    十六进制设备编号
  %f    十六进制原始模式
  %F    文件类型
  %g    文件的属组ID
  %G    文件的属组组名
  %h    硬链接数量
  %i    Inode 编号
  %n    文件名
  %N    如果对象是一个符号链接,显示引用到的其它文件名
  %o    I/O 块大小
  %s    总计大小,以字节为单位
  %t    十六进制主设备类型
  %T    十六进制子设备类型
  %u    文件的属主ID
  %U    文件的属主用户名
  %x    上次访问时间
  %X    从UNIX 元年起计的上次访问时间
  %y    上次修改时间
  %Y    从UNIX 元年起计的上次修改时间
  %z    上次更改时间
  %Z    从UNIX 元年起计的上次更改时间

有效的文件系统格式序列:

%a 非超级用户可用的剩余块数
  %b    文件系统的总数据块数
  %c    文件系统中文件节点总数
  %d    文件系统中空闲文件节点数
  %f    文件系统中空闲块数
  %C    SELinux 安全环境字符串
  %i    十六进制文件系统ID
  %I    允许的文件名最大长度
  %n    文件名
  %s    块大小(用于快速传输)
  %S    基本块大小(用于块计数)
  %t    十六进制类型描述
  %T    可读性较好的类型描述

安装zabbix

安装zabbix

0、环境准备

zabbix WEB环境搭建
zabbix的安装需要LAMP或者LNMP环境,为了方便直接用yum安装LAMP环境。
yum install mysql-server httpd php

需要其它的软件包

yum install mysql-dev gcc net-snmp-devel curl-devel perl-DBI php-gd php-mysql php-bcmath php-mbstring php-xm

1、下载

wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.5/zabbix-2.2.5.tar.gz/download
tar zxvf zabbix-2.2.5.tar.gz
cd zabbix-2.2.5/database/mysql

2、创建数据库&&用户

create database zabbix;
grant all on zabbix.* to [email protected] identified by ‘zabbix’;
flush privileges;

3、导入数据&&结构

mysql -uzabbix -pzabbix zabbix < schema.sql
mysql -uzabbix -pzabbix zabbix < images.sql
mysql -uzabbix -pzabbix zabbix < data.sql

4、编译安装

./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy

5、增加用户,用户组 必须添加,在启动服务的时候需要验证用户

groupadd zabbix
useradd zabbix -g zabbix

6、修改配置文件

ln -s /usr/local/zabbix/etc /etc/zabbix

更改配置文件中数据库相关的用户名密码

vim /etc/zabbix/zabbix_server.conf

修改以下三项

DBName=zabbix

DBUser=zabbix

DBPassword=zabbix

更改agentd配置文件

vim /etc/zabbix/zabbix_agentd.conf

Hostname=LOG01
ServerActive=10.10.10.180:20051

7、拷贝相应的web程序到相关WEB服务目录下

cp -r /data/soft/zabbix-2.0.5 /frontends/php/ /var/www/html/zabbix/
chown -R zabbix.zabbix /var/www/html/zabbix

8、修改PHP配置文件php.ini内容

vim /etc/php.ini

date.timezone = Asia/Shanghai
post_max_size = 32M
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
mbstring.func_overload = 2

9、修改后重启httpd

service httpd restart

10、启动zabbix server

/usr/local/zabbix/sbin/zabbix_server

11、启动zabbix agentd

/usr/local/zabbix/sbin/zabbix_agentd

12、浏览器打开 http://192.168.1.1/zabbix/

按照步骤一步步安装,我这里就不截图了,填好之前创建的数据库用户名密码

最后安装完,默认用户名 admin 密码:zabbix

这里初始安装已经完毕

这里是zabbix agentd的安装文档

 

done !

安装使用tripwire

安装使用tripwire

下载

wget http://jaist.dl.sourceforge.net/project/tripwire/tripwire-src/tripwire-2.4.2.2/tripwire-2.4.2.2-src.tar.bz2

安装

tar -xf tripwire-2.4.2.2-src.tar.bz2 cd tripwire-2.4.2.2-src ./configure –prefix=/usr/local/tripwire make && make install

协议出现后要设置几个密码 ,建议使用同一个密码;

Enter the site keyfile passphrase: ← 输入“site keyfile”口令(输入后不会显示),并且记住这个口令 Verify the site keyfile passphrase: ← 再次确认“site keyfile”口令

Enter the local keyfile passphrase: ← 输入“local keyfile”口令(输入后不会显示),并且记住这个口令 Verify the local keyfile passphrase: ← 再次确认“local keyfile”口令

Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)

Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)

配置文件定义

配置文件:定义数据库、策略文件和Tripwire可执行文件的位置: /usr/local/tripwire/etc/twcfg.txt 策略:定义检测的对象及违规时采取的行为: /usr/local/tripwire/etc/twpol.txt 数据库:用于存放生成的快照: /usr/local/tripwire/lib/tripwire/$(HOSTNAME).twd

另外,Tripwire为了自身的安全,防止自身被篡改,也会对自身进行加密和签名处理。其中,包括两个密钥: .site密钥:用于保护策略文件和配置文件,只要使用相同的策略和配置的机器,都可以使用相同的site密钥: /usr/local/tripwire/etcsite.key .local密钥:用户保护数据库和分析报告,这肯定不会重复的: /usr/local/tripwire/etc/$(HOSTNAME)-local.key

修改配置文件

vim twcfg.txt  ← 修改文本格式的Tripwire配置文件 LOOSEDIRECTORYCHECKING =false  ← 找到这一个行,将false的值变为true(不监测所属目录的数据完整性)  ↓ LOOSEDIRECTORYCHECKING =true   ← 变为此状态

REPORTLEVEL =3  ← 找到这一行,将3变为4(改变监测结果报告的等级)  ↓ REPORTLEVEL =4  ← 变为此状态

更新配置文件

./twadmin –create-cfgfile -S ../etc/site.key ../etc/twcfg.txt

更新策略文件

./twadmin –create-polfile -S ../etc/site.key ../etc/twpol.txt

4.更新数据库

当你更新了twpol.txt后需用此命令更新数据库

cd /usr/local/tripwire ./sbin/tripwire –update-policy –secure-mode low /usr/local/tripwire/etc/twpol.txt
Parsing policy file: /usr/local/tripwire/etc/twpol.txt
Please enter your local passphrase: ← 输入“local keyfile”口令
Please enter your site passphrase: ← 输入“site keyfile”口令

======== Policy Update: Processing section Unix File System.

======== Step 1: Gathering information for the new policy.

Wrote policy file: /usr/local/tripwire/etc/tw.pol
Wrote database file: /usr/local/tripwire/lib/tripwire/localhost.localdomain.twd

初始化数据

./tripwire --init

检查数据

./tripwire --check

查看报告

./twprint --print-report --twrfile ../lib/tripwire/report/test-20140821-142606.twr >/tmp/test20140821.txt

cat /tmp/test20140821.txt

每天你可以吧检查的报告以邮件的形式发送到你的邮箱

如何使用tripwire?

简介

开源的 Tripwire® 是一种文件完整性检查器软件包,已经面世很多年了,我在 Linux® 中多次使用过它,但是直到最近才在 AIX® 中使用。主要原因如下:

  • 使用 gcc AIX 版本进行编译很麻烦。
  • 我喜欢使用 AIX 内置的审计服务。

但是,由于现在有一个 Tripwire rpm 用于 AIX,所以我将它用于我们的一些 AIX 机器。Tripwire 并不为基于文件更改的入侵检测提供完整的解决方案,但是若同时运行 AIX 审计的话,它可以提供坚实的安全策略。根据您在主策略文件中提供的对象,Tripwire 监视系统中文件和目录的更改。这些更改可能是(但不限于)改变了以下方面:

  • inode
  • 时间戳
  • 文件大小
  • 文件权限和所有权属性
  • 哈希值
  • 文件类型

Tripwire 报告自它上次运行以来发生的更改,您可以将之与以前的运行报告进行比较。如果文件已更改、删除或添加,那么需要系统管理员的进一步调查,判断是正当更改还是一些应用程序或用户的强迫更改。

与其他入侵检测系统 (IDS) 相比,Tripwire 确实有其自身的缺点。但是,由于它是开源的,这些缺点很快会被忘记。也存在一种商业 Tripwire 产品,但是本文中我只关注这个开源版本。我也在对 AIX 7.1 使用 Tripwire 版本 2.4.1。参见 参考资料 部分,查看到哪里下载 Tripwire rpm。下载之后,请确保安装了下面的 rpm:

libgcc-4.6.1-1.aix7.1.ppc.rpm  
libstdc++-4.6.1-1.aix7.1.ppc.rpm
(openssl-1.0.0d-1.aix5.1.ppc.rpm)

Tripwire 也需要 openssl;大多数 AIX 机器应该已经安装了 openssl。如果您使用的是 SSH,请确保其版本至少是 0.9.8。利用下面的命令检查版本:

# openssl
OpenSSL> version
OpenSSL 0.9.8m 25 Feb 2010
OpenSSL> quit

接下来,安装 Tripwire:

#  rpm -ivh tripwire-2.4.2-1-1.aix5.1.ppc.rpm
tripwire                    ##################################################

安装之后,Tripwire 二进制文件就位于

/opt/freeware/sbin

中。

tripwire-check           
atcadmin
tripwire                 
tripwire-setup-keyfiles  
reprint

策略文件位于

/etc/tripwire

中。twcfg.txt 文件确定 Tripwire 使用的变量(例如 tripwire 报告文件的位置、e-mail 地址、报告级别)。twpol.txt 策略文件告诉 Tripwire 监视什么样的文件。

第一步是调整策略文件,确定监视什么样的文件。随同 Tripwire 发布的 twpol.txt 文件是为 Linux 发行版准备的,而您想要确保它包括您想要监视的文件。如果忘了调整这个策略文件,就会报告一个 “文件不存在” 错误。生成特定于您自己的安全标准策略的策略文件很快。本文将演示一个初始的基本策略是如何生成的。我不会讨论 Tripwire 的所有特性,比如严重级别和 email 条件,但是要介绍 Tripwire 的基本用法,以及使用自生成的策略文件来满足您的需要和文件侵害报告要求,达到熟练使用 Tripwire。


配置 Tripwire

twcfg.txt 的内容显示如下。由于 Tripwire 提出目录权限可能不适合于您的 AIX 机器,所以此文档建议进行更改,我同意了:

LOOSEDIRECTORYCHECKING = false

LOOSEDIRECTORYCHECKING = true

您可能也想更改 DBFILE 和 REPORTFILE 的位置,以适合您的位置标准:

ROOT                   =/opt/freeware/sbin
POLFILE                =/etc/tripwire/tw.pol
DBFILE                 =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE             =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE            =/etc/tripwire/site.key
LOCALKEYFILE           =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR                 =/usr/bin/vi
LATEPROMPTING          =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS       =true
EMAILREPORTLEVEL       =3
REPORTLEVEL            =3
MAILMETHOD             =SENDMAIL
SYSLOGREPORTING        =false
MAILPROGRAM            =/usr/sbin/sendmail -oi -t

如果您的主机名不是可解析的,那么必须将您的本地主机名告诉给 Tripwire。编辑 twpol.txt 文件;大约在第 64 行,有一个针对下面内容的项:

HOSTNAME=;

将您的主机名附加在 ‘=’ 后面。例如,我的 AIX 机器的主机名是 rs6000,所以更改如下:

HOSTNAME=rs6000;

保存并退出文件。

生成密钥

下一个任务是使用密码为 Tripwire 生成一个站点(site)密钥和一个本地(local)密钥。这可以帮助保护 Tripwire 免受未经授权的访问。本地密钥用于数据库文件,站点密钥用于配置文件和策略文件。您需要记住自己给出的密码,因为您更新策略文件或数据库时需要输入这些密码。下面的命令生成这两个密钥。为了演示,我将展示我在整篇文章中所使用的密码:

# /opt/freeware/sbin/tripwire-setup-keyfiles

----------------------------------------------

Creating key files...
Enter the site keyfile passphrase:rs6000
Verify the site keyfile passphrase:rs6000
Generating key (this may take several minutes)...Key generation complete.

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase:master
Verify the local keyfile passphrase:master
Generating key (this may take several minutes)...Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file:
/etc/tripwire/twcfg.txt
has been preserved for your inspection.  It  is  recommended  that  you
move this file to a secure location and/or encrypt it in place (using a
tool such as GPG, for example) after you have examined it.
Signing policy file...
Please enter your site passphrase:rs6000
Wrote policy file: /etc/tripwire/tw.pol.

密钥生成完之后,下面这些文件存在于

/etc/tripwire

中:

rs6000-local.key  tw.cfg            twcfg.txt
site.key          tw.pol            twpol.txt

查看上面的代码清单,我们现在有了以下附加的文件:

  • rs6000-local.key(加密本地密钥文件);
  • site.key(加密站点密钥文件);
  • tw.cfg(加密配置变量文件);
  • tw.pol(加密策略文件)。

此时,不需要在它的当前位置保留 twcfg.txt 和 twpol.txt 文件。提供密码进行解密,您可以通过一个 Tripwire 实用工具访问文件的加密版本。这在本文中有演示。

初始扫描

既然我们已经生成了密钥并提供了密码,就可以进行初始扫描了。使用加密 tw.pol 策略文件中的策略。前面提到,随同 Tripwire 发布的 twpol.txt 文件是为 Linux 系统准备的,指定了要检查什么样的文件。这个策略文件需要调整成适合您的 AIX 系统;您马上就会看到这是如何做到的。但是现在直接运行扫描,Tripwire 会生成校验和并记录文件的扫描属性。数据库也被创建并更新。预计这次运行会产生很多错误,但是这次练习让您对使用 Tripwire 的预期结果有了一个感性认识。

运行初始化时,会提示您输入密码(由于报告的错误太多,我对输出做了大量删减):

# /opt/freeware/sbin/tripwire --init
Please enter your local passphrase:master
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
### Warning: File system error.
### Filename: /proc/ksyms
### A file or directory in the path name does not exist.
### Continuing...
### Warning: File system error.
### Filename: /dev/initctl
### A file or directory in the path name does not exist.
### Continuing...
...
...
Wrote database file: /var/lib/tripwire/rs6000.twd
The database was successfully generated.
#

为了正确工作,Tripwire 数据库必须总是存在;确保对它进行定期备份。很容易重新初始化数据库。

一旦初始化完成,Tripwire 就会报告数据库已经创建(注意,当前主机名是位于

/var/lib/tripwire/rs6000.twd 中的数据库文件名的一部分)。


策略文件

要定制策略文件以满足自己的需要,可以使用 Tripwire 检查模式来检查系统的完整性。当文件在策略文件中却不在系统中时,也会输出错误。预计清单会很长,所以将输出重定向到日志文件以便进一步查看可能会比较好:

 # /opt/freeware/sbin/tripwire --check | grep -w "Filename:"

以上命令的一部分输出为:

     Filename: /bin/ypdomainname
     A file or directory in the path name does not exist.
     Filename: /bin/tcsh
     A file or directory in the path name does not exist.
     Filename: /usr/sbin/fixrmtab
     A file or directory in the path name does not exist.
     ...      ...

要调整 Tripwire 策略文件监视什么样的文件,您有两种选择:

  1. 进入策略文件,并删除那些显示为不存在的文件名。
  2. 重新开始添加您自己的文件项。

我喜欢后一种方式。那样,我只监视我想要监视的。在我们创建这些项之前,需要解释一下策略文件的基本格式。

策略文件的命令指令和对象很多,所以要确保阅读 twpolicy 的手册页。在此演示中,我只介绍并实现这些命令对象中的一些。Tripwire 能够监视下面清单 1 中包含的文件属性。

清单 1. 文件属性
a     Access timestamp
b     Number of blocks allocated
c     Inode timestamp (create/modify)
d     ID of device on which inode resides
g     File owner's group ID
i     Inode number
l     File is increasing in size (a "growing file")
m     Modification timestamp
n     Number of links (inode reference count)
p     Permissions and file mode bits
r     ID of device pointed to by inode
      (valid only for device objects)
s     File size
t     File type
u     File owner's user ID
C     CRC-32 hash value
H     Haval hash value
M     MD5 hash value
S     SHA hash value

附加的掩码也可以添加到属性中:

+   do compare attribute
-   ignore attribute

内置的对象

如果您查看了 Tripwire 随带的整个 twpol 文件,应该注意到对象已经定义。这些对象显示在下面 清单 2 中。使用 清单 1 中描述的属性来创建属性掩码。

清单 2. 掩码
Variable       Mask
Device =      +pugsdr-intlbamcCMSH ; # devices file 
Dynamic =     +pinugtd-srlbamcCMSH ; # directories that change
Growing =     +pinugtdl-srbamcCMSH ; # file that grow in size
IgnoreAll =   -pinugtsdrlbamcCMSH ;  # check nothing
IgnoreNone =  +pinugtsdrbamcCMSH-l ; # check everything except growing attribute 
ReadOnly =    +pinugtsdbmCM-rlacSH ; # read only
Temporary =   +pugt                  # temp files that might be removed

查看 清单 2 中的属性掩码

Temporary

,我们可以看到这个 temporary 监视:

  • 权限(并比较权限)
  • 文件所有权
  • 文件组所有权
  • 文件类型

Tripwire 使用这些包含变量的属性掩码,使得指定监视任何给定文件的什么属性更为容易。但是,您可以定义自己的对象,我在本演示中会讨论这方面的内容。为了帮助跨平台共享,对象可以创建为匹配某个条件。总之,您可以为不同类型的文件指定将监视什么样的文件属性。

对象的格式是:

object_name  = [ mask ];

其中

object_name

是一个将被监视的文件类型的有含义的名称,而

mask

代表 清单 1 中所示的属性。

定义对象

如果我希望监视系统二进制文件,比如 reducevg 或 chfs,那么我需要知道跟这些文件以下方面相关的更改:

  • 权限
  • 符号链接
  • 组所有者
  • 文件所有者
  • 文件大小
  • 修改时间戳
  • MD5 哈希签名

所以,利用以上更改,通过使用 清单 1 中包含的属性信息,我可以生成一个叫做 SYSBIN(代表系统二进制文件)的对象。

SYSBIN =  +pngu+sm;

注意,在这个掩码中,我用加号 (+) 表明文件权限和文件大小应该与前一次 Tripwire 运行或快照进行比较。

每个要监视的文件或目录的格式是:

<directory/file-name> - > $(object_name)

使用对象 SYSBIN,策略文件中代表监视二进制文件

/usr/local/bin/pwgen

的项可以是:

/usr/local/bin/pwgen  -> $(SYSBIN);

如果想要使用对象 SYSBIN 监视 /usr/bin 目录,那么我应该具有:

/usr/bin -> $(SYSBIN);

上面目录中的任何修改,比如说附加新文件、删除在这个目录中创建的文件,都被标记为侵害。

对于动态文件(通常是日志文件),我们不必这么严格,因为文件大小总是在改变。例如,我可以使用下面的对象:

 SYSLOGS +p-lum

在这个对象中,我指定了只监视以下方面:

  • 权限
  • 忽略文件大小增长 ( -l)
  • 文件所有者
  • MD5 哈希签名

对于策略文件中用于监视

/var/adm/messages

日志文件的项,我应该具有:

/var/adm/messages - > $(SYSLOGS)

对于某些应用程序配置脚本,我可能想要至少监视以下属性:

  • 访问时间戳
  • 权限
  • 修改时间戳
  • 文件大小
  • 文件所有者
  • MD5 哈希签名

我可以使用下面的对象,称之为 APPCONF:

APPCONF a+pm+suM;

用于应用程序配置文件

/opt/dstage/Server/DSEngine/dsenv

的项可以是:

/opt/dstage/Server/DSEngine/dsenv - > $(APPCONF);

您无法扫描这样的文件系统,它已经具有另一个从基本安装点安装的文件系统(非 NFS 交叉安装),除非它被特意放在策略文件中。

例如,假设您想要监视

/opt

,但是这个文件系统又具有另一个已安装的文件系统(叫做

/opt/myapp

),并且是下面这样安装的:

/opt
/opt/myapp

Tripwire 会抱怨并报告:

The object: "/opt/myapp" is on a different file system...ignoring.

所以请确保您对所有想要扫描的文件系统都具有对应的项。

使用非变量对象

您并不总是必须使用对象变量,尽管它对于执行策略文件中的重复命令时比较容易。您可以指定属性(通常叫做属性掩码)代替对象。例如,要监视

 /etc/security

目录,可以在该目录中递归扫描,查找以下方面的更改:

  • 权限
  • 文件所有者
  • 组所有者

您可以使用:

/etc/security   -> +pug  (recurse=-1);

其中 -1 表示进行一次递归扫描;0 表示只扫描目录的 inode。

当指定了将扫描的目录时,如果向该目录添加新文件,或者删除或更改该目录中的文件,那么 Tripwire 会将之标记为侵害。


让 Tripwire 忽略文件

要忽略目录或文件(这里我是指 Tripwire 不扫描它们),格式是:

! <object_name>;

其中 object_name 可以是一个预先定义的变量,或者是文件名或目录。例如,要通知 Tripwire 不扫描

/opt/dump 

和文件

/opt/freeware/goodies/myjob

,您可以具有:

!/opt/dump;
!/opt/freeware/goodies/myjob;

以前有一个扫描

/etc/security

的例子。但是,在这个目录中,最新的日志文件具有最新的登录时间。如果您不想这个目录被扫描,那么您可以放入下面的项:

!/etc/security/lastlog;

现在 Tripwire 扫描 /etc/security,但是将忽略最新的日志文件。


解密策略文件

需要编辑策略文件时,不要养成将现有策略备份文件复制回来进行编辑的习惯。总是使用当前的策略文件。这意味着您首先需要从 Tripwire 解密它。

要生成以前创建的当前加密策略文件的文本版本,可以使用:

 # /opt/freeware/sbin/twadmin --print-polfile > /etc/tripwire/twpol.txt

解密后的策略文件现在叫做

twpol.txt


创建新策略文件

在该演示中,我决定创建一个新的 twpol 文件,所以只是创建一个叫做

/etc/tripwire/twpol.txt

的新文件。

将下面的内容放入这个文件中:

# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;

/usr/local/bin/pwgen  -> $(SYSBIN);
/usr/bin -> $(SYSBIN);
/usr/sbin -> $(SYSBIN);

/etc/security   -> +pug  (recurse=-1);

# ignore last log
!/etc/security/lastlog;

# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);
/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware;

加密策略文件

要让 Tripwire 生成新的策略文件(或者更新现有策略),可以使用 twadmin 命令;将提示您输入站点密码:

# /opt/freeware/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:rs6000
Wrote policy file: /etc/tripwire/tw.pol

显示加密的策略文件

要确认 Tripwire 已经生成了新更新的策略文件,可以使用下面的 atcadmin 命令来显示策略文件的内容:

# /opt/freeware/sbin/twadmin --print-polfile
# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;

/usr/local/bin/pwgen  -> $(SYSBIN);
/usr/bin -> $(SYSBIN);
/usr/sbin -> $(SYSBIN);

/etc/security   -> +pug  (recurse=-1);

# ignore last log
!/etc/security/lastlog;

# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);
/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware;

如果 Tripwire 数据库存在,在运行 tripwire –init 之前,首先删除原来的数据库是一个好习惯。这确保您得到一个干净的数据库版本。在该演示中,我的数据库位于 /var/lib/tripwire/rs6000.twd 中。

扫描系统并构建数据库

接下来,让 Tripwire 进行一次初始完整性扫描并生成新数据库。

# /opt/freeware/sbin/tripwire --init
Please enter your local passphrase:master
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/rs6000.twd
The database was successfully generated.

现在,在系统上运行 Tripwire 完整性检查(我这里是指 Tripwire 扫描)。输出结果包含在下面的清单 3 中。Tripwire 完整性检查展示了报告的输出(使用的是新策略):

清单 3. Tripwire 完整性检查
# /opt/freeware/sbin/tripwire -check

Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/rs6000-20110817-173602.twr


Open Source Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            Wed Aug 17 17:36:02 BST 2011
Database last updated on:     Never

===============================================================================
Report Summary:
===============================================================================

Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/rs6000.twd
Command line used:            /opt/freeware/sbin/tripwire 鈥揷heck
Rule Summary:
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
  pwgen                           0                 0        0        0
  (/usr/local/bin/pwgen)
  bin                             0                 0        0        0
  (/usr/bin)
  sbin                            0                 0        0        0
  (/usr/sbin)
  security                        0                 0        0        0
  (/etc/security)
  messages                        0                 0        0        0
  (/var/adm/messages)
  opt                             0                 0        0        0
  (/opt)

Total objects scanned:  3739
Total violations found:  0
# Section: Unix File System
-------------------------------------------------------------------------------

No violations.

===============================================================================
Error Report:
===============================================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

检查并修复侵害

使用我们特制的策略文件,系统似乎一切 OK。现在我将改变其中一个将被扫描的文件 (

        /usr/local/bin/pwgen

) 的文件权限属性。

# cd /usr/local/bin
# ls -l pwgen
-rwxrwxr-x    1 root     system       198697 Mar 26 15:15 pwgen
# chmod 755 pwgen
# ls -l pwgen
-rwxr-xr-x    1 root     system       198697 Mar 26 15:15 pwgen

现在运行 Tripwire 以再次扫描;它找出文件 pwgen 的更改。下面清单 4 中显示了删节的扫描输出。

清单 4. 侵害检查
# /opt/freeware/sbin/tripwire --check
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/rs6000-20110817-173839.twr


Open Source Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            Wed Aug 17 17:38:39 BST 2011
Database last updated on:     Never

===============================================================================
Report Summary:
===============================================================================

Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/rs6000.twd
===============================================================================
Rule Summary:
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
* pwgen                           0                 0        0        1
  (/usr/local/bin/pwgen)
  bin                             0                 0        0        0
  (/usr/bin)
  sbin                            0                 0        0        0
# Section: Unix File System
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Rule Name: pwgen (/usr/local/bin/pwgen)
Severity Level: 0
-------------------------------------------------------------------------------

Modified:
"/usr/local/bin/pwgen"
...
...
*** End of report ***

重新初始化或更新策略

清单 4 可以看到,Tripwire 已经正确检测到了更改。如果文件 pwgen 的这一更改是正当的更改,那么我们就不想要 Tripwire 报告它。关于如何让 Tripwire 不报告这一侵害,我们这里有两种选择。

我们既可以用 init 选项再次运行 Tripwire,对下次运行要比较的内容进行一次基本的扫描,如下所示:

# /opt/freeware/sbin/tripwire --init

也可以更新 Tripwire 数据库并通知它忽略或者接受此更改。

/var/lib/tripwire/report

目录中,Tripwire 生成的所有报告文件都是 hostname<date_stamp>.twr 形式的。通过按日期顺序列出文件,简单地选择这次 Tripwire 扫描生成的报告。一旦有了正确的文件,就可以使用下面这个命令更新数据库:

tripwire - - update - - twrfile </var/lib/tripwire/report/<hostname_date_stamp>.twr

执行该命令之后,您就进入了一个编辑器。搜索所报告的文件名。所有侵害或更新都在文件名前面有一个 [x]。该演示中的查找模式如下:

[x] "/usr/local/bin/pwgen"

例如:

Rule Name: pwgen (/usr/local/bin/pwgen)
Severity Level: 0
-------------------------------------------------------------------------------

Remove the "x" from the adjacent box to prevent updating the database
with the new values for this object.

Modified:
[x] "/usr/local/bin/pwgen"

如果您希望接受这些更改为正当的,则只需保存并退出文件即可。Tripwire 不再报告此文件。如果您想要这个文件不被添加到数据库,那么请删除 ‘x’。

保存文件并退出编辑器时,若有数据库更新发生,会提示您输入密码以完成该过程。如果没有更新发生,那么 Tripwire 会通知您的,并且不需要输入密码。该演示中出现以下提示,因为数据库将被更新:

Please enter your local passphrase: master
Wrote database file: /var/lib/tripwire/rs6000.twd

策略文件的初始填充

利用您想要监视的文件填充新的策略文件是很费时间的。另一种快速填充策略文件的方法是,像前面描述的那样只指定目录/文件系统。但是,另一种方法是在系统二进制目录(比如 /usr/bin)上运行 find 命令,然后将输出重定向到策略文件。下面清单 5 包含一个简单的脚本,用于找到普通类型的文件并显示对象名(比如说前面描述的 SYSBIN)。然后这将被重定向到策略文件。

清单 5. pop_twpol
#!/bin/sh
# pop_twpol
dir_list="/usr/bin /usr/sbin /usr/local/bin"

for loop in $dir_list
do
list=$(find ${loop} -type f -exec ls {} \;)

 for loop2 in $list
  do
   echo "${loop2} -> \$(SYSBIN);"
  done

done

下面是上面这个脚本的样例输出:

/usr/bin/xmtopasagg -> $(SYSBIN);
/usr/bin/xmtrend -> $(SYSBIN);
/usr/bin/xmwlm -> $(SYSBIN);
/usr/bin/xpstat -> $(SYSBIN);
/usr/bin/xsend -> $(SYSBIN);
/usr/bin/yes -> $(SYSBIN);
/usr/bin/ypcat -> $(SYSBIN);
/usr/bin/ypmatch -> $(SYSBIN);
/usr/bin/yppasswd -> $(SYSBIN);
/usr/bin/ypservers -> $(SYSBIN);
/usr/bin/ypwhich -> $(SYSBIN);

但是跟我们前面所做的一样,首先从 Tripwire 得到策略文件的纯文本版本:

# /opt/freeware/sbin/twadmin --print-polfile > /etc/tripwire/twpol.txt

接下来,运行 清单 5 中包含的脚本,修改目录列表以适应您自己的需求,并重定向到 twpol.txt 文件,如下所示:

#./pop_twpoll >> /etc/tripwire/twpol.txt

记住删除策略文件中以前插入的重复项,或者干脆采用全新的策略文件。

接下来,将新的策略文件放入 Tripwire 中:

# /opt/freeware/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt

对于其他特殊的文件和日志文件,应该手动添加,或者采用类似于上面的过程。

确认现在包含我们的个人文件的策略文件被加密,以备在打印策略文件内容时使用:

# /opt/freeware/sbin/twadmin -print-polfile
# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;


# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);

/etc/security   -> +pug  (recurse=-1);
# ignore last log
!/etc/security/lastlog;

/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware/goodies/myjob;

/usr/bin/Mail -> $(SYSBIN);
/usr/bin/ManGetURL.class -> $(SYSBIN);
/usr/bin/Rsh -> $(SYSBIN);
/usr/bin/SpmiArmd -> $(SYSBIN);
鈥?鈥?

接下来,运行 Tripwire 初始扫描以重新生成数据库:

 # /opt/freeware/sbin/tripwire --init

接下来,使用新创建的策略文件运行 Tripwire 检查:

 # /opt/freeware/sbin/tripwire --check

监视并报告大量的文件有时候确实不太现实,所以要慎重选择您想要监视什么样的文件。这是一个迭代的过程,要花几周的时间,您才能对所选择的真正需要 Tripwire 监视的文件满意。

对于一些系统二进制文件,我喜欢只按目录名扫描。对于所有其他文件,比如说配置脚本和安全文件,我通常采用手动输入。


报告

正如前面所提到的,Tripwire 每运行一次检查,都会生成一个报告。这些报告既作为标准输出,也被保存为报告文件。报告位于

 /var/lib/tripwire/report

中。

比如:

# pwd
/var/lib/tripwire/report
bash-3.2# ls
rs6000-20110811-174421.twr  rs6000-20110812-092023.twr
rs6000-20110811-175332.twr  rs6000-20110812-093053.twr
rs6000-20110811-192716.twr  rs6000-20110812-093410.twr

要查看报告,可以使用 reprint 命令。格式为:

pwprint -m r -twrfile <reportfile.twr>

要查看报告文件

rs6000-20110812-093643.twr

,可以使用:

# /opt/freeware/sbin/twprint \
-m r --twrfile /var/lib/tripwire/report/rs6000-20110812-093643.twr

 Report is not encrypted.
Open Source Tripwire(R) 2.4.1 Integrity Check Report
Report generated by:          root
Report created on:            Fri Aug 12 09:36:43 BST 2011
Database last updated on:     Never
===============================================================================
Report Summary:
===============================================================================
Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
鈥?
鈥?

也可以打印关于数据库中某个具体文件的信息。要抽取

/usr/local/bin/pwgen

的文件信息,可以使用:

# /opt/freeware/sbin/twprint -m d --print-dbfile /usr/local/bin/pwgen
Object name:  /usr/local/bin/pwgen

Property:               Value:
-------------           -----------
Object Type             Regular File
Mode                    -rwxr-xr-x
Num Links               1
UID                     root (0)
GID                     system (0)
Size                    198697
Modify Time             Sat Mar 26 15:15:25 GMT 2011

要从 Tripwire 数据库抽取所有信息,可以使用下面的命令:

# /opt/freeware/sbin/twprint -m d -print-dbfile |more

运行 Tripwire

为了让 Tripwire 有效率,应该定期运行它。这通过您喜欢的日程安排程序运行 Tripwire 而做到。下面的 cron 项在每天早上 06:30 运行 Tripwire,将报告重定向到

/opt/dump/logs/triplog&lt;date_stamp&gt;

,如下所示:

30 06 * * *  /opt/freeware/sbin/tripwire \
- - check > /opt/dump/logs/triplog'date +"%d-%m-%y"'

当然,不要忘记,在必要时,您还可以查看 /var/lib/tripwire/report 中的报告文件。另外,还可以将报告发到您的电子邮箱里。下面的 cron 项将 Tripwire 报告以电子邮件的形式发送到 syadmin email 组:

30 06 * * *  /opt/freeware/sbin/tripwire - - check | mail sysadmin -s "tripwire report for
'hostname'"

结束语

记住,如果使用备份程序来备份 AIX 机器,有些备份程序可能会更改其已作为备份过程一部分而备份的文件的最后访问属性。

如果是通过 Tripwire 监视该属性,它会将此属性标记为侵害。所以您可能需要调整策略设置,或者在备份之后运行一次 Tripwire 初始化以得到新的快照。一种检查最后访问时间的方法是使用 istat 实用工具。例如:

istat <filename>

Tripwire 的功能非常丰富;本文中我只介绍了一些比较常见的功能。一定要查看 twpol 手册页,了解本文中没有介绍的其他功能。千万要调整策略文件来满足您系统的特定需求。当与其他审计工具一起使用时,Tripwire 是一个不错的工具。

linux LVM分区查看dm设备

在linux中iostat -d查看磁盘状态时,有的会有如下dm-0,dm-1的条目.

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn 
sda               0.19         0.57         2.92     341228    1753052 
dm-0              0.27         0.56         2.88     334673    1729848 
dm-1              0.00         0.00         0.00        876          0 

如果在分区时利用了LVM,则一般会生成dm-N 逻辑卷(LogicVolume).它类似于普通分区时的一个分区如sda0之类的.只不过它利用了Mapper Device机制,在PysicalVolume上虚拟出来的分区信息.

查找dm-N对应的挂载点

#sar -d 1 
02:53:06 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util 
02:53:07 PM    dev8-0      8.00      0.00     72.00      9.00      0.06      7.00      7.00      5.60 
02:53:07 PM  dev252-0      9.00      0.00     72.00      8.00      0.06      6.22      6.22      5.60 
02:53:07 PM  dev252-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

显示dev252-0,dev252-1,即主设备号为dev252(sda设备号为dev8,这是linux为设备生成的内部设备号),次设备号为0,1

#cd /dev/mapper; ll 
lrwxrwxrwx  1 root root       7 Apr  3 16:12 yinbeiweb1-root -> ../dm-0 
lrwxrwxrwx  1 root root       7 Apr  3 16:12 yinbeiweb1-swap_1 -> ../dm-1 

 
可看到软链到 /dev/dm-N上.

#ll /dev/dm-* 
  brw-rw---- 1 root disk 252, 0 Apr  3 16:12 ../dm-0 
  brw-rw---- 1 root disk 252, 1 Apr  3 16:12 ../dm-1 

可看到两者的主设备号都是252