数字化技能提升教程,数字化时代生存宝典

FreeBSD安全审计

浏览:119

服务器出现异常修改时,单靠Shell历史记录往往难以还原操作过程。FreeBSD的安全审计功能可以记录选定的登录、认证及文件操作事件,供管理员进一步查询。本教程先开启基础审计,再为一个测试账号增加文件操作记录,避免一开始就产生大量日志。

一、确认环境与操作范围

以下操作在FreeBSD宿主机上以root身份执行,使用系统提供的OpenBSM审计组件。

本例涉及:

  • 审计服务:auditd
  • 全局配置:/etc/security/audit_control
  • 用户配置:/etc/security/audit_user
  • 日志目录:/var/audit
  • 测试账号:auditdemo

自定义内核需要包含AUDIT支持。详细审计可能产生大量数据,建议先在测试环境验证,并为日志目录规划足够空间。

二、备份配置并创建测试账号

先确认配置文件存在:

ls -l /etc/security/audit_control /etc/security/audit_user

备份现有配置:

cp -p /etc/security/audit_control /root/audit_control.before-change
cp -p /etc/security/audit_user /root/audit_user.before-change

检查测试账号:

id auditdemo

不存在时创建,并交互设置密码:

pw useradd auditdemo -m -s /bin/sh
passwd auditdemo

不要将测试密码写入命令行或公开文档。已有同名业务账号时,应改用另一个独立测试账号。

三、配置基础审计策略

编辑:

vi /etc/security/audit_control

针对新的测试环境,设置以下条目;已有审计策略的服务器应逐项调整,不要整体覆盖:

dir:/var/audit
dist:off
flags:lo,aa
minfree:10
naflags:lo,aa
policy:cnt
filesz:20M
expire-after:7d

这组配置记录登录、认证等事件,将日志保存在/var/audit,单个日志达到约20MB时轮转,并按7天设置过期清理条件。minfree:10是空间不足告警阈值,不会预留磁盘空间。

policy:cnt允许审计无法继续写入时业务仍然运行,因此可能出现记录缺失。 本例也没有开启命令行参数记录,避免额外记录可能包含敏感信息的参数。正式使用时,应按实际留存和可用性要求调整,而不是直接沿用实验配置。

四、为测试用户增加文件操作审计

编辑:

vi /etc/security/audit_user

加入:

auditdemo:fc,fd,fw,fm:no

其中:

  • fc:文件创建相关事件。
  • fd:文件删除相关事件。
  • fw:文件写入相关事件。
  • fm:文件属性修改相关事件。

这些用户级选择会与全局设置结合;末尾的no表示不额外指定需要排除的事件类。

用户级审计选择在登录时建立。修改后需要重新登录,不能只在原来的会话中继续测试。 使用su切换身份也不一定改变原始审计身份,因此后面应建立测试账号自己的登录会话。

五、启动auditd

设置开机启动:

sysrc auditd_enable="YES"

首次启动服务并检查:

service auditd start
service auditd status
ls -lh /var/audit

如果服务已经运行,修改策略后可执行:

audit -s

该命令通知审计服务重新读取配置;用户会话的预选事件仍需要通过重新登录更新。

六、生成测试事件

通过控制台或已有的SSH登录方式,以auditdemo建立一个新会话,不需要为此额外开放新的远程端口。

登录后检查身份:

id

在该用户自己的主目录中执行:

mkdir -p "$HOME/audit-test"
printf 'audit test\n' > "$HOME/audit-test/check.txt"
printf 'second line\n' >> "$HOME/audit-test/check.txt"
chmod 600 "$HOME/audit-test/check.txt"
rm "$HOME/audit-test/check.txt"

这里删除的只是刚创建的测试文件,不要替换为业务路径。完成后退出测试会话。

返回root终端,手动轮转日志:

audit -n

该操作关闭当前审计日志并创建新日志,方便检查刚结束的记录。

七、读取审计日志

审计记录采用二进制格式,应使用praudit转换,不要直接用cat读取。

先列出日志:

ls -lt /var/audit

选择与测试时间对应、已经结束的日志文件。文件名中带有not_terminated的通常仍属于未正常结束或正在写入的日志,应先结合服务状态确认。

下面的文件名仅表示位置,执行时替换成实际日志文件:

praudit /var/audit/实际日志文件名 | less

也可以让每条记录显示为一行:

praudit -l /var/audit/实际日志文件名 | less

检查事件类型、身份、路径和执行结果,不要仅凭出现文件名就认定某次操作成功。

八、筛选指定事件

auditreduce用于筛选已有记录,输出仍是二进制,因此通常与praudit配合使用。

筛选登录、退出事件:

auditreduce -c lo /var/audit/实际日志文件名 | praudit -l

按测试用户的有效身份筛选:

auditreduce -e auditdemo /var/audit/实际日志文件名 | praudit -l

筛选包含测试目录路径的记录:

auditreduce -o 'file=/audit-test/' \
  /var/audit/实际日志文件名 | praudit -l

其中,-e匹配有效用户,-o file=按路径表达式筛选,不能将有效用户与最初登录建立的审计身份混为一谈。

九、管理日志容量与保留时间

日常检查:

df -h /var/audit
du -sh /var/audit

本例的expire-after:7d会使符合过期条件的日志被清理,不是永久保留方案。需要长期留存时,应先建立归档流程,再调整清理策略;提高保留时间后,也要相应增加容量。

建议限制审计文件的访问权限,不要将日志放入网站公开目录,也不要直接对外分享未经检查的记录。

十、常见问题

1. 服务已经启动,为什么没有测试用户的文件记录?

先确认该用户是在配置生效后重新登录,再核对audit_user中的用户名和事件类。旧会话不会因为配置文件修改而自动获得新的审计选择。

2. 能记录每一条Shell命令和文件修改内容吗?

不能这样理解。审计记录的是已选择、且系统支持的安全事件,不是完整终端录像或文件差异备份。不同登录程序对审计会话的支持也可能不同。

3. 如何撤销测试用户的额外审计?

从/etc/security/audit_user中删除对应测试条目,保留其他用户配置,再让测试账号退出并重新登录。不要为了撤销单个账号的实验而停止整台服务器的审计。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。