首页 > 运维 > linux运维 > 正文

如何在Linux中进程审计 Linux audit进程跟踪

P粉602998670
发布: 2025-08-31 11:02:01
原创
217人浏览过
Linux审计系统核心是通过内核级auditd服务监控系统调用与文件访问,利用auditctl定义规则,记录关键事件至/var/log/audit/audit.log,实现进程启动、文件操作等行为的细粒度追踪与分析。

如何在linux中进程审计 linux audit进程跟踪

在Linux中进行进程审计和跟踪,核心在于利用Linux自带的

auditd
登录后复制
服务和其配套的
auditctl
登录后复制
工具。它允许你在内核层面定义精细的规则,监控系统调用、文件访问、进程执行等关键事件,为系统安全和故障排查提供深入的洞察力。

解决方案

要开始在Linux中审计进程,你需要做的是安装并配置

auditd
登录后复制
服务,然后通过
auditctl
登录后复制
定义你的审计规则。以下是具体步骤:

  1. 安装

    auditd
    登录后复制
    在大多数基于RPM的系统(如CentOS, Fedora, RHEL)上:

    sudo yum install audit -y
    # 或者对于较新的系统
    sudo dnf install audit -y
    登录后复制

    在基于Debian的系统(如Ubuntu, Debian)上:

    sudo apt update
    sudo apt install auditd audispd-plugins -y
    登录后复制
  2. 启动并启用

    auditd
    登录后复制
    服务:

    sudo systemctl enable auditd
    sudo systemctl start auditd
    登录后复制

    确认服务状态:

    sudo systemctl status auditd
    登录后复制
  3. 配置审计规则: 这是核心部分。你可以使用

    auditctl
    登录后复制
    命令实时添加规则,但为了持久化,通常会编辑
    auditd
    登录后复制
    的规则文件(通常是
    /etc/audit/audit.rules
    登录后复制
    /etc/audit/rules.d/
    登录后复制
    下的文件)。

    清空现有规则(谨慎操作,这会移除所有当前加载的规则):

    sudo auditctl -D
    登录后复制

    添加基本审计规则示例:

    • 监控所有可执行程序的启动:

      sudo auditctl -a always,exit -F arch=b64 -S execve -k process_exec
      sudo auditctl -a always,exit -F arch=b32 -S execve -k process_exec
      登录后复制

      这里,

      -a always,exit
      登录后复制
      表示在系统调用退出时始终生成审计事件。
      -F arch=b64
      登录后复制
      -F arch=b32
      登录后复制
      分别指定64位和32位架构,因为
      execve
      登录后复制
      系统调用可能因架构而异。
      -S execve
      登录后复制
      指定要审计的系统调用。
      -k process_exec
      登录后复制
      是一个自定义的键值,方便后续搜索。

    • 监控特定文件或目录的访问(读、写、执行、属性更改):

      sudo auditctl -w /etc/passwd -p rwxa -k passwd_access
      sudo auditctl -w /var/log/myapp/ -p rwxa -k myapp_log_changes
      登录后复制

      -w /path/to/file_or_dir
      登录后复制
      指定要监控的文件或目录。
      -p rwxa
      登录后复制
      指定权限:
      r
      登录后复制
      (读),
      w
      登录后复制
      (写),
      x
      登录后复制
      (执行),
      a
      登录后复制
      (属性更改)。

    • 监控特定用户执行的操作:

      sudo auditctl -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -k user_file_ops
      登录后复制

      -F auid=1001
      登录后复制
      过滤用户ID为1001的操作。

    保存规则: 将上述

    auditctl
    登录后复制
    命令添加到
    /etc/audit/rules.d/99-custom.rules
    登录后复制
    (或类似名称)文件中。确保文件以
    .rules
    登录后复制
    结尾,并且
    auditd
    登录后复制
    服务会加载它。

    # /etc/audit/rules.d/99-custom.rules
    -D # 清除所有规则,确保从头开始
    -a always,exit -F arch=b64 -S execve -k process_exec
    -a always,exit -F arch=b32 -S execve -k process_exec
    -w /etc/passwd -p rwxa -k passwd_access
    -w /var/log/myapp/ -p rwxa -k myapp_log_changes
    -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -k user_file_ops
    # 确保在文件末尾添加以下行,以使规则持久化并在系统重启后生效
    -e 2
    登录后复制

    然后重启

    auditd
    登录后复制
    服务使规则生效:

    sudo systemctl restart auditd
    登录后复制
  4. 查看和分析审计日志: 审计日志通常存储在

    /var/log/audit/audit.log
    登录后复制
    文件中。你可以使用
    ausearch
    登录后复制
    autrace
    登录后复制
    工具来查询和分析这些日志。

    • 使用

      ausearch
      登录后复制
      按键值搜索:

      sudo ausearch -k process_exec
      sudo ausearch -k passwd_access
      sudo ausearch -k user_file_ops --start today
      登录后复制

      --start today
      登录后复制
      可以指定搜索的起始时间。

    • 使用

      ausearch
      登录后复制
      按类型、用户或时间搜索:

      sudo ausearch -m SYSCALL -sv yes # 搜索所有成功的系统调用事件
      sudo ausearch -auid 1001 # 搜索特定用户ID的操作
      sudo ausearch -ts 08/01/2023 00:00:00 -te 08/01/2023 23:59:59 # 搜索特定时间范围内的事件
      登录后复制
    • 使用

      autrace
      登录后复制
      跟踪单个进程:
      autrace
      登录后复制
      可以用来跟踪一个新启动的进程及其所有子进程的系统调用。

      sudo autrace -r /bin/ls -l /tmp
      登录后复制

      这会生成一个详细的审计报告,显示

      ls
      登录后复制
      命令执行期间的所有相关系统调用。

