First-time setup
After the server is running (single host or
Kubernetes), set up each organization (tenant) in this order.
The commands use yarma-api; on a single host prefix them with
docker compose exec api /yarma-api -config-dir /etc/yarma, on Kubernetes with
kubectl -n yarma exec deploy/yarma-api -- /yarma-api -config-dir /etc/yarma.
Where things are in the console. The left menu holds day-to-day work, grouped as Support (sessions), Endpoints (Devices, Monitoring, Patching), Software & automation (Software catalog, Software Center, Automation) and Insights (Reports, Audit log). Organization configuration lives under Administration → Settings, grouped as Organization (Users and roles, Sign-in and identity), Devices (Enrollment, Unattended access) and Subscription (License); My account is there too. Each person sees only what their roles allow; breadcrumbs at the top show where you are.
1. Organization and first administrator
YARMA_BOOTSTRAP_ADMIN_PASSWORD='<password>' yarma-api bootstrap \
-tenant acme -name "Acme Corp" -admin-email [email protected]
This creates the tenant acme and a GlobalAdmin. Run it again with another -tenant for
each additional organization. Users sign in at the console by entering the organization
slug. Without YARMA_BOOTSTRAP_ADMIN_PASSWORD, a password is generated and printed once.
2. Sign-in
Local accounts (default when no identity provider is configured): passwords plus optional authenticator-app MFA, which each user enables under their account (user menu). Enable it at least for every administrator. Add people in Settings → Users and roles with an initial password that you give them; they can change it themselves.
Identity provider (recommended): in Settings → Sign-in and identity add an OIDC, SAML 2.0 or LDAP / Active Directory provider. Register YARMA at the provider with:
| Protocol | Value to give the provider |
|---|---|
| OIDC | redirect URI https://yarma.example.com/api/v1/auth/callback; scopes openid email profile |
| SAML 2.0 | ACS URL and SP metadata shown in Settings → Sign-in and identity after you add the provider (…/api/v1/auth/saml/acs, …/api/v1/auth/saml/metadata?provider=<id>) |
| LDAP / AD | a read-only bind account; use ldaps:// |
Set the allowed email domains and the default role for self-provisioned users (leave the
role empty to grant nothing until an administrator assigns one). MFA is then enforced by
your provider. For an MSP or any server where tenants are not trusted with your network,
set auth.block_private_directories: true so tenant-configured providers cannot reach
private addresses.
Roles
| Role | Can |
|---|---|
| Viewer | read devices and sessions |
| Tier1 | attended support sessions, chat, file transfer |
| Tier2 | Tier1 plus terminal and elevation |
| DesktopAdmin | workstation administration, software deployment |
| ServerAdmin | server administration and automation |
| SecurityTeam | security posture, audit log, recordings |
| Auditor | read-only audit and reports |
| GlobalAdmin | everything in the tenant |
Role bindings can be scoped to a site, department, region or device group. Every denial is written to the audit log.
Managing users
Settings → Users and roles (GlobalAdmin) lists everyone with access, how they sign in, their roles, MFA status, last sign-in and whether they are active, locked or disabled. From there you can:
- add a local user, or invite a user who signs in through your identity provider (the account is claimed at their first sign-in);
- change roles, each optionally limited to a site, department, region or device group (effective immediately);
- rename, disable (signs the user out everywhere) or enable a user;
- for local accounts, set a new temporary password and/or remove the authenticator so the user enrols again — this also clears a lockout.
You cannot disable yourself or change your own roles, and the organization always keeps at
least one active, organization-wide GlobalAdmin. Every change is in the audit log
(user.* actions).
3. License
Devices cannot enroll until the organization has a license. The server trusts only
licenses signed by the key in license.public_key_file
(license.pub, given to init.sh --license-pub or the yarma-license-pub secret).
In Settings → License:
- Activate online: enter the activation key from the License Center
(requires
license.center_url). - Offline or air-gapped activation: download the activation request, take it to the License Center customer portal, and upload the license file you get back.
- Or install a license file directly: paste it in Settings → License, or run
yarma-api license install -tenant acme -file acme.lic.
The self-hosted Community Edition is free for up to 14 devices (registration with a verified email is required); larger fleets buy a paid license in the License Center portal (pricing). After a purchase, press Refresh from License Center in Settings → License (online installations also refresh daily). Running your own license issuer
(for example a fully self-contained installation) works with yarma-license from the server
tarball: yarma-license keygen -out ./keys once, keep license.key offline, give
license.pub to the server, and issue licenses with
yarma-license issue -key ./keys/license.key -org "Acme Corp" -plan community -devices 14.
At 80, 90 and 95 % of the device limit the console warns; at the limit new enrollments are
refused, while enrolled devices keep working.
4. Enrollment
In Settings → Enrollment create a token: how many devices may use it and for how long. Use short-lived, limited tokens for manual installs and a separate token per deployment wave for mass rollouts; revoke a token as soon as its rollout is done. The page then shows a one-line install command per operating system with the token and the agent CA's fingerprint filled in; devices download the agent from your server and trust only that CA. Treat the command like a password while the token is valid. Details and manual installation: agents.
5. Policies and features
| Setting | Where | Default |
|---|---|---|
| Unattended access | Settings → Unattended access (per group / directory group); also needs the device-side setting | off |
| Session recording | per unattended policy | on for new policies |
| Job approval for scripts and automation | Automation page → tenant policy | off |
| Patch rings and maintenance windows | Patching page | none |
| Notification channels (email, Teams, Slack, SMS, webhook, push) | Monitoring page | none; email needs notify.smtp_* |
| Alert rules | Monitoring page | none |
| Scheduled reports | Reports page | none |
| Credential vaults for elevation | server configuration pam.* (privileged access) |
none |
6. Verify
- Audit: sign-ins, enrollments and setting changes appear in the audit log.
yarma-api verifychecks the schema version and every tenant's audit hash chain.- Start an attended session to a test device and confirm that the consent prompt appears on the device. If the session connects but shows no video, check TURN (troubleshooting).
Documentation for Yarma 0.1.0-alpha.4. Something unclear? .