FreeBSD安全审计
服务器出现异常修改时,单靠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
- 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
- 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。