Linux审计系统(auditd)的核心原理是什么?

Linux审计系统,也就是我们常说的

auditd
登录后复制
,它的核心原理其实挺巧妙的。你可以把它想象成一个系统级的“黑匣子”飞行记录仪。它不只是一个简单的日志服务,而是一个深度集成到内核中的机制。当系统中的任何关键事件发生时,比如一个文件被打开、一个程序被执行、或者一个用户登录,内核会捕获这些事件,并根据你预设的规则进行匹配。

如果事件符合某个审计规则,内核就会生成一个审计记录。这些记录不会直接写入文件,而是先发送给一个用户空间的守护进程——

auditd
登录后复制
auditd
登录后复制
负责接收这些原始事件,进行进一步的处理,然后按照配置将它们写入到
/var/log/audit/audit.log
登录后复制
文件中。

这个过程中,最关键的在于它的事件驱动规则引擎。所有的审计都是基于系统调用(syscalls)的,这是操作系统与应用程序交互的底层接口。通过监控这些系统调用,

auditd
登录后复制
能够捕捉到几乎所有重要的系统活动。规则引擎则允许你定义非常精细的过滤条件,比如只审计某个用户、某个文件、某个系统调用,甚至某个特定架构(32位或64位)下的操作。这就避免了日志爆炸,同时确保你能捕捉到真正需要关注的信息。

对我来说,

auditd
登录后复制
的强大之处在于它的细粒度。虽然有时候配置起来会觉得有点啰嗦,规则一多就容易混淆,但当系统出现异常,或者需要满足合规性要求时,这些详细的审计日志简直是救命稻草。它能告诉你“谁在什么时候对什么做了什么”,这是其他日志工具很难提供的深度。

如何配置auditd规则以跟踪特定进程的启动和文件访问?

配置

auditd
登录后复制
规则来跟踪特定进程的启动和文件访问,是其最常用的功能之一。这里面涉及到对系统调用和文件路径的精确把握。

1. 跟踪特定进程的启动:

要跟踪进程启动,我们主要关注

