安全性
InfluxDB 3 Core 包含安全功能,可保护您的数据和系统资源。当您使用 DEB 或 RPM 包进行安装时,默认的 systemd 单元文件会配置安全沙箱,将数据库进程与主机系统隔离。本文档将介绍文件系统布局、沙箱指令以及如何为您的环境自定义安全设置。
Linux DEB 和 RPM
当您在启用了 systemd 的系统上通过 DEB 或 RPM 进行安装时,InfluxDB 3 Core 将在一个由提供的 systemd 单元文件配置的沙箱环境中运行。
要求
- 已启用
systemd的 Linux 系统 systemd版本 248 或更高版本(以获得完整的沙箱支持)(Debian 12+、RHEL 9+、Ubuntu 22.04+)
在旧系统上,systemd 会记录 Unknown lvalue '<directive>' 并启动服务,但没有沙箱保护。
文件系统布局
提供的单元文件假定以下文件系统布局
/etc/influxdb3:InfluxDB 3 Core 配置目录(默认权限为0755,所有权为influxdb3:influxdb3)/etc/influxdb3/influxdb3-core.conf:TOML 配置文件/usr/bin/influxdb3:InfluxDB 3 Core 二进制文件/usr/lib/influxdb3/python:包含 InfluxDB 3 Core 处理引擎使用的嵌入式解释器的目录/var/lib/influxdb3:InfluxDB 3 Core 的可写目录/var/lib/influxdb3/data:当object-store设置为file时 InfluxDB 3 Core 数据文件的默认目录(DEB 和 RPM 安装的默认设置)/var/lib/influxdb3/plugins:InfluxDB 3 Core 插件文件的默认目录/var/log/influxdb3:日志的可写目录(默认不使用)
如果您将敏感凭证存储在 /etc/influxdb3 中,请将权限调整为 0750 以限制访问。
systemd 单元详解
单元文件是自文档化的。要查看 InfluxDB 3 服务的完整 systemd 配置(influxdb3-core),请执行以下命令
systemctl cat influxdb3-core输出类似于以下内容
# /usr/lib/systemd/system/influxdb3-core.service
[Unit]
Description=InfluxDB 3 Core
After=network-online.target
[Service]
Type=simple
... <sandbox and other directives> ...
默认沙箱配置
默认沙箱配置在不影响常见用例的情况下提供了安全隔离。默认情况下设置了以下选项
基本安全
基本安全(如文件系统和用户)的默认设置
StateDirectory=influxdb3- 相对于/var/lib的可写区域LogsDirectory=influxdb3- 相对于/var/log的可写区域(默认情况下,单元配置为StandardOutput=journal和StandardError=journal,不会使用此目录)User=influxdb3,Group=influxdb3,SupplementaryGroups=- 以非特权的influxdb3:influxdb3用户身份运行 InfluxDB 3 Core。InfluxDB 3 Core 运行不需要任何特殊权限,并且应始终设置为一个非特权用户UMask=0027- 严格的默认文件模式创建掩码
限制内核攻击面
限制内核攻击面的默认设置
SystemCallFilter=@system-service,SystemCallArchitectures=native,SystemCallFilter=~io_uring_setup keyctl userfaultfd, 和LockPersonality=true- 基本的允许 Linux 系统调用集,排除了少数可能被滥用的不需要的调用RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX- 将允许的地址族限制为基本功能所需(例如,IP 网络和 DNS 解析)。需要内核套接字或路由内省的自定义处理引擎插件可能需要将AF_NETLINK添加到此列表中RestrictNamespaces=true- 禁止使用 Linux 命名空间
限制特权
限制特权并禁止获取或继承权限和能力的默认设置(阻止 ICMP ping、passwd)
NoNewPrivileges=trueRestrictSUIDSGID=trueCapabilityBoundingSet=AmbientCapabilities=
主机保护
主机保护的默认设置
ProtectSystem=strict- 使主机文件只读ProtectHome=true- 禁止访问/home(提示:将凭证、配置等放在/etc/influxdb3或/var/lib/influxdb3的某个位置)PrivateTmp=true- 使用与主机分离的/tmp和/var/tmpTemporaryFileSystem=/dev/shm:mode=1777- 使用与主机分离的/dev/shm(可以通过size=覆盖以限制大小)PrivateDevices=true- 只允许伪设备,没有主机挂载传播ProtectKernelLogs=true- 禁止访问内核日志环形缓冲区(如果PrivateDevices=false则需要)PrivateIPC=true- 使用与主机分离的 SysV IPCInaccessiblePaths=...- 禁止已知的系统和用户服务的命名套接字(由于允许AF_UNIX,因此需要)ProtectProc=invisible- 隐藏非此 用户(influxdb3:influxdb3)拥有的进程。这提供了强大的隔离,但意味着插件无法看到系统上的其他进程,这可能会影响需要此功能的自定义处理引擎插件
站点特定指令
默认配置省略了取决于您环境的指令——例如,以下指令需要根据您的部署需求和资源限制进行调整
IPAddressDeny和IPAddressAllow用于限制数据库和处理引擎与特定 IP 地址的通信MemoryHigh和MemoryMax用于限制内存使用(数据库进程已具有可配置的内存控制,因此这主要用于限制处理引擎)Nice,CPUQuota,CPUSchedulingPolicy,LimitNPROC, 和TasksMax用于限制 CPU 使用(数据库进程已具有可配置的 CPU 控制,因此这主要用于限制处理引擎)IOWeight等用于限制 I/O 操作(主要用于限制处理引擎)ReadOnlyPaths,ReadWritePaths, 和InaccessiblePaths用于允许/禁止默认沙箱未覆盖的其他路径
由于 InfluxDB 3 Core 在套接字激活方面存在限制,因此目前无法使用 PrivateNetwork=true。
调整 systemd 单元
虽然 systemd 单元已验证可与 InfluxDB 3 Core 和 官方插件一起使用,但在某些情况下,您可能希望进一步加固单元或放宽其限制。
要编辑单元文件,请执行以下命令
systemctl edit influxdb3-core避免直接修改 influxdb3-core.service 文件。请使用 systemctl edit 添加覆盖。
示例:放宽 ProtectProc=default
如果自定义插件需要从 /proc 读取其他进程的信息
运行
sudo systemctl edit influxdb3-core编辑文件,使其包含
### Editing /etc/systemd/system/influxdb3-core.service.d/override.conf ### Anything between here and the comment below will become the new contents of the file [Service] # the 'foo' plugin needs to see other user's processes ProtectProc=default ### Lines below this comment will be discarded ...验证更改(已发布的单元首先列出,然后是覆盖)
$ sudo systemctl daemon-reload && systemctl cat --no-pager influxdb3-core [Unit] Description=InfluxDB 3 Core After=network-online.target [Service] ... ProtectProc=invisible ... # /etc/systemd/system/influxdb3-core.service.d/override.conf [Service] # the 'foo' plugin needs to see other users' processes ProtectProc=default $使用
sudo systemctl restart influxdb3-core重启单元
示例:限制网络
systemd 支持通过 BPF 进行网络过滤。添加指令时,规则的评估顺序为
- 如果匹配
IPAddressAllow中的条目,则授予访问权限 - 否则,如果匹配
IPAddressDeny中的条目,则拒绝访问 - 否则,授予访问权限
对于出口流量,IP 地址与发送方匹配;对于入口流量,IP 地址与接收方匹配。此过滤只匹配 IP 地址,不匹配端口;如果您需要更大的灵活性,请改用主机防火墙工具/云安全组。
例如,要将通信限制为仅限本地主机,请使用 systemctl edit influxdb3-core 添加
### Editing /etc/systemd/system/influxdb3-core.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
IPAddressDeny=any
IPAddressAllow=localhost
### Lines below this comment will be discarded
...或者,要将网络限制为仅限公共 IP 范围,请改用此
### Editing /etc/systemd/system/influxdb3-core.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
IPAddressDeny=0.0.0.0/32 # 0.0.0.0 treated as 127.0.0.1
IPAddressDeny=127.0.0.0/8 # IPv4 loopback
IPAddressDeny=10.0.0.0/8 # IPv4 internal (RFC1918)
IPAddressDeny=172.16.0.0/12 # IPv4 internal (RFC1918)
IPAddressDeny=192.168.0.0/16 # IPv4 internal (RFC1918)
IPAddressDeny=169.254.0.0/16 # IPv4 link-local (RFC3927)
IPAddressDeny=224.0.0.0/4 # IPv4 multicast
IPAddressDeny=::1/128 # IPv6 loopback
IPAddressDeny=fe80::/64 # IPv6 link-local
IPAddressDeny=fc00::/7 # IPv6 unique local addr
IPAddressDeny=ff00::/8 # IPv6 multicast
### Lines below this comment will be discarded
...systemd 参考
有关更多信息,请参阅 systemd 文档
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。