go-audit
关于
go-audit 是许多发行版中自带的 auditd 守护进程的替代品。在创建了一个将审计日志转换为 json 的 auditd audisp 插件后,我开始对创建一个替代现有守护进程的方案感兴趣。
目标
- 安全:使用现代、类型安全和高性能的语言编写
- 快速:尽可能避免阻塞
- 输出 json:好耶
- 可插拔的管道:可以写入 syslog、本地文件、Graylog2 或标准输出。可轻松编写其他输出方式
- 通过 netlink 连接到 Linux 内核(信息在这里和这里)
使用方法
安装
-
安装 golang,需要 1.14 或更高版本
-
克隆仓库
git clone (此仓库) cd go-audit
-
构建二进制文件
make
-
将二进制文件
go-audit
复制到你想要的位置
测试
make test
- 运行单元测试套件make test-cov-html
- 运行单元测试并打开代码覆盖率结果make bench
- 运行基准测试套件make bench-cpu
- 运行带 CPU 分析的基准测试套件make bench-cpulong
- 运行带 CPU 分析的基准测试套件,并尝试获取一些垃圾回收信息
作为服务运行
查看 contrib 文件夹,其中包含如何在你的机器上将 go-audit
作为正式服务运行的示例。
配置示例
常见问题
我在日志中看到 Error during message receive: no buffer space available
这是因为 go-audit
接收数据的速度不及你的系统生成数据的速度。你可以增加系统范围的接收缓冲区,也许会有所帮助。最好尝试减少 go-audit
需要处理的数据量。
如果减少审计速度不是一个选项,你可以尝试在配置中增加 socket_buffer.receive
的值。
有关更多信息,请参见配置示例
socket_buffer:
receive: <一个比(当前值 * 2)更大的数字>
有时文件没有 name
,只有 inode
,这是为什么?
内核并不总是知道文件访问的文件名。从 inode 确定文件名是昂贵且容易出错的。
不过,你可以映射回一个文件名,可能不是触发审计行的那个文件名。
sudo debugfs -R "ncheck <要映射的 inode>" /dev/<你的块设备在这里>
我不喜欢数学,想让你告诉我使用哪个 syslog 优先级
使用默认值,或参考这个方便的表格。
维基百科有一个关于这个的很好的页面
emerg (0) | alert (1) | crit (2) | err (3) | warn (4) | notice (5) | info (6) | debug (7) | |
---|---|---|---|---|---|---|---|---|
kernel (0) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
user (1) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
mail (2) | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
daemon (3) | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
auth (4) | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
syslog (5) | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
lpr (6) | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
news (7) | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
uucp (8) | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
clock (9) | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
authpriv (10) | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
ftp (11) | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
ntp (12) | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |
logaudit (13) | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 |
logalert (14) | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |
cron (15) | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |
local0 (16) | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 |
local1 (17) | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |
local2 (18) | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 |
local3 (19) | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 |
local4 (20) | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 |
local5 (21) | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |
local6 (22) | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 |
local7 (23) | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 |
我在 syslog 中看到重复的条目!
这可能是因为你正在运行 journald
,它也在读取审计事件。要禁用它,你需要在 journald
中禁用该功能。
sudo systemctl mask systemd-journald-audit.socket
感谢!
感谢 Hardik Juneja、Arun Sori、Aalekh Nigam Aalekhn 通过 https://github.com/mozilla/audit-go 提供的灵感