execve
登录后复制
系统调用。这个系统调用是Linux下执行新程序的核心。

  • 跟踪所有可执行程序的启动:

    sudo auditctl -a always,exit -F arch=b64 -S execve -k program_execution
    sudo auditctl -a always,exit -F arch=b32 -S execve -k program_execution
    登录后复制

    这里我用了

    program_execution
    登录后复制
    作为键值。这会记录所有尝试执行新程序的事件,无论成功与否。

  • 跟踪特定路径下程序的启动: 如果你只想关注

    /usr/local/bin/
    登录后复制
    下的程序启动,可以这样:

    sudo auditctl -a always,exit -F arch=b64 -S execve -F dir=/usr/local/bin/ -k local_bin_exec
    登录后复制

    注意,

    -F dir=
    登录后复制
    这种方式可能不如直接监控文件本身精确,因为
    execve
    登录后复制
    会记录被执行的完整路径。更常见的是结合
    path
    登录后复制
    inode
    登录后复制

  • 跟踪特定用户的程序启动:

    sudo auditctl -a always,exit -F arch=b64 -S execve -F auid=1001 -k user_program_exec
    登录后复制

    auid
    登录后复制
    是审计用户ID,通常与登录用户ID相同。

2. 跟踪文件访问:

文件访问的审计则更侧重于文件路径和操作类型(读、写、执行、属性更改)。

  • 监控关键配置文件(如

    /etc/ssh/sshd_config
    登录后复制
    )的读写:

    sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config_access
    登录后复制

    -p rwxa
    登录后复制
    意味着监控读(r)、写(w)、执行(x)、属性更改(a)。对于配置文件,通常
    rw
    登录后复制
    就足够了。

  • 监控特定目录下所有文件的写操作:

    万物追踪
    万物追踪

    AI 追踪任何你关心的信息

    万物追踪 44
    查看详情 万物追踪
    sudo auditctl -w /var/www/html/ -p wa -k web_root_write
    登录后复制

    这会监控

    /var/www/html/
    登录后复制
    目录下任何文件或子目录的写和属性更改操作。需要注意的是,目录监控会产生大量日志,尤其是对于活跃的目录。

  • 监控特定用户对文件的写操作:

    sudo auditctl -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -F dir=/home/user1/docs/ -p wa -k user1_doc_write
    登录后复制

    这里结合了系统调用(

    open
    登录后复制
    ,
    creat
    登录后复制
    等)和用户ID,以及目录。这种组合可以更精确地定位。

一些个人经验:

配置规则时,我发现最容易犯的错误就是规则过于宽泛,导致日志量暴增,很快就占满了磁盘空间,而且查找有用的信息变得异常困难。例如,一开始就监控整个

/bin
登录后复制
目录的
execve
登录后复制
,或者整个
/var
登录后复制
目录的写操作,这几乎肯定会带来麻烦。所以,务必从最关键、最具体的路径和操作开始,逐步扩展。同时,记得为每个规则加上有意义的
-k
登录后复制
键值,这在后续使用
ausearch
登录后复制
时能极大提高效率。

审计日志(audit.log)文件应该如何解读和分析?

审计日志文件

/var/log/audit/audit.log
登录后复制
初看起来可能有些令人生畏,因为它包含了大量原始、结构化的文本数据。每一行都是一个事件记录,但一个完整的审计事件通常由多行组成,通过
audit_id
登录后复制
(或
serial
登录后复制
)关联起来。

日志条目结构:

一个典型的审计日志条目可能包含以下字段:

  • type=
    登录后复制
    事件类型,如
    SYSCALL
    登录后复制
    (系统调用)、
    CWD
    登录后复制
    (当前工作目录)、
    path
    登录后复制
    (路径信息)、
    PROCTITLE
    登录后复制
    (进程标题)等。
  • msg=
    登录后复制
    消息体,包含时间戳、
    audit_id
    登录后复制
    (唯一的审计事件ID)、
    pid
    登录后复制
    (进程ID)、
    comm
    登录后复制
    (命令名)、
    exe
    登录后复制
    (可执行文件路径)、
    SYSCALL
    登录后复制
    (系统调用号)、
    success
    登录后复制
    (是否成功)、
    exit
    登录后复制
    (退出码)、
    a0-a3
    登录后复制
    (系统调用参数)、
    auid
    登录后复制
    (审计用户ID)、
    uid
    登录后复制
    (实际用户ID)、
    gid
    登录后复制
    (实际组ID)等。
  • name=
    登录后复制
    inode=
    登录后复制
    dev=
    登录后复制
    path
    登录后复制
    类型事件中,提供文件或目录的名称、inode号和设备号。
  • key=
    登录后复制
    我们在规则中定义的键值(
    -k
    登录后复制
    参数),这是快速过滤的关键。

