OS users and groups

This page describes the operating system users and groups that Deephaven Enterprise uses to run its services. These accounts enforce separation of privileges between administrative, data-writing, and data-reading processes.

All user and group names are configurable via cluster.cnf during installation. The installer creates any missing accounts automatically.

Overview

Deephaven uses a layered approach to OS-level security:

  • Three primary service accounts run different classes of Deephaven processes, each with distinct filesystem permissions.
  • Two shared groups enable controlled file sharing between service accounts and, optionally, end users.
  • Three private groups provide per-account isolation when needed.
  • Infrastructure accounts run supporting services like Monit and Etcd.
  • An installer service account handles installation and maintenance via SSH.

Primary service accounts

These three accounts run all Deephaven services. Each is designed with specific access levels to enforce the principle of least privilege.

DH_ADMIN_USER

SettingDefault value
DH_ADMIN_USERirisadmin

The administrative service account runs privileged services that manage the Deephaven cluster:

Security considerations:

  • This account has access to cluster secrets, including TLS private keys and authentication configuration.
  • Restrict access to this account to trusted system administrators only.
  • Never allow user code execution as DH_ADMIN_USER.

Sudoers requirements:

Both DH_SSH_USER and DH_MONIT_USER must be able to run commands as DH_ADMIN_USER:DH_ADMIN_GROUP.

DH_MERGE_USER

SettingDefault value
DH_MERGE_USERdbmerge

The merge service account runs processes with write access to historical table data:

  • Merge dispatchers (read-write Remote Query Dispatchers)
  • Batch import processes (CSV, JDBC, Parquet importers)
  • Any Persistent Query or worker that must write to /db/Systems/ or /db/Namespace/ locations

Security considerations:

  • This account can modify or delete historical data.
  • Restrict Deephaven user access to trusted users who are members of iris-data* ACL special groups.
  • Never set DH_MERGE_USER equal to DH_ADMIN_USER or DH_MONIT_USER — doing so would grant administrative privileges to any user allowed to run code on the merge server.

Sudoers requirements:

Both DH_SSH_USER and DH_MONIT_USER must be able to run commands as DH_MERGE_USER:DH_MERGE_GROUP.

DH_QUERY_USER

SettingDefault value
DH_QUERY_USERdbquery

The query service account runs processes with read-only access to table data:

  • Query dispatchers (read-only Remote Query Dispatchers)
  • Interactive console workers
  • Most Persistent Queries that do not require write access to historical data

Security considerations:

  • This account cannot modify historical data, but can access all data readable by DH_SHARED_GROUP.
  • Users may optionally have write access to user tables via Deephaven ACLs.
  • Never set DH_QUERY_USER equal to DH_ADMIN_USER or DH_MONIT_USER.

Sudoers requirements:

Both DH_SSH_USER and DH_MONIT_USER must be able to run commands as DH_QUERY_USER:DH_QUERY_GROUP.

Shared groups

Shared groups enable controlled file sharing between service accounts.

DH_SHARED_GROUP

SettingDefault value
DH_SHARED_GROUPdbmergegrp

The primary shared group for all Deephaven service accounts. All three primary service accounts (DH_ADMIN_USER, DH_MERGE_USER, and DH_QUERY_USER) have this as their primary group.

Purpose:

  • Files created by any Deephaven service are group-owned by DH_SHARED_GROUP, making them accessible to all Deephaven processes.
  • Directories under /db/ (historical data, intraday data, system tables) typically have group ownership of DH_SHARED_GROUP.
  • Enables merge processes to write data that query processes can read.

Group membership:

UserPrimary groupNotes
DH_ADMIN_USERDH_SHARED_GROUPAdministrative access
DH_MERGE_USERDH_SHARED_GROUPWrite access
DH_QUERY_USERDH_SHARED_GROUPRead access

DH_SHARED_QUERY_GROUP

SettingDefault value
DH_SHARED_QUERY_GROUPdbquerygrp

A secondary shared group for broader access to Deephaven resources. This group allows non-service-account OS users to run Deephaven workers and access shared resources.

Purpose:

  • Enables per-user workers — OS users outside the three primary service accounts can start Deephaven sessions.
  • Files that should be accessible to all Deephaven users (including end users running their own workers) can be group-owned by DH_SHARED_QUERY_GROUP.

Group membership:

All three primary service accounts have secondary membership in DH_SHARED_QUERY_GROUP. You may add additional OS users to this group to grant them the ability to run Deephaven workers.

Private groups

Each primary service account has a private group for files that should only be accessible to that specific account.

DH_ADMIN_GROUP

SettingDefault value
DH_ADMIN_GROUPirisadmin

