在无管理员权限的情况下运行 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 -u指定备用非 root 用户,而只使用sudo可能会导致错误,因为 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

日志文件错误:意外的文件打开错误:无法打开 /var/log/system.log:打开 /var/log/system.log:权限被拒绝

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

使用系统集成运行 Elastic Agent

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

授予elastic-agent组对/var/log/system.log文件的读取权限以修复缺少的可视化数据。

使用系统集成运行 Elastic Agent

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

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

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

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

要修复可视化数据中缺少的数据,您可以将elastic-agent-user用户添加到系统admin组。请注意,虽然这可以缓解问题,但也为elastic-agent 用户授予了可能超出预期的权限。

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

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

要修复可视化数据中缺少的数据,您可以将elastic-agent-user用户添加到系统admin组。请注意,虽然这可以缓解问题,但也为elastic-agent 用户授予了可能超出预期的权限。

表 2. Linux

操作 无权限模式下的行为 解决方案

使用系统集成运行 Elastic Agent

日志文件错误:[elastic_agent.filebeat][error] 无法在新文件上启动 Harvester:/var/log/auth.log.1,Err:设置 Harvester 失败:Harvester 设置失败。意外的文件打开错误:无法打开 /var/log/auth.log.1:打开 /var/log/auth.log.1:权限被拒绝

要避免此错误,您可以将elastic-agent-user用户添加到adm组。请注意,虽然这可以缓解问题,但也为elastic-agent 用户授予了可能超出预期的权限。

使用系统集成运行 Elastic Agent

日志文件错误:[elastic_agent.metricbeat][error] 无法获取 /run/user/1000/gvfs 的文件系统使用情况:Statfs 系统调用错误:权限被拒绝

要避免此错误,您可以将elastic-agent-user用户添加到adm组。请注意,虽然这可以缓解问题,但也为elastic-agent 用户授予了可能超出预期的权限。

使用系统集成运行 Elastic Agent

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

要修复可视化数据中缺少的数据,您可以将elastic-agent-user用户添加到adm组。请注意,虽然这可以缓解问题,但也为elastic-agent 用户授予了可能超出预期的权限。

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

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

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

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

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

授予elastic-agent组对/var/log/system.log文件的读取权限以修复缺少的可视化数据。

表 3. Windows

操作 无权限模式下的行为 解决方案

使用系统集成运行 Elastic Agent

日志文件错误:无法打开 Windows 事件日志通道“安全”:访问被拒绝

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

使用系统集成运行 Elastic Agent

日志文件错误:无法打开注册表中的新密钥以启用性能计数器:访问被拒绝

更新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 权限的集成添加到其代理在无权限模式下注册的 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,然后单击操作菜单中的查看 Agent
  3. Agent 详情选项卡显示 Agent 是在privileged模式还是unprivileged模式下运行。

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

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

  1. 在 Fleet 中,打开Agent 策略选项卡。
  2. 单击 Agent 策略以查看策略详细信息。

将显示已注册到该策略的 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 子命令来更改其运行模式。

将模式从 privileged 更改为 unprivileged

sudo elastic-agent unprivileged

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

将模式从 unprivileged 更改为 privileged

sudo elastic-agent privileged

当 Agent 以 unprivileged 模式运行时,如果它没有足够的权限读取数据源,您也可以通过将 elastic-agent-user 添加到具有读取数据源权限的用户组来调整 Agent 的权限。

背景信息:当您以 unprivileged 模式运行 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 运行该命令将导致权限错误,表明与控制套接字通信存在问题。