本文是How To Use the Linux Auditing System on CentOS 7的中文版,翻译不到之处,还请指出和多多包涵。本文并不会完全遵从原文的一些格式,而是加入自己学习的理解。

  另请参考:Auditd - Linux 服务器安全审计工具

引言

  Linux审计系统可帮助系统管理员创建审核跟踪记录,即服务器上每个操作的日志。我们可以通过检查审计日志文件audit.log来跟踪与安全相关的事件,将事件记录在日志文件中,来检测滥用或未授权的活动。我们可以选择要监视服务器上的哪些操作以及监视的程度。 审计不会为您的系统提供额外的安全性,但是有助于跟踪任何违反系统策略的行为,并使您能够采取其他安全措施来防止这些行为。

  本教程介绍了审计系统,如何配置它,如何生成报告以及如何阅读这些报告。我们还将了解如何在审核日志中搜索特定事件。

前提

  对于这篇教程,你需要准备如下:

  • CentOS 7 系统(或CentOS 6)
  • 具有sudo权限的非root用户。 要设置此类用户,请按照CentOS 7初始服务器设置教程进行操作。 所有命令都将以此用户身份运行。

验证Audit安装

  audit系统分为两个主要部分:

  • audit内核组件拦截来自用户程序的系统调用,记录事件,并且将这些审计信息发送到audit守护进程(audit daemon即auditd);
  • auditd收集来自内核的信息,在日志文件中创建记录项

  Audit系统使用如下包:audit和audit-libs。CentOS 7上已经默认安装。可以通过如下命令验证您的系统中是否已经安装好:

[lz@mail ~]$ sudo yum list audit audit-libs

  完整输出如下,可以看到已经安装完成:

[lz@mail ~]$ sudo yum list audit audit-libs
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repodata is over weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors..com
* updates: mirrors.aliyun.com
已安装的软件包
audit.x86_64 2.6.-.el7_3. @updates
audit-libs.x86_64 2.6.-.el7_3. @updates
可安装的软件包
audit-libs.i686 2.6.-.el7_3. updates

Audit配置

  auditd主要的配置文件是/etc/audit/auditd.conf。这个文件由配置参数组成,包括记录事件的地方,磁盘空间不足的时候如何处理和日志轮换等。

  可以使用nano编辑文件(个人比较喜欢使用vim):

[lz@mail ~]$ sudo vim /etc/audit/auditd.conf

  例如,要将服务器上保留的审核日志文件数增加到10,可以编辑以下选项:

num_logs = 

  你也可以配置最大的日志文件大小,以MB计算,一旦当文件大小达到时应该采取何种行为。

max_log_file =
max_log_file_action = ROTATE

  每当更改配置时,你都需要重新启动auditd服务,使得更改生效:

[lz@mail ~]$ sudo service auditd restart
[sudo] password for lz:
Stopping logging: [ 确定 ]
Redirecting start to /bin/systemctl start auditd.service

  另外的一个配置文件是/etc/audit/rules.d/audit.rules(如果你使用的是CentOS 6,那么文件是/etc/audit/audit.rules)。用来永久增加审计规则(auditing rules)

[lz@mail ~]$ sudo vim /etc/audit/rules.d/audit.rules

  当auditd正在运行的时,审计信息将会记录到文件/var/log/audit/audit.log。

[lz@mail ~]$ sudo vim /var/log/audit/audit.log 

理解审计日志文件

  审计系统日志审计信息默认保存到文件/var/log/audit/audit.log中。审计日志文件包含大量的有用信息,但是阅读和理解日志文件对于很多用户来说有些苦难,由于提供了大量的信息,使用了缩写和代码等。
这部分,我们将试图去理解审计日志文件中典型的审计信息的一些字段内容。

Note : 'If auditd is not running for whatever reason, audit messages will be sent to rsyslog.'
注意:如果auditd由于任何原因没有运行的话,审计信息将会被发送到rsyslog。

  举个例子,假设我们在服务器上配置了一个带标签(key)的审计规则sshconfigchange用来记录对文件/etc/ssh/sshd_config的访问或修改。如果你愿意,可以使用如下命令临时增加规则:

[lz@mail ~]$ sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange

  运行如下命令来查看sshd_config文件,将会在审计日志文件audit.log增加一个事件:

[lz@mail ~]$ sudo cat /etc/ssh/sshd_config

  可以通过如下命令查看最近产生的审计日志记录:

[lz@mail ~]$ sudo tail /var/log/audit/audit.log

  audit.log中的审计日志信息如下:

