写点什么

在 Ubuntu 22.04 上运行 Filebeat 7.10.2

作者:极限实验室
  • 2025-02-04
    湖南
  • 本文字数:1031 字

    阅读完需:约 3 分钟

环境

操作系统:阿里云 Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-83-generic x86_64)


软件版本:Filebeat 7.10.2


用户:root

运行

  1. 下载


这里下载 filebeat 7.10.2。


  1. 配置


简单配置一下 filebeat.yml,从标准输入采集,写入到标准输出 :


filebeat.inputs:- type: stdin
output.console: pretty: true
复制代码


  1. 运行


因为使用 root 用户,根据官方建议添加 --strict.perms=false 参数。


直接运行 ./filebeat -e --strict.perms=false:



出现异常:


runtime/cgo: pthread_create failed: Operation not permittedSIGABRT: abortPC=0x7f123c7cc9fc m=3 sigcode=18446744073709551610
复制代码

分析

网上搜索一下问题,发现有位网友也遇到了同样问题,并且解决了,解决方案是添加如下配置:


seccomp:  default_action: allow  syscalls:  - action: allow    names:    - rseq
复制代码


通过官网文档了解 seccomp:在 Linux 3.17 及更高版本上,Filebeat 使用安全计算模式,也称为 Seccomp。Seccomp 限制进程可以发出的系统调用,默认开启。


结合网友的解决方案,得出初步结论:Filebeat 7.10.2 运行在 Ubuntu 22.04 上时缺少 rseq 系统调用,导致异常。


通过查找 syscall 错误:


goroutine 44 [syscall]:syscall.Syscall(0x0, 0x0, 0xc00070c000, 0x4000, 0xc000122000, 0x800000, 0x7ffff800000)  /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5syscall.read(0x0, 0xc00070c000, 0x4000, 0x4000, 0x0, 0x0, 0x16e3b0e)  /usr/local/go/src/syscall/zsyscall_linux_amd64.go:686 +0x5asyscall.Read(...)  /usr/local/go/src/syscall/syscall_unix.go:189
复制代码


在官网找到相关问题,因为 glibc >= 2.35,但 beats 里允许的默认系统调用中没有 rseq 导致的异常。问题已在 7.17.2 版本修复


验证 glibc 版本,确实为 2.35。



最终得出结论:因为 glibc >= 2.35,但 beats 里允许的默认系统调用中没有 rseq 导致的异常。

总结

通过上面的问题分析,得出有如下 2 种解决办法:


  1. 关闭 seccomp(不推荐)

  2. 添加 seccomp 配置,允许 rseq 系统调用

验证

  1. 关闭 seccomp


filebeat.inputs:- type: stdin
output.console: pretty: true
seccomp: enabled: false
复制代码



但关闭 seccomp,就不能基于最小特权原则限制 filebeat 的系统调用,进而最大限度的减少未知漏洞的影响。


  1. 添加 seccomp 配置,允许 rseq 系统调用


filebeat.inputs:- type: stdin
output.console: pretty: true
seccomp: default_action: allow syscalls: - action: allow names: - rseq
复制代码



发布于: 刚刚阅读数: 6
用户头像

简单、易用、极致、创新 2021-11-22 加入

极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

评论

发布
暂无评论
在 Ubuntu 22.04 上运行 Filebeat 7.10.2_ubuntu_极限实验室_InfoQ写作社区