在无管理权限下运行 Elastic Agent

编辑

在无管理权限下运行 Elastic Agent

编辑

从 Elastic Stack 8.15 版本开始,Elastic Agent 不再需要由具有超级用户权限的用户运行。您现在可以在 无特权 模式下运行 Agent,该模式不需要 Linux 或 macOS 上的 root 访问权限,也不需要 Windows 上的 admin 访问权限。在组织中,通常非常限制这种访问权限,因此能够以无完整管理权限运行 Agent 通常是一项要求。

通常,在无完整管理权限下运行的 Agent 的执行和行为与由超级用户运行的 Agent 完全相同。但是,某些集成和数据流不可用。如果某个集成需要 root 访问权限,则会在集成主页面上指明

您还可以在安装 Elastic Agent 后更改其特权模式

请参阅无特权模式下的 Agent 和仪表板行为无特权 模式下运行 Elastic Agent,了解与在没有完整 rootadmin 超级用户权限的情况下运行 Agent 相关的要求和步骤。

无特权 模式下运行 Elastic Agent

编辑

要在没有管理权限的情况下运行 Elastic Agent,您可以使用与运行 Elastic Agent 时完全相同的命令,但有一个例外。当您运行elastic-agent install命令时,添加 --unprivileged 标志。例如:

elastic-agent install \
  --url=https://cedd4e0e21e240b4s2bbbebdf1d6d52f.fleet.eu-west-1.aws.cld.elstc.co:443 \
  --enrollment-token=NEFmVllaa0JLRXhKebVKVTR5TTI6N2JaVlJpSGpScmV0ZUVnZVlRUExFQQ== \
  --unprivileged

请注意以下当前在 无特权 模式下运行 Elastic Agent 的限制

  • 在 Linux 系统上,使用 --unprivileged 标志安装 Elastic Agent 后,所有 Elastic Agent 命令都可以在不作为 root 用户的情况下运行。

    • sudo 选项仍然是 elastic-agent install 命令所必需的。只有 root 才能安装新服务。安装的服务不会以 root 用户身份运行。
  • 在命令中使用 sudo 而不使用 sudo -u 指定备用的非 root 用户可能会导致错误,因为该 Agent 没有所需的权限。
  • 使用 sudo -u elastic-agent-user 将以运行 Elastic Agent 服务的用户身份运行命令,并且始终有效。
  • 对于允许 elastic-agent 组中的用户访问的文件,使用已添加到该组的备用用户也将有效。仍有一些命令只能由运行服务的 elastic-agent-user 访问。

    • 例如,elastic-agent inspect 需要您在命令前添加 sudo -u elastic-agent-user

      sudo -u elastic-agent-user elastic-agent inspect

无特权模式下的 Agent 和仪表板行为

编辑

除了在无特权模式下运行 Elastic Agent 时不可用的集成之外,某些数据流也不可用。下表显示了在不同的操作系统中,当 Agent 没有完整管理权限时的影响。在大多数情况下,可以通过授予用户或组对指定文件的权限来缓解限制。

表 1. macOS

操作 无特权模式下的行为 解决方法

运行带有系统集成的 Elastic Agent

日志文件错误:Unexpected file opening error: Failed opening /var/log/system.log: open /var/log/system.log: permission denied

/var/log/system.log 文件提供 elastic-agent 组的读取权限以修复此错误。

运行带有系统集成的 Elastic Agent

[Logs System] Syslog 仪表板上,Syslog events by hostnameSyslog hostnames and processesSyslog logs 可视化缺少数据。

/var/log/system.log 文件提供 elastic-agent 组的读取权限以修复缺失的可视化。

运行带有系统集成的 Elastic Agent

[Metrics System] Host overview 仪表板上,CPU 和内存使用量列表中仅显示由 elastic-agent-user 用户运行的进程。

要修复可视化列表中缺失的进程,您可以将 elastic-agent-user 用户添加到系统 admin 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

运行 Elastic Agent 并访问 Elastic Agent 仪表板

[Elastic Agent] Agents info 仪表板上,包括 Most Active AgentsIntegrations per Agent 在内的可视化缺少数据。

要修复可视化中缺失的数据,您可以将 elastic-agent-user 用户添加到系统 admin 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

运行 Elastic Agent 并访问 Elastic Agent 仪表板

[Elastic Agent] Integrations 仪表板上,包括 Integration Errors TableEvents per integrationIntegration Errors 在内的可视化缺少数据。

要修复可视化中缺失的数据,您可以将 elastic-agent-user 用户添加到系统 admin 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

表 2. Linux

操作 无特权模式下的行为 解决方法

运行带有系统集成的 Elastic Agent

日志文件错误:[elastic_agent.filebeat][error] Harvester could not be started on new file: /var/log/auth.log.1, Err: error setting up harvester: Harvester setup failed. Unexpected file opening error: Failed opening /var/log/auth.log.1: open /var/log/auth.log.1: permission denied

要避免该错误,您可以将 elastic-agent-user 用户添加到 adm 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

运行带有系统集成的 Elastic Agent

日志文件错误:[elastic_agent.metricbeat][error] error getting filesystem usage for /run/user/1000/gvfs: error in Statfs syscall: permission denied

要避免该错误,您可以将 elastic-agent-user 用户添加到 adm 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

运行带有系统集成的 Elastic Agent

[Logs System] Syslog 仪表板上,Syslog events by hostnameSyslog hostnames and processesSyslog logs 可视化缺少数据。

