Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103538119
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-04 22:25:22

 

audit是linux系统中用于记录用户底层调用情况的系统,如记录用户执行的open,exit等系统调用.
并会将记录写到日志文件中.
audit可以通过使用auditctl命令来添加或删除audit规则.设置针对某个用户进行记录,或针对某个
进程的进行记录. audit主要包含2个命令:

auditd       audit服务进程
auditctl     audit规则设置工具

GTES10,10.5,11版本默认都已安装audit包,可以直接使用.

audit可以从源码安装.

源码下载地址:


安装方法:
# tar zxf audit-1.6.2.tgz
# cd audit-1.6.2
# aclocal && autoconf && autoheader && automake
# ./configure --sbindir=/sbin --mandir=/usr/share/man --libdir=/lib
# make
# make install

auditd是audit系统的用户空间程序.主要作用是将audit记录信息写到磁盘上.
audit在启动时会读取2个配置文件:

/etc/audit/auditd.conf   audit配置文件
/etc/audit/audit.rules   audit规则文件

audit安装后,会生成这2个文件.

auditd使用方法:

       auditd [ -f ]

	-f	auditd在前台运行,调试时使用.

auditctl用于对kernel中的audit进行控制,可以用来获取audit状态和增删audit规则.

命令使用方法:

       auditctl [options]

       -b 
	设置audit缓冲大小(默认为64).若缓冲占满了,则kernel会发出一个失败标记.

       -e [0|1]
	启用/禁用audit审核.

       -f [0..2]
	设置失败标记的等级,有0,1,2三个值,0是不输出日志,1为输出printk日志,2为最高级,会大量输出
	日志信息.这个选项用于设置audit获得错误的等级.	错误标记的触发条件有:传送错误到用户空间
	audit	进程,未处理事务超出范围,超出内核内存范围,超出速率范围.默认值为1.在安全环境下可以
	设置为2.

       -h
	帮助

       -i
	从文件读取audit规则时,忽略错误.

       -l
	显示所有规则.

       -k 
	为一条audit规则设置一个关键字.关键字可以是31个字节长的字符串.用于过滤audit记录.

       -m text
	向audit系统发送一个信息.只限root用户使用.

       -r 
	设置每秒的信息速率.如果实际信息数量超过这个速率,则将产生一个失败标记.

       -R 
	从一个文件读取规则.每行只有一条规则.规则文件的所属用户必须是root,并且其他用户没有
	读取权限.文件里可以使用以#开头的注释行.
	
       -s
	输出状态信息.

       -a 
	将规则添加到一个列表的结尾.l表示列表,a表示这个规则的动作.
	下面是可用的列表名称:
		task	添加一条规则到每一个任务列表.这个规则列表只在一个任务建立的时候使用
			(当父进程调用fork(),clone()时).			

		entry	添加一条规则到系统调用entry列表.

		exit	添加一条规则到系统调用exit表.

		user	添加一条到用户信息过滤表.在信息被传送到audit进程前,kernel使用这个列表在
			用户空间过滤事件信息,可以使用的字段有: uid,auid,gid,pid.

		exclude	添加一条规则到事件类型排除表.这个表用于过滤掉不希望显示的信息.
			如:不希望显示任何avc的信息,则在此列表中添加上它.


		下面介绍在规则中可以使用的动作(a):
		never	不产生audit记录.

		always	分配一个audit上下文,将它添加到系统调用开始时,并在系统调用退出时,写出
			一条记录信息.

	
       -A 
	添加一条规则到列表的开头.

       -d 
	从列表中删除一条规则.

       -D
	删除所有规则.

       -S	[Syscall name or number|all]
	可以使用系统调用名称或数字.也可以使用all.也可以在一条规则中指定多个系统调用,以提升效率.

       -F [n=v | n!=v | nv | n<=v | n>=v]
	建立规则字段: 名称,操作,参数.一个命令行可以有64个字段,每个字段必须以-F开头.每个字段将会
	触发一个audit记录.有=,!=,<,>,<=,>=运算符可以使用.
	可以使用的字段有:

              a0, a1, a2, a3
			4个数字参数用于表示系统调用.不可以使用字符串.

              arch
			系统调用的cpu架构.可以使用'uname -m'获得这个值.若不清楚机器的架构,
			但需要使用32位系统调用表,而机器也支持32位,则仍可使用32位的系统调用表.


              auid
			用户登录的id.

              b32
			cpu架构.64位系统可以使用b64.

              devmajor
			设备的主号码

              devminor
			设备的从号码

              egid
			组id

              euid
			用户id

              exit
			系统调用的返回值

              fsgid
			文件系统组id

              fsuid
			文件系统用户id

              gid
			组id

              inode
			Indoe号

              key
			设置过滤关键字

              msgtype
			用于匹配信息类型码.仅用于排除过滤表中.

              obj_user
			资源的SElinux的用户

              obj_role
			资源的SElinux的角色

              obj_type
			资源的SElinux的类型

              obj_lev_low
			资源的SElinux的低层

              obj_lev_high
			资源的SElinux的高层

              path
			被监视的文件的全路径.仅用于exit表.

              pers
			操作系统的编码

              pid
			进程id

              ppid
			进程的父id

              subj_user
			程序的SElinux的用户

              subj_role
			程序的SElinux的角色

              subj_type
			程序的SElinux的类型

              subj_sen
			程序的SElinux的敏感度

              subj_clr
			程序的SElinux的清除率

              sgid
			sgid位

              success
			如果返回值>=0,则为true或yes,否则为false/no.
			编写规则时,使用1代表true/yes,使用0代表false/no.

              suid
			suid位

              uid
			用户id

       -w 
			在指定路径插入一个记录器,不可以是最上层目录,这是kernel所禁止的.并且不可以使用
			通配符.记录器会记录inode内部的操作过程.如果在一个目录中放置一个记录器,会记录到
			各种文件事件.但是,那只是修改了元数据.这可能会丢失一小部分事件.如果需要监视目录
			中的所有文件,建议为每个文件放置一个记录器.记录器不同于audit规则,对性能没有影响.

       -W 
			从指定路径中移出一个记录器.

# ps -ef | grep audit
若系统尚未启动audit,手动启动audit.
# auditd

现在添加audit规则:
先查看audit运行状态
# auditctl -s
AUDIT_STATUS: enabled=1 flag=1 pid=1585 rate_limit=0 backlog_limit=256 lost=0 backlog=0

查看已有的audit规则
# auditctl -l
No rules

添加一条audit规则,记录maj用户的所用open系统调用
# auditctl -a entry,always -S open -F uid=500

在另一个终端以maj用户登录,登录后执行一个ls命令即可.

删除这条audit规则
# auditctl -d entry,always -S open -F uid=500


查看audit日志,里面有下面类似内容:

type=SYSCALL msg=audit(1192418517.442:12): arch=40000003 syscall=5 success=yes exit=3 a0=3fc3b7 a1=0 a2=ffffffff a3=0 items=1 
pid=31832 auid=4294967295 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 comm="ls" exe="/bin/ls"
type=CWD msg=audit(1192418517.442:12):  cwd="/home/maj"
type=PATH msg=audit(1192418517.442:12): name="/etc/ld.so.cache" flags=101  inode=4674033 dev=03:05 mode=0100644 ouid=0 ogid=500 
rdev=00:00
...
阅读(302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~