auditd

本文深入解析Linux审计系统的核心组件auditd,包括消息来源、规则添加方式及系统交互流程。同时,介绍审计守护进程、控制工具、规则、报告、搜索功能和调度进程等关键组件的作用,以及如何配置和使用审计系统实现系统安全监控。

linux服务——auditd

2577人阅读 评论(1) 收藏 举报

审计(audit)是linux安全体系的重要组成部分,他是一种“被动”的防御体系。

在内核里有内核审计模块,核外有核外的审计后台进程auditd。
应用程序给内核发送审计消息,内核的审计模块再把消息转发给用户空间的后台进程auditd处理。

大概就是这么回事,我不是太深入,如果需要更多的内容,自己去查阅相关资料。如果没有好的资料,我推荐一本,《linux安全体系分析与编程》作者倪继利 。

审计说穿了就是把和系统安全有关的事件记录下来:谁谁谁在什么时候做了什么事,结果是啥。

审计的消息来源主要有两方面:

1.内核(我不太确定)、应用程序(audit-libs-devel包里面有编程接口)产生的。

2.系统管理员添加的审计规则,匹配规则的事件都将被记录下来。

规则添加:

1 添加文件监视:
该规则能监视文件被读、写、执行、修改文件属性的操作,并记录
auditctl -w /etc/passwd -p rwax
上述命令记录/etc/passwd 被读、写、执行修改属性的操作

2 系统调用入口监视(entry链表)
该规则在进入系统调用的时候触发,记录此时的执行上下文
auditctl -a entry,always -F UID=root -S mkdir
上述命令记录uid为root的用户调用mkdir系统调用的情况

3 系统调用出口(exit链表)
同系统调用入口规则,不同的是在退出系统调用的时候被触发

