Skip to main content
By default the VM Agent runs as the unprivileged odigos user, not as root. It still needs a small, fixed set of Linux capabilities, and — depending on which sources you instrument — membership in a few host groups. This page covers what is granted out of the box, why, and how to change it.
Root-mode installs (ODIGOS_AGENT_USER_MODE=root) already have every privilege. Skip this page unless you are tightening a non-root install or switching a host to non-root. See Installation.

Linux capabilities

The packaged drop-in /etc/systemd/system/odigos-vmagent.service.d/nonroot.conf grants the same capability set on every distribution that can run non-root.
Ambient capabilities are inherited by child processes, so they also cover odigos-otelcol when the non-root agent runs it as a child.
The installer does not pick capabilities from kernel.perf_event_paranoid, and it never assigns CAP_BPF, CAP_PERFMON, or CAP_CHECKPOINT_RESTORE.
Provisioning /var/exchange still needs root. The drop-in handles that with ExecStartPre=+/usr/bin/install ... (the + prefix runs that line as root regardless of User=odigos).

Why CAP_SYS_ADMIN on every distro

The capability list does not change between RHEL and Debian. CAP_SYS_ADMIN is always included because the narrower bits are not enough on the kernels and sysctl defaults these distributions ship:
Inspect what the helper decided on this host:

Override, add, or remove capabilities

Modifying Linux capabilities may impair or break VM Agent functionality. Alter these settings at your own risk or under the guidance of Odigos Support.
systemd merges AmbientCapabilities= and CapabilityBoundingSet= across drop-in files. A later drop-in can add capabilities; it cannot remove one that nonroot.conf already listed. To drop or replace capabilities, edit the packaged drop-in itself.
1

Edit the packaged drop-in

Change AmbientCapabilities= and CapabilityBoundingSet= together so they stay in sync. To remove a capability, delete it from both lines. To add one, append it to both lines — or, if you only want to add, create a later drop-in instead:
2

Stop the package from overwriting your edit

Package upgrades re-render nonroot.conf only while its first line is:
Replace that header with your own comment (for example # Operator-managed capabilities) so the next upgrade leaves the file alone.
3

Restore the SELinux label (RHEL, Rocky, Fedora)

Skip this on Debian and Ubuntu. A drop-in edited by hand can receive the wrong SELinux label, and systemd will refuse to read it:
4

Reload systemd and restart the agent

To restore the packaged set after experimenting, put the managed header back and run:
Dropping a capability does not prevent the agent from starting. The matching feature is disabled or degraded, and the agent logs which capability was missing at startup.

Additional permissions

A non-root agent needs extra host rights to instrument and restart some sources. Root-mode installs do not need these steps.

Docker containers

Instrumenting and controlling Docker sources requires access to /var/run/docker.sock. That socket is owned by root:docker. The package adds the odigos user to the docker group when the group already exists. If Docker was installed after the agent, or the group was missing at install time, add it yourself:
Group membership is applied when the process starts. usermod alone is not enough — restart odigos-vmagent so it picks up the new supplementary groups.
If the docker group does not exist yet:
Confirm:
Without this group, Docker discovery fails with EACCES on the socket: the agent cannot list containers, instrument them, or restart them.

systemd services

Instrumenting a systemd source writes a unit drop-in (CAP_DAC_OVERRIDE covers the write) and then asks systemd over D-Bus to daemon-reload and restart the unit. systemd asks polkit for that. A system service has no interactive session, so without a polkit rule those calls fail with:
The package does not install a polkit rule. Until you add one, a non-root agent cannot complete systemd instrumentation on its own. Docker and plain-process sources are unaffected. Choose one of the following:
Check which polkit your host uses. RHEL 8+, Rocky, Fedora, Debian 12+, and Ubuntu 24.04 load JavaScript rules from /etc/polkit-1/rules.d/. Debian 11 and Ubuntu 20.04 / 22.04 still use .pkla files.
Create /etc/polkit-1/rules.d/49-odigos-vmagent.rules owned by root:root, mode 0644:
The rule lets the odigos user reload systemd and start, stop, or restart units. Narrow the verb list further if your policy requires it. .pkla files cannot filter by verb; they grant the whole action.
This grants the odigos user the ability to restart any systemd unit, not only Odigos-managed sources. Scope or omit the rule if that is not acceptable, and use one of the alternatives instead.

journald permissions

When a destination includes the LOGS signal, the collector reads systemd source logs from the journal (a shared journald receiver). A non-root odigos user cannot read the journal unless it is in a group that journald allows. Add odigos to an appropriate group below based on your Linux Distribution, then restart the agent:
Members of adm or systemd-journal can read the systemd journal:
This is only required for LOGS on systemd sources. Process log files and Docker container logs do not use the journal.
The odictl Logs panel shows logs for the agent and collector units themselves. That is separate from application logs exported to your destination, and does not require these groups.

Processes

No extra group or polkit rule is required. The capabilities in Linux capabilities are enough to discover and instrument host processes, including restart-based instrumentation where the agent starts the process itself. Process log files are found via the process file descriptors; they do not use the systemd journal.