文档文档

安全性

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=journalStandardError=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 pingpasswd

  • NoNewPrivileges=true
  • RestrictSUIDSGID=true
  • CapabilityBoundingSet=
  • AmbientCapabilities=
主机保护

主机保护的默认设置

  • ProtectSystem=strict - 使主机文件只读
  • ProtectHome=true - 禁止访问 /home(提示:将凭证、配置等放在 /etc/influxdb3/var/lib/influxdb3 的某个位置)
  • PrivateTmp=true - 使用与主机分离的 /tmp/var/tmp
  • TemporaryFileSystem=/dev/shm:mode=1777 - 使用与主机分离的 /dev/shm(可以通过 size= 覆盖以限制大小)
  • PrivateDevices=true - 只允许伪设备,没有主机挂载传播
  • ProtectKernelLogs=true - 禁止访问内核日志环形缓冲区(如果 PrivateDevices=false 则需要)
  • PrivateIPC=true - 使用与主机分离的 SysV IPC
  • InaccessiblePaths=... - 禁止已知的系统和用户服务的命名套接字(由于允许 AF_UNIX,因此需要)
  • ProtectProc=invisible - 隐藏非此 用户(influxdb3:influxdb3拥有的进程。这提供了强大的隔离,但意味着插件无法看到系统上的其他进程,这可能会影响需要此功能的自定义处理引擎插件

站点特定指令

默认配置省略了取决于您环境的指令——例如,以下指令需要根据您的部署需求和资源限制进行调整

  • IPAddressDenyIPAddressAllow 用于限制数据库和处理引擎与特定 IP 地址的通信
  • MemoryHighMemoryMax 用于限制内存使用(数据库进程已具有可配置的内存控制,因此这主要用于限制处理引擎)
  • 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 读取其他进程的信息

  1. 运行 sudo systemctl edit influxdb3-core

  2. 编辑文件,使其包含

    ### 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
    ...
  3. 验证更改(已发布的单元首先列出,然后是覆盖)

    $ 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
    $
  4. 使用 sudo systemctl restart influxdb3-core 重启单元

示例:限制网络

systemd 支持通过 BPF 进行网络过滤。添加指令时,规则的评估顺序为

  1. 如果匹配 IPAddressAllow 中的条目,则授予访问权限
  2. 否则,如果匹配 IPAddressDeny 中的条目,则拒绝访问
  3. 否则,授予访问权限

对于出口流量,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.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2