type=SYSCALL msg=audit(1532417498.350:): arch=c000003e syscall= success=yes exit= a0=7fff8b7537cb a1= a2=1fffffffffff0000 a3=7fff8b752df0 items= ppid= pid= auid= uid= gid= euid= suid= fsuid= egid= sgid= fsgid= tty=pts0 ses= comm="cat" exe="/usr/bin/cat" key="sshconfigchange"
type=CWD msg=audit(1532417498.350:): cwd="/home/lz"
type=PATH msg=audit(1532417498.350:): item= name="/etc/ssh/sshd_config" inode= dev=fd: mode= ouid= ogid= rdev=: objtype=NORMAL

  上面的事件包含三条记录(每条以type=关键字的形式开头),共用相同的的时间戳(1532417498.350)和id(302)。每条记录由多个name=value对通过空格或冒号分隔。我们将详细看看这些字段代表什么,如下表所示。

 type=SYSCALL

type字段代表审计信息的类型。

在这个例子中,SYSCALL表明这条消息是由到系统内核的系统调用触发的。

 msg=audit(1532417498.350:302)

审计信息的时间戳和ID以audit(time_stamp:ID)的形式组成。

多个审计信息/记录可以共享同样的时间戳和ID,如果它们是同一个审计事件生成的部分。在我们这个例子中,我们可以看到审计时间产生的三条信息具有同样的时间戳(1532417498.350)和ID(302)。

 arch=c000003e

arch字段包含系统的CPU体系结构信息。

c000003e的值在16进制代表x86_64。

 syscall=2

syscall字段表示发送到内核的系统调用的类型。

在这个例子中,2代表的是系统调用open。ausyscall可以将系统调用数字编号转化为人们可读的形式。例如,运行如下命令将数值2转化成为其人们可读的形式:

[lz@mail ~]$ sudo ausyscall 2
open

Note:你可以使用sudo ausyscall --dump命令查看系统调用和其数字编号对应的列表。

 success=yes

success字段表明特定事件的系统调用是否执行成功。

在这个例子中,系统调用时成功的。当执行命令sudo cat /etc/ssh/sshd_config时,用户lz能打开和读文件sshd_config。

 ppid=6370 ppid字段记录了父进程的进程ID。
 pid=6371 pid字段记录了进程号PID。
 auid=1000

auid是audit UID或者说是触发该审计信息用户的原始UID。

即使初始登陆后使用su或sudo提升权限,审计系统也会记录原始UID。

 uid=0

uid字段记录启动分析进程的用户ID。

此例中,cat命令由root用户启动,uid=0。

 comm="cat" comm记录了触发审计信息的命令名字。
 exe="/usr/bin/cat" exe字段记录了触发审计信息的命令的路径。
 key="sshconfigchange"

key字段记录了管理员自定义的字符串和审计规则在日志文件中产生的事件。

Keys通常在创建自定义审核规则,使得在审计日志更容易查找特定类型的事件。

 type=CWD

cwd字段包含调用系统调用的目录的路径。

此例中,从目录执行了在第一条记录中触发open 系统调用的cat命令/home/lz。

 cwd="/home/lz"

cwd字段包含调用系统调用的目录的路径。

此例中,从目录执行了在第一条记录中触发open 系统调用的cat命令/home/lz。

 type=PATH

第三条记录类型是PATH。

审计事件包含作为参数传递给系统调用的每个路径的PATH记录。在审计事件中,只有一个路径(/etc/ssh/sshd_config)被用作参数。

 name="/etc/ssh/sshd_config"

name字段记录了作为参数传入到系统调用的文件或目录的完整路径。

在这个例子中,是/etc/ssh/sshd_config文件。

 ouid=0

ouid字段记录了目标拥有者的用户ID。

此处的目标是文件/etc/ssh/sshd_config

搜索审核日志以查找事件

  Linux审计系统附带了一个名为ausearch的强大工具,用于搜索审计日志。使用ausearch,您可以筛选和搜索事件类型。 它还可以通过将数值转换为人类可读的值(如系统调用或用户名)
来为您解释事件。

  让我们来看几个例子:

  以下命令将从审核日志中搜索今天类型为LOGIN的所有审核事件,并解释用户名。

[lz@mail ~]$ sudo sudo ausearch -m LOGIN --start today -i

  下面的命令将搜索事件ID为27020的所有事件(前提是存在具有该id的事件)。

[lz@mail ~]$ sudo ausearch -a 

  此命令将搜索所有关于文件/etc/ssh/sshd_config的所有事件并解释它们:

[lz@mail ~]$ sudo ausearch -f /etc/ssh/sshd_config -i

生成审计报告

  您可以使用工具aureport获取审核消息摘要,而不是阅读原始审核日志。 它以人类可读的格式提供报告。 这些报告可用作更复杂分析的构建块。 当aureport在没有任何选项的情况下运行时,它将显示审计日志中存在的不同类型事件的摘要。 与搜索选项一起使用时,它将显示与搜索条件匹配的事件列表。

  让我们尝试一些aureport的例子。 如果要生成有关服务器上所有命令执行的摘要报告,请运行:

[lz@mail ~]$ sudo aureport -x --summary

  输出样例:

[lz@mail ~]$ sudo aureport -x --summary

Executable Summary Report
=================================
total file
=================================
/usr/sbin/xtables-multi
/usr/lib/systemd/systemd
/usr/sbin/crond
/usr/bin/sudo
/usr/sbin/saslauthd
/usr/libexec/gdm-session-worker
/usr/bin/kmod
/usr/sbin/postconf
/usr/lib/polkit-/polkit-agent-helper-
/usr/lib/systemd/systemd-update-utmp
/usr/sbin/groupadd
/usr/sbin/useradd
/usr/bin/perl
/usr/bin/passwd
/usr/libexec/postfix/master
/usr/sbin/httpd
/usr/sbin/userdel
/usr/bin/cmp
/usr/sbin/runuser
/usr/sbin/groupmod
/usr/sbin/groupdel
/usr/sbin/setenforce
/usr/bin/cat

  第一列显示命令执行的次数,第二列显示已执行的命令。 请注意,默认情况下不会记录所有命令。 仅记录与安全相关的内容。

  生成有关使用系统调用和用户名访问的文件的报告:

[lz@mail ~]$ sudo aureport -f -i

  输出样例;

[lz@mail ~]$ sudo aureport -f -i | tail -
. 2016年12月30日 :: /etc/postfix/master.cf open yes /usr/sbin/postconf unset
. 2016年12月30日 :: /usr/sbin/sendmail open yes /usr/bin/cmp unset
. 2016年12月30日 :: /etc/postfix/master.cf open yes /usr/libexec/postfix/master unset
. 2016年12月30日 :: /etc/postfix/master.cf open yes /usr/libexec/postfix/master unset
. 2018年07月24日 :: /etc/ssh/sshd_config open yes /usr/bin/cat lz

  要以摘要格式查看相同内容,您可以运行:

[lz@mail ~]$ sudo aureport -f -i --summary
[lz@mail ~]$ sudo aureport -f -i --summary

File Summary Report
===========================
total file
===========================
/etc/postfix/master.cf
/var/www/extsuite/extmail/cgi/index.cgi
index.cgi
/usr/sbin/sendmail
/var/spool/postfix/pid/master.pid
/var/www/extsuite/extmail/libs/Ext/DB.pm
/var/www/extsuite/extmail/html/index.html
sid_0993bffcc2951e5404ffa4510b23e87e
master.pid
index.html
DB.pm
session
/var/www/extsuite/extman/session/sid_0993bffcc2951e5404ffa4510b23e87e
/etc/ssh/sshd_config

  注:只要输入采用原始日志数据格式,aureport工具也可以从stdin而不是日志文件中获取输入。

使用autrace分析进程

  要审核单个流程,我们可以使用autrace工具。 此工具跟踪进程执行的系统调用。 这可用于调查可疑的木马或有问题的过程。 autrace的输出写入/var/log/audit/audit.log,看起来类似于标准审计日志条目。 执行后,autrace将为您提供示例ausearch命令以调查日志。 始终使用二进制文件的完整路径来跟踪autrace,例如sudo autrace /bin/ls/tmp。

注:请注意,运行autrace将删除所有自定义审核规则。 它用跟踪您指定的进程所需的特定规则替换它们。
autrace完成后,它将清除它添加的新规则。 出于同样的原因,当审计规则设置为不可变时,autrace将不起作用。

  让我们尝试一个例子,比如说,我们要跟踪进程日期并查看它使用的文件和系统调用。 运行以下命令:

[lz@mail ~]$ sudo autrace /bin/date
autrace cannot be run with rules loaded.
Please delete all rules using 'auditctl -D' if you really wanted to
run this command.

  需要先删除所有的规则才能运行。

[lz@mail ~]$ sudo auditctl -D
No rules
[lz@mail ~]$ sudo autrace /bin/date
Waiting to execute: /bin/date
2018年 07月 24日 星期二 :: CST
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 7619'

  您可以使用上面输出中的ausearch命令查看相关日志,甚至将其传递给aureport以获得格式良好的人类可读输出:

[lz@mail ~]$ sudo ausearch -p  --raw | aureport -f -i

  输出样例:

[lz@mail ~]$ sudo ausearch -p  --raw | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
. 2018年07月24日 :: /bin/date execve yes /usr/bin/date lz
. 2018年07月24日 :: /etc/ld.so.preload access no /usr/bin/date lz
. 2018年07月24日 :: /etc/ld.so.cache open yes /usr/bin/date lz
. 2018年07月24日 :: /lib64/libc.so. open yes /usr/bin/date lz
. 2018年07月24日 :: /usr/lib/locale/locale-archive open yes /usr/bin/date lz
. 2018年07月24日 :: /etc/localtime open yes /usr/bin/date lz

  此命令从审核日志中搜索事件ID为7619的事件,以原始日志格式提取它,并将其传递给aureport,后者又以更好的格式解释并提供结果,以便于阅读。