解读和分析的工具:

直接

cat
登录后复制
grep
登录后复制
/var/log/audit/audit.log
登录后复制
文件效率很低,而且很难理解。
auditd
登录后复制
提供了一套专门的工具来处理这些日志:

  1. ausearch
    登录后复制
    :审计搜索工具 这是你分析审计日志的首选工具。它能根据各种条件过滤和格式化日志。

    • 按键值搜索:

      sudo ausearch -k passwd_access
      登录后复制

      这会显示所有与

      passwd_access
      登录后复制
      键相关的审计事件。

    • 按时间范围搜索:

      sudo ausearch --start 08/01/2023 09:00:00 --end 08/01/2023 10:00:00
      sudo ausearch --start today
      sudo ausearch --start boot
      登录后复制

      时间格式很重要,通常是

      MM/DD/YYYY HH:MM:SS
      登录后复制

    • 按用户ID搜索:

      sudo ausearch -auid 1000 # 审计用户ID
      sudo ausearch -uid 0 # 实际用户ID为root
      登录后复制
    • 按事件类型和成功状态搜索:

      sudo ausearch -m SYSCALL -sv no # 搜索所有失败的系统调用
      登录后复制
    • 组合条件搜索:

      sudo ausearch -k web_root_write -sv no --start yesterday
      登录后复制

      这会查找昨天所有对

      web_root
      登录后复制
      的失败写操作。

    • 将输出格式化为可读性更高的形式:

      sudo ausearch -k program_execution | less
      登录后复制

      ausearch
      登录后复制
      默认的输出已经比原始日志好读很多,它会把一个完整的事件合并展示。

  2. aureport
    登录后复制
    :审计报告工具
    aureport
    登录后复制
    可以生成各种汇总报告,帮助你快速了解系统活动概况。

    • 汇总所有事件:

      sudo aureport
      登录后复制
    • 按用户汇总:

      sudo aureport -u
      登录后复制
    • 按可执行程序汇总:

      sudo aureport -x
      登录后复制
    • 按失败事件汇总:

      sudo aureport --failed
      登录后复制
  3. autrace
    登录后复制
    :跟踪单个进程 如前所述,
    autrace
    登录后复制
    用于跟踪新启动的进程,它会临时添加规则并运行程序,然后将所有相关审计事件输出。这对于调试特定程序行为非常有用。

我的经验谈:

刚开始接触

auditd
登录后复制
日志,我发现最头疼的就是日志的碎片化,一个操作可能对应好几条日志,而且字段名又多又长。这时候,
ausearch
登录后复制
audit_id
登录后复制
就显得非常重要,它能把所有属于同一个事件的零散信息串联起来。我通常会先用
-k
登录后复制
参数快速定位到我感兴趣的事件类型,然后仔细阅读
ausearch
登录后复制
格式化后的输出。如果日志量实在太大,我会结合
grep
登录后复制
awk
登录后复制
做一些初步的过滤,但最终的分析还是要回到
ausearch
登录后复制
上。理解
SYSCALL
登录后复制
CWD
登录后复制
path
登录后复制
这些不同类型条目之间的关系,是高效解读日志的关键。有时候,一个看起来无关紧要的
CWD
登录后复制
条目,可能正是理解后续
SYSCALL
登录后复制
操作上下文的关键。

审计规则的持久化与性能考量有哪些?