要修复可视化中缺失的数据,您可以将 elastic-agent-user 用户添加到 adm 组。请注意,虽然这可以缓解问题,但它也会授予 elastic-agent user 比预期更多的权限。

运行 Elastic Agent 并访问 Elastic Agent 仪表板

[Elastic Agent] Agents info 仪表板上,包括 Most Active AgentsIntegrations per Agent 在内的可视化缺少数据。

/var/log/system.log 文件提供 elastic-agent 组的读取权限将部分修复可视化,但由于 elastic-agent-user 没有读取 /run/user/1000/ 目录中文件的权限,因此仍可能发生错误。

运行 Elastic Agent 并访问 Elastic Agent 仪表板

[Elastic Agent] Integrations 仪表板上,包括 Integration Errors TableEvents per integrationIntegration Errors 在内的可视化缺少数据。

/var/log/system.log 文件提供 elastic-agent 组的读取权限以修复缺失的可视化。

表 3. Windows

操作 无特权模式下的行为 解决方法

运行带有系统集成的 Elastic Agent

日志文件错误:failed to open Windows Event Log channel "Security": Access is denied

elastic-agent-user 用户添加到 Event Log Users 组以修复此错误。

运行带有系统集成的 Elastic Agent

日志文件错误:cannot open new key in the registry in order to enable the performance counters: Access is denied

更新 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PartMgr 注册表的权限以修复此错误。

运行带有系统集成的 Elastic Agent

大多数系统和 Elastic Agent 仪表板可视化都缺少所有数据。

elastic-agent-user 用户添加到 Event Log Users 组,并更新 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PartMgr 注册表的权限以修复缺失的可视化。

请注意,elastic-agent-user 用户可能仍然无法访问所有进程,因此 Top processes by CPU usageTop processes by memory usage 可视化中的列表可能不完整。

运行带有系统集成的 Elastic Agent

[Metrics System] Host overview 仪表板上,Disk usage 可视化缺少数据。

发生这种情况是因为对磁盘或卷的直接访问受到限制,并且没有管理权限的用户无法访问。有关详细信息,请参阅 Microsoft 文档中的以特殊权限运行

使用 Elastic 集成

编辑

大多数 Elastic 集成都支持在无特权模式下运行 Elastic Agent。对于例外情况,任何需要 Elastic Agent 具有 root 权限的集成都会在 Kibana 中集成页面的顶部指示要求。

Elastic Defend integration page showing root requirement

此外,如果您尝试将需要 root 权限的集成添加到已注册无特权模式的 Agent 的 Elastic Agent 策略中,则会在 Kibana 中显示警告。

Warning indicating that root privileged agent is required for an integration

以下是需要 Elastic Agent 具有管理权限的集成示例:

查看 Elastic Agent 特权模式

编辑

Agent 详细信息页面会显示任何正在运行的 Elastic Agent 的特权模式。

要查看 Elastic Agent 的状态:

  1. 在 Fleet 中,打开Agents标签页。
  2. 选择一个 Agent,然后在操作菜单中单击 View agent
  3. Agent 详细信息选项卡会显示 Agent 是否在 privilegedunprivileged 模式下运行。

    Agent details tab showing the agent is running as non-root

此外,对于任何 Elastic Agent 策略,您都可以查看当前在特权或无特权模式下运行的 Agent 的数量

  1. 在 Fleet 中,打开Agent policies标签页。
  2. 单击 Agent 策略以查看策略详细信息。

将显示使用该策略注册的 Agent 数量。将鼠标悬停在该链接上可查看特权和无特权 Agent 的数量。

Agent policy tab showing 1 unprivileged agent and 0 privileged enrolled agents

如果 Elastic Agent 策略安装了需要 root 权限的集成,但有 Agent 在没有 root 权限的情况下运行,则会在工具提示中显示此情况。

Agent policy tab showing 1 unprivileged agent and 0 privileged enrolled agents

更改 Elastic Agent 的特权模式

编辑

对于任何已安装的 Elastic Agent,您都可以通过运行 privilegedunprivileged 子命令来更改其运行模式。

将模式从特权更改为无特权

sudo elastic-agent unprivileged

请注意,如果 Agent 当前已注册包含需要管理访问权限(例如 Elastic Defend 集成)的集成的策略,则会阻止更改为 unprivileged 模式。

将模式从非特权更改为特权

sudo elastic-agent privileged

当代理以 非特权 模式运行时,如果它没有读取数据源的正确权限级别,您还可以通过将 elastic-agent-user 添加到具有读取数据源权限的用户组来调整代理的权限。

作为背景,当您以 非特权 模式运行 Elastic Agent 时,会在主机上创建一个用户和一个组。所有操作系统都使用相同的名称。

  • elastic-agent-user: 创建的用户,Elastic Agent 服务将以该用户身份运行。
  • elastic-agent: 创建的组。此组中的任何用户都可以通过控制协议控制和与 Elastic Agent 守护进程通信。

例如

  1. 当您使用 --unprivileged 设置安装 Elastic Agent 时,将自动创建 elastic-agent-user 用户和 elastic-agent 组。
  2. 如果您希望您的用户 myuser 能够运行 Elastic Agent 命令(例如 elastic-agent status),请将 myuser 用户添加到 elastic-agent 组。
  3. 然后,一旦添加到组中,elastic-agent status 命令将起作用。在此之前,运行该命令的用户 myuser 将导致权限错误,该错误表明与控制套接字通信时出现问题。