结语

  我们在本教程中介绍了Linux审计系统的基础知识。 您现在应该很好地了解审计系统的工作方式,如何阅读审计日志以及可用的不同工具,以便您更轻松地审计服务器。

  默认情况下,审计系统仅记录日志中的少数事件,例如登录的用户和使用sudo的用户。 还会记录与SELinux相关的消息。 审计守护程序使用规则来监视特定事件并创建相关的日志条目。 可以创建自定义审计规则,以便在日志中监视和记录我们想要的任何内容。 这是审计系统对系统管理员变得强大的地方。 我们可以使用命令行工具auditctl添加规则,也可以在文件/etc/audit/rules.d/audit.rules中永久添加规则。 编写自定义规则和使用预定义规则集将在CentOS 7上的编写自定义系统审计规则教程中详细讨论。

References

  How To Use the Linux Auditing System on CentOS 7

  Types of audit records

   Configuring auditd for a CAPP Environment

  Audit Event Fields and their definitions

[译]How To Use the Linux Auditing System on CentOS 7的更多相关文章

  1. 对于linux下system()函数的深度理解(整理)

    原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...

  2. 转:对于linux下system()函数的深度理解(整理)

    这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为 ...

  3. 【C/C++】Linux下system()函数引发的错误

    http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:3 ...

  4. linux的system () 函数详解

    linux的system () 函数详解     system(执行shell 命令)相关函数        fork,execve,waitpid,popen表头文件        #i nclud ...

  5. 修改Linux Operating System的时间与时区

    修改Linux Operating System的时间与时区 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有的小伙伴可能会遇到安装了linux系统后,尽管时区选择正确,也会发现系 ...

  6. (笔记)Linux下system()函数的深度理解(整理)

    注:从其它地方转的非常好的一篇文章,值得深究! 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数 ...

  7. Role-based access control modeling and auditing system

    A role-based access control (RBAC) modeling and auditing system is described that enables a user to  ...

  8. G1 安装 Linux Debian system

    开发Android第五步,G1 安装 Linux Debian system 在 G1 上安装 Linux Debian system (Debian ARMEL) 要具备以下条件: (a) 最好是 ...

  9. chattr lsattr linux file system attributes - linux 文件系统扩展属性

    我们使用 linux 文件系统扩展属性,能够对linux文件系统进行进一步保护:从而给文件 赋予一些额外的限制:在有些情况下,能够对我们的系统提供保护: chattr命令用来改变文件属性.这项指令可改 ...

随机推荐

  1. 区块链扩容方案之Gas值限制

    区块链扩容一直是区块链团队的重点研究方向.因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为1M,但随着交易量的增加,网络拥堵情况也愈渐严重,最终也导致了比特币的分叉. 区别于比特币固定 ...

  2. SqlHelper DBHelper

    根据自己项目的开发需要,整理了一个SqlHelper类 相比较网上通用的SqlHelper类方法主要有一下几点的不同: 1.因为要操作多个数据库,所以数据库连接字符串没有写死到方法里,作为参数提供出来 ...

  3. 制作R中分词的字典的办法

    在开始下面步骤之前先让自己的文件可以显示扩展名. 如何显示请谷歌. 第一步:打开一个文本文件 第二步:把你要的词复制到这个文本文件吧. 第三步:将这个文本文件的格式改为dic.即原来文件格式是txt后 ...

  4. PAT甲题题解-1046. Shortest Distance (20)-做了一个假的最短路,水

    一开始以为是最短路,结果是给你一个环,让你求环上两点之间的距离...那还做毛线 然而还是得做毛线 #include <iostream> #include <cstdio> # ...

  5. [沈航软工教学] 学生项目Coding地址汇总

    同学们把自己的coding主页链接贴在评论里,要求格式"班号+学号+coding主页链接",如: "1301+13061193 + https://coding.net/ ...

  6. Window环境下RabbitMQ的安装和配置教程

    一.安装 首先,RabbitMQ基于Erlang语言环境,所以需要先安装Erlang. Erlang下载地址:http://www.erlang.org/downloads 按照安装程序默认安装完成就 ...

  7. 组件 -- Badge

    .badge :长方形的徽章 badge的颜色: .badge-primary .badge-secondary .badge-success .badge-warning ... ... .badg ...

  8. 一本通1622Goldbach’s Conjecture

    1622:Goldbach’s Conjecture 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:Ulm Local,题面详见:POJ 2262 ...

  9. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验

    前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...

  10. keeplived工作原理及配置

    一.keepalived简介及作用 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 keepal ...