The private group for DH_ADMIN_USER. Used for files that only administrative processes should access, such as:

  • TLS private keys
  • Authentication secrets
  • Etcd client credentials

Important

Despite its name, DH_ADMIN_GROUP is NOT the primary group for DH_ADMIN_USER. The primary group is DH_SHARED_GROUP (dbmergegrp). The DH_ADMIN_GROUP is a secondary/private group.

DH_MERGE_GROUP

SettingDefault value
DH_MERGE_GROUPdbmerge

The private group for DH_MERGE_USER. Processes run with DH_SHARED_GROUP as the effective group, so files created by merge processes are accessible to other Deephaven services.

DH_QUERY_GROUP

SettingDefault value
DH_QUERY_GROUPdbquery

The private group for DH_QUERY_USER. Similar to DH_MERGE_GROUP, this exists primarily for account isolation rather than file ownership.

Infrastructure accounts

DH_MONIT_USER and DH_MONIT_GROUP

SettingDefault value
DH_MONIT_USERirisadmin
DH_MONIT_GROUPirisadmin

Note

For native installations, the Monit process manager starts and monitors all Deephaven services.

The Monit account runs the Monit process manager, which is responsible for:

  • Starting Deephaven services at system boot
  • Monitoring service health
  • Restarting failed services automatically

Sudoers requirements:

DH_MONIT_USER must be able to sudo as all three primary service accounts:

  • DH_ADMIN_USER:DH_ADMIN_GROUP
  • DH_MERGE_USER:DH_MERGE_GROUP
  • DH_QUERY_USER:DH_QUERY_GROUP

By default, DH_MONIT_USER is the same as DH_ADMIN_USER (irisadmin). This simplifies sudoers configuration while maintaining security — Monit itself does not execute user code.

Related settings:

SettingDefault valueDescription
DH_MONIT_RCOS-dependentPath to the monit configuration file
DH_MONIT_ROOTfalseWhether monit runs as the root user
DH_MONIT_LOG_DIR/var/log/deephaven/monitDirectory for monit log files

DH_ETCD_USER

SettingDefault value
DH_ETCD_USERetcd

The account that runs the Etcd service on native installations. Etcd stores all cluster configuration, ACLs, and runtime state.

File ownership:

  • Etcd server secrets: /etc/etcd/dh and /var/lib/etcd are owned by DH_ETCD_USER
  • Etcd client secrets: owned by DH_ADMIN_USER, with group access via DH_ADMIN_GROUP

Tip

Setting DH_ETCD_USER to the same username as DH_ADMIN_USER simplifies file permissions and sudoers rules, but increases risk if DH_ADMIN_USER is compromised.

Installer service account

DH_SSH_USER

SettingDefault value
DH_SSH_USER(current user running the installer)

The service account used by the installer for SSH access to Deephaven servers during installation and maintenance. This account:

  • Copies installation files to remote machines
  • Runs installation scripts via SSH
  • Must have sudoers permission to act as all primary service accounts

Security considerations:

  • DH_SSH_USER is not used after installation completes — it only performs installation and upgrade tasks.
  • Consider using a dedicated service account rather than a personal user account.
  • SSH keys for this account should be carefully protected.

Sudoers requirements:

DH_SSH_USER must be able to sudo as:

  • DH_ADMIN_USER:DH_ADMIN_GROUP
  • DH_MERGE_USER:DH_MERGE_GROUP
  • DH_QUERY_USER:DH_QUERY_GROUP
  • DH_MONIT_USER:DH_MONIT_GROUP (if different from DH_ADMIN_USER)

Related settings:

SettingDescription
DH_SSH_KEYPath to the SSH private key for installation
DH_LAX_SSHBypass SSH host key verification (not recommended)

Group membership summary

The following table summarizes group membership for all service accounts:

AccountPrimary groupSecondary groups
DH_ADMIN_USERDH_SHARED_GROUPDH_ADMIN_GROUP, DH_SHARED_QUERY_GROUP
DH_MERGE_USERDH_SHARED_GROUPDH_MERGE_GROUP, DH_SHARED_QUERY_GROUP
DH_QUERY_USERDH_SHARED_GROUPDH_QUERY_GROUP, DH_SHARED_QUERY_GROUP
DH_MONIT_USERDH_MONIT_GROUP(requires sudo access to all three primary accounts)
DH_ETCD_USERDH_ADMIN_GROUP(Etcd-specific, shares some files with DH_ADMIN_USER)

To verify group membership for any account, run:

Customizing user and group names

All user and group names can be customized in your cluster.cnf file before installation. See Custom user accounts for the complete list of configurable variables.

Example custom configuration:

Caution

Changing user or group names after installation is an advanced operation that requires careful migration of file ownership and permissions. Contact Deephaven support for guidance.