4 任务规则(task表)
该规则在调用fork() 或者clone()产生新进程的时候触发,因此,该规则适用的“域”仅仅是此时可见的,例如uid gid pid 等等。(参见man auditctl和这里
auditctl -a task,always -F uid=root

5 可信应用程序规则(user表)
按照各种资料上的说法,这里的user表是用来过滤消息的,内核传递给审计后台进程之前先查询这个表。
但是,不管怎么设置规则都达不到这个效果。如下:
auditctl -a user,always -F uid=root
添加上述规则,发现root的行为被记录。这样添加规则还是被记录:
auditctl -a user,never -F uid=root
后来发现我的CentOS里面system-config-audit上面,该链表被命名为“可信应用程序”。受此启发写了个小程序,向审计内核里写消息,发现这样的消息被过滤了。
这点需要进一步验证。

6 过滤规则(exclude表)
这个表是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。
例如:不想看到用户登陆类型的消息,可以如下添加规则:
auditctl -a exclude,always -F msgtype=USER_LOGIN
这里过滤是以“消息类型”为对象的。

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

下面的图片说明了Linux Audit的各个组成之间是如何

相互作用的:

linux的审计功能(audit)(转) - llei - llei的学习笔记linux的审计功能(audit)(转) - llei - llei的学习笔记

图片上实线代表数据流,虚线代表组件关之间的控制系

auditd

Audit 守护进程负负责把内核产生的信息写入到硬盘上,这些信息是由应用程序和系统活动所触发产生的。Audit守护进程如何启动取决于它的配置文件,/etc /sysconfig/auditd。Audit系统函数的启动受文件/etc/audit/auditd.conf的控制。有关auditd更多的信息参照第三节:配置Audit守护进程。

auditctl

auditctl功能用来控制Audit系统,它控制着生成日志的各种变量,以及内核审计的各种接口,还有决定跟踪哪些事件的规则。关于auditctl的更多信息参照第四节:用auditctl控制Audit系统。

audit rules

在/etc/audit/audit.rules中包含了一连串auditctl命令,这些命令在audit系统被启用的时候被立即加载。更所关于审计规则的信息请参看第五节:给audit系统传递变量

aureport

aureport的功能是能够从审计日志里面提取并产生一个个性化的报告,这些日志报告很容易被脚本化,并能应用于各种应用程序之中,如去描述结果,更多信息参看第六节:理解审计日志和生成审计报告

ausearch

这个功能能让我们从审计日志之中通过关键词或者是格式化录入日志中的其它特征变量查询我们想要看到的信息。详细信息请参看第七节:用ausearch查询audit守护进程的的日志。

audispd

这是一个审计调度进程,它可以为将审计的信息转发给其它应用程序,而不是只能将审计日志写入硬盘上的审计日志文件之中。

autrace

这个功能更总类似于strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。更多详细信息请参看第八节:用autrace分析进程


<think>我们正在处理用户关于如何重启auditd服务的问题。根据提供的引用,用户遇到了使用systemctlrestartauditd失败的情况,并提供了几种错误信息和解决方案的参考。用户引用的信息显示:引用[1]:使用systemctlrestartauditd失败,错误信息为"Failedtorestartauditd.service:Operationrefused,unitauditd.servicemayberequestedbydependencyonly"。该引用建议使用传统的service命令来重启:`serviceauditdrestart`。引用[2]:同样遇到重启失败,错误信息提示使用`systemctlstatusauditd.service`和`journalctl-xe`查看详情。引用[3]:在创建目录并设置权限后,尝试使用service命令重启,但依然失败,并重定向到systemctl。引用[4]:错误信息为"Operationrefused,unitauditd.servicemayberequestedbydependencyonly(itisconfiguredtorefusemanualstart/stop)"。根据这些引用,特别是引用[1]和引用[4],我们可以得出结论:在某些系统上,auditd服务被配置为不允许手动启动或停止,只能通过依赖关系(例如系统启动时)来启动。因此,使用systemctl命令重启auditd会被拒绝。解决方案:引用[1]中提到,auditd的开发者SteveGrubb建议使用传统的service命令来重启auditd服务。因此,我们可以建议用户使用`serviceauditdrestart`命令。另外,引用[3]中提到创建/var/log/audit目录并设置权限,这可能是解决auditd启动失败的一个步骤,因为如果日志目录不存在,auditd可能无法启动。但根据用户的问题,他们主要关心如何重启,所以我们可以先建议使用service命令,如果失败再检查日志目录是否存在。因此,回答步骤:1.建议使用`serviceauditdrestart`命令。2.如果仍然失败,检查日志目录(/var/log/audit)是否存在并具有正确的权限(755),所有者应为root。3.如果问题依旧,查看详细日志(使用`systemctlstatusauditd.service`和`journalctl-xe`)。注意:用户可能没有提到日志目录不存在的问题,但根据引用[3],这也是一个可能的解决步骤。最终,我们给出一个清晰的步骤指南,并说明为什么systemctl可能失败。同时,根据要求,我们需要在回答末尾生成相关问题。回答结构:1.解释问题:为什么systemctlrestartauditd会失败?2.提供解决方案:使用service命令重启。3.如果service命令也失败,则提供其他检查步骤(日志目录和查看日志)。4.总结。相关问题:1.如何配置auditd的日志存储路径?2.如何添加auditd的审计规则?3.auditd服务无法启动时,如何排查问题?4.为什么auditd服务不允许使用systemctl手动重启?</think>### 如何正确重启auditd服务 根据您提供的引用信息和Linux审计服务的特性,重启`auditd`服务需要特殊处理。以下是可靠的操作步骤及原理说明: #### 1. **为什么systemctl restart会失败?** - `auditd`服务被设计为**仅允许通过依赖关系启动**(如系统启动时),拒绝手动控制(引用[1][4]) - 系统保护机制:强制重启可能中断内核审计事件收集,导致安全日志丢失 - 错误示例: ```bash # systemctl restart auditd Failed to restart auditd.service: Operation refused, unit auditd.service may be requested by dependency only ``` #### 2. **正确重启方法** ✅ **使用传统service命令**(引用[1][3]): ```bash sudo service auditd restart ``` - 输出应显示: ``` Stopping auditd: [ OK ] Starting auditd: [ OK ] ``` #### 3. **特殊场景处理** **情况1:日志目录缺失**(引用[3]) ```bash # 创建日志目录并授权 sudo mkdir /var/log/audit sudo chmod 755 /var/log/audit sudo service auditd restart ``` **情况2:查看详细错误** ```bash journalctl -u auditd.service -xe # 查看完整日志(引用[2][4]) systemctl status auditd.service # 检查服务状态 ``` #### 4. **操作原理** | **方法** | **适用场景** | **内核事件保护** | |----------------|--------------------------|----------------| | `service`命令 | 安全重启 | ✅ 完整保持 | | `systemctl` | 仅系统初始化时自动调用 | ❌ 可能中断 | | 直接kill进程 | 绝对避免(导致审计链断裂) | ❌ 完全破坏 | > **关键区别**:`service auditd restart`命令包含审计框架的专用处理逻辑,能安全暂停事件收集并刷新缓冲区,而`systemctl`会触发系统保护机制拒绝操作[^1][^4]。 #### 5. **验证重启成功** ```bash sudo auditctl -s # 查看运行状态 ``` 正常输出应包含: ``` enabled 1 pid 1234 # 新进程ID ``` > **最佳实践**:生产环境中如需变更配置,优先使用`auditctl -R <规则文件>`加载新规则,非必要不重启服务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值