在Linux审计系统中,规则的持久化和性能考量是两个非常实际且重要的问题。忽视其中任何一个,都可能导致审计系统无法达到预期效果,甚至对系统稳定性产生负面影响。

审计规则的持久化:

你通过

auditctl
登录后复制
命令添加的规则,默认情况下是临时的。这意味着一旦系统重启,或者
auditd
登录后复制
服务被重启,这些规则就会消失。为了让规则在系统重启后依然生效,你需要将它们写入配置文件。

  • 配置文件位置: 在大多数现代Linux发行版上,

    auditd
    登录后复制
    服务会从
    /etc/audit/rules.d/
    登录后复制
    目录下的
    .rules
    登录后复制
    文件加载规则。通常,这些文件会按字母顺序加载。你也可以直接编辑
    /etc/audit/audit.rules
    登录后复制
    文件,但最佳实践是创建新的
    .rules
    登录后复制
    文件,例如
    99-custom.rules
    登录后复制
    ,这样可以更好地组织和管理你的自定义规则。

  • 文件内容: 配置文件中的规则语法与

    auditctl
    登录后复制
    命令行参数基本一致,每行一个规则。

    # /etc/audit/rules.d/99-custom.rules
    -D # 这一行非常重要,它会在加载新规则前清除所有现有规则
    -a always,exit -F arch=b64 -S execve -k process_exec
    -w /etc/passwd -p rwxa -k passwd_access
    # ... 其他规则
    -e 2 # 这一行也至关重要,它设置审计系统为启用状态,并且不可更改规则
    登录后复制

    -D
    登录后复制
    确保每次服务启动时,规则集都是一个干净的开始,避免旧规则的干扰。
    -e 2
    登录后复制
    意味着审计系统是启用的,并且规则集是锁定的,不能通过
    auditctl
    登录后复制
    命令再添加或删除规则,除非重启服务。这提供了更高的安全性,防止未经授权的规则篡改。

  • 激活持久化规则: 编辑完规则文件后,你需要重启

    auditd
    登录后复制
    服务来加载这些新的规则:

    sudo systemctl restart auditd
    登录后复制

    你也可以使用

    sudo auditctl -R /etc/audit/rules.d/99-custom.rules
    登录后复制
    来加载规则,但这不会清除现有规则,所以通常不推荐。

性能考量:

审计系统在内核层面运行,理论上效率很高,但配置不当仍然可能导致显著的性能开销。

  • 规则的数量和复杂度: 规则越多,内核在处理每个事件时需要匹配的模式就越多,这会增加CPU的负担。过于复杂的规则(例如,包含大量正则表达式或多个

    &&
    登录后复制
    条件)也会增加处理时间。

  • 审计范围: 最常见的性能问题源于审计范围过大。例如,监控整个

    /
    登录后复制
    文件系统的所有读写操作,或者记录所有用户的每一个系统调用。这会产生海量的日志数据,导致:

    • CPU使用率升高: 内核需要处理和匹配更多事件。
    • 磁盘I/O增加: 大量日志数据需要写入磁盘,可能导致磁盘成为瓶颈。
    • 磁盘空间耗尽: 日志文件迅速增长,可能填满文件系统。
    • 日志分析困难: 海量数据使得查找有用信息变得异常困难。
  • auditd
    登录后复制
    的配置:
    auditd.conf
    登录后复制
    文件(通常在
    /etc/audit/auditd.conf
    登录后复制
    )中的一些参数也会影响性能:

    • num_logs
      登录后复制
      :保留的日志文件数量。
    • max_log_file
      登录后复制
      :单个日志文件的最大大小。
    • max_log_file_action
      登录后复制
      :当日志文件达到最大值时的动作(如
      ROTATE
      登录后复制
      KEEP_LOGS
      登录后复制
      SUSPEND
      登录后复制
      )。
    • flush
      登录后复制
      :日志写入磁盘的方式(如
      INCREMENTAL
      登录后复制
      、`WATERMARK

以上就是如何在Linux中进程审计 Linux audit进程跟踪的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号