Users & groups
Users and groups are the identity layer of Taranac. A user is an account; a group bundles users together and carries the policy-relevant attributes. Together they answer the WHO dimension of every AAA decision: when a TACACS+ or RADIUS request arrives, Taranac matches the authenticated identity (and the groups it belongs to) against your AAA policy rules. The same accounts and groups also govern who can sign in to the Taranac admin UI, and what they are allowed to do there.
Identities come from one of two sources. Local users live entirely in Taranac and are managed on these pages. Directory users (auth_source = ldap) are mirrored in from a directory — Active Directory, OpenLDAP, FreeIPA or another LDAP server — by the sync engine; they appear in the same lists but are largely read-only here. This page covers local accounts and group membership; for directory-sourced identities see LDAP directories.
- Network Admins RBAC
- NOC RBAC MFA
- Auditors admin group
Key concepts
Section titled “Key concepts”| Term | What it means |
|---|---|
| User | An individual account. Has a username (unique among local users, case-insensitively — Admin and admin collide), an email, optional name/phone, and — for local users — a password. |
| Group | A named collection of users. Carries the attributes that actually drive access: an RBAC model, an admin flag, an MFA requirement, a web-console access mode, and a TACACS+ enable policy. |
| Membership | The many-to-many link between users and groups. A user can be in any number of groups; a group can hold any number of users. |
| Auth source | local (managed here) or ldap (synced from a directory, read-only here). |
| Web console access | Per-group, three-state control (system default / allow / deny) over whether members may sign in to the Taranac management UI at all. See Web console access. |
| Enable mode | Per-user / per-group control over the TACACS+ enable (privilege-escalation) password. |
| Validity period | Optional start/end dates that make a local account valid only within a window. |
A user has no role of its own. Permissions, admin rights, and MFA enforcement are all derived from the groups the user belongs to. An account in no groups can still authenticate to network devices through AAA policy, but has no access to the admin UI.
Managing users
Section titled “Managing users”Open Infrastructure → Identity → Users. The list is searchable, filterable, and sortable, with columns for username, email, name, groups, status, locked state, source, validity, last login, and Used by (how many objects reference the account — see Deleting). Filters cover status (active/inactive), locked, source (local/ldap), and validity (valid / expired / pending). Search matches a substring, case-insensitively, across username, email and names.
The Users list — group badges, status, source and validity at a glance.
Creating a user
Section titled “Creating a user”Click New and fill in the form:
| Field | Notes |
|---|---|
| Username | Required, immutable after creation. Max 150 characters. Unique among local users, case-insensitively — creating Admin when admin already exists is rejected. |
| Required. Not unique — several accounts may share an address. Used for the welcome email and password links. | |
| First / last name, phone | Optional. |
| Password | Pre-filled with a policy-compliant 16-character generated value, shown in plain text with Copy and Generate buttons. Copy it before saving if you intend to hand it over in person. |
| Language | UI language for this user (default en). |
| Active | On by default. |
| Must change password | On by default — forces a change at first login. Since 1.2.0 it is enforced on the data plane too: a local account carrying the flag is denied TACACS+, RADIUS and NAC sign-in until the password is changed, not only blocked in the web UI. (Directory accounts are unaffected — their password state belongs to the directory.) |
| Enable password | TACACS+ privilege escalation; see Enable password. |
| Account validity | Optional start/end window; see Validity periods. |
| Groups | Add the user to one or more groups inline. |
Passwords are validated against the password policy, hashed with argon2id, and recorded in password history. Since 1.2.0 the policy lives in the backend and is applied identically everywhere a password is set or changed — the admin form, the welcome/reset links, and every login path — rather than being duplicated per screen. You edit it under System → Authentication & Sessions; it ships as minimum 12 characters requiring an upper-case letter, a lower-case letter, a digit and a special character, with password expiry at 90 days, the last 5 passwords remembered, and an expiry warning 14 days ahead. A rejected password comes back with every rule it violated, listed individually.
For local users Taranac also derives an NT password hash, which is what RADIUS MS-CHAP / PEAP MSCHAPv2 authentication needs — so a local user can be used for 802.1X without any extra step. Directory users have no NT hash stored in Taranac; the MS-CHAPv2 verifier for them comes from the directory itself (a domain controller for Active Directory, or ipaNTHash read at login for FreeIPA — see LDAP directories).
Editing, locking, deleting
Section titled “Editing, locking, deleting”In edit mode the page shows the form alongside read-only metadata, MFA status, and linked PKI certificates.
- Change password is a collapsible section — leave it empty to keep the current password.
- Lock / Unlock is independent of the active flag: a locked account fails authentication even while active. Unlocking also resets the failed-login counter. Repeated automatic failures can auto-lock an account until a timeout passes; a manual lock stays until an admin unlocks it.
- Delete is blocked for your own account and for directory users. It is also blocked while the account is referenced — by an AAA policy rule, an NCM just-in-time credential, an active lease — and the refusal itemises what is holding it rather than cascading silently (see References — “where used”). Once it goes through, deleting a user automatically revokes their active PKI user certificates and detaches any device certificates that were linked to them.
Managing groups
Section titled “Managing groups”Open Infrastructure → Identity → Groups. Columns show name, source, the Admin and MFA flags, Web login (the resolved console-access answer — see Web console access), the member count (click it to preview members), Used by, and the creation date.
The Groups list — admin and MFA flags are the levers that matter.
When you create or edit a group you set:
| Field | Effect |
|---|---|
| Name | Required, unique. Disabled for directory groups. |
| Description | Free text. Disabled for directory groups. |
| RBAC model | The permission set granted to every member for the admin UI / API. Blank = no permissions. See Roles & permissions. |
| Admin group | When on, members bypass all RBAC checks and get full system access. Flipping it — in either direction — requires administrator rights. |
| Require MFA | When on, every member must complete MFA at login, overriding their personal and the system-default MFA setting. See Multi-factor (MFA). |
| Web console access | System default / Allow / Deny — whether members may sign in to the Taranac management UI. Administrator-only, in either direction. See Web console access. |
| Enable password | Group-level TACACS+ enable policy that members can inherit; see below. |
Three of those fields are administrator-only, not merely groups.edit: the RBAC model, the admin flag, and (since 1.2.8) web console access. Each rewrites what every member of the group can reach, so a plain edit permission must not confer them — before 1.2.2 anyone who could edit groups could point their own group at a privileged RBAC model and simply log in again. Membership of an admin group is administrator-only for the same reason.
The Members panel lets you add and remove users (changes are saved together with the form). You can also create a brand-new user inline while building a group. Deleting a group is refused while anything still references it, with the references listed (see References — “where used”).
How identity feeds the rest of Taranac
Section titled “How identity feeds the rest of Taranac”Web console access
Section titled “Web console access”A directory synced for the sake of NAC and AAA policy brings in policy subjects, not console operators. An AD Domain Users mirror is thousands of accounts, and every one of them used to be a valid credential pair against the management interface. The only lever that existed was is_active = false — and that is not a console switch at all: the TACACS+ user cache reads the same column (it loads WHERE is_active = true), so switching it off removes the person from AAA as well, from precisely what the directory was synced for.
Since 1.2.8 the decision is made once, for the whole installation. A group carries a three-state Web console access mode (web_login_mode), resolved against an installation-wide default:
| Group mode | Meaning |
|---|---|
System default (inherit) | The group does not decide — the installation default does. Every group nobody has touched is already here. |
Allow (allow) | Members reach the console whatever the default says. |
Deny (deny) | Members are refused whatever the default says. |
The default is the setting auth.web_login_default, edited under System → Authentication & Sessions (/settings/authentication) in the Web Console Access section. It ships as allow, so an upgrade changes nothing about who can log in.
inherit is what makes that default retroactive. Because every untouched group already sits in it, flipping the setting to deny closes the hundred groups already synced and every group the directory creates tomorrow — without a single write to the groups table. A per-group flag could never do that: sync assigns policy only to groups it creates, so a default chosen today would never reach the ninety already there.
Precedence
Section titled “Precedence”Resolved across all of a person’s groups, in this order:
- Any admin group (
is_admins) → allowed. An administrator can never be shut out — otherwise the mode would be a way to lose access to your own installation. - Otherwise any group set to Deny → denied. Explicit beats inherited, and among non-admin groups deny beats allow: membership in one permissive group must not undo a deny inherited from another.
- Otherwise any group set to Allow → allowed. This is what carries the exception in a deny-by-default installation — mark the handful of groups that need the console and never touch the rest.
- Nobody decided → the installation default.
A missing or unreadable setting reads as allow: failing closed would turn a lost settings row into “nobody can sign in”, with no console left to fix it from.
The check runs before the password is verified, and that ordering is the security property rather than an optimisation. Verifying first would still issue the LDAP bind — which is what turns the login form into a password-spraying front end for your directory, with wrong guesses reaching the DC and feeding its lockout counters. The refusal is the ordinary vague invalid credentials, so the gate cannot be used to ask “does this account exist, and may it use the UI”; the real reason goes to the audit log as USER_LOGIN_FAILED with reason = web_login_denied. The gate is re-checked at the MFA step too, so closing a group takes effect on someone already standing at the factor prompt.
What it closes — and what it does not
Section titled “What it closes — and what it does not”It closes the console, not the account:
- Password reset by email keeps working. It must: the same password authenticates the person over TACACS+ / RADIUS / NAC, and a reset recomputes the NT hash used by PEAP MSCHAPv2 — closing it would take away a denied group’s only way to change its network password. It is not a way in either: a reset issues no session and revokes every refresh token.
- The certificate download link and the MFA setup link keep working — both are public, one-time-token endpoints that never go through login.
- AAA and NAC are unaffected either way. In particular the BYOD captive portal deliberately does not inherit the gate: it shares the same authentication core, and taking someone’s console away must not take their network with it. See Captive portal.
In the UI
Section titled “In the UI”- The Groups list’s Web login column reports the resolved answer, not the stored one, and marks which groups merely inherited it: Allowed for an explicit allow, Denied for a group that chose it, Denied (default) for one sitting on a deny-by-default installation’s setting, and a dash where the group resolves to allow without having said so.
- Moving a group off System default requires administrator rights in either direction — in a deny-by-default installation Allow opens the console just as decisively as Deny closes it.
web_login_modeis deliberately one of the few fields you may set on a directory-synced group. That population is the reason the mode exists.- A group cannot be both an admin group and Deny.
is_adminswins at login, so such a group would say one thing and do another; the combination is refused on save instead of being resolved silently. Allow alongside the admin flag is merely redundant, and is accepted. - On a group set to Deny, the RBAC model picker goes read-only — assigning a role to a group that cannot reach the console is meaningless. The existing assignment stays visible: nothing was deleted, and that has to be something you can see. Switch the access back and the role applies again. A group left on System default keeps its picker editable, since it has not decided anything yet.
Admin UI access (RBAC)
Section titled “Admin UI access (RBAC)”A user’s effective UI/API permissions are resolved through their groups:
User → Groups → Group.rbac_model → permissionsIf the user belongs to any group flagged as an admin group, they get full access and all permission checks are skipped. Otherwise their permissions are the union of every group’s RBAC model. A user with no group — or whose groups have no RBAC model and no admin flag — cannot use the admin UI. MFA enforcement follows the same logic: if any of the user’s groups requires MFA, MFA is mandatory at login.
Permissions are only the second question. Web console access is asked first, before the password is even verified: a user whose groups resolve to deny never reaches the point where an RBAC model would matter.
Network access (AAA — the WHO dimension)
Section titled “Network access (AAA — the WHO dimension)”AAA policy rules match on WHO (users and/or groups), WHERE (devices/device groups), and WHEN. A rule can target specific users, one or more groups, or any identity. At request time Taranac evaluates the authenticated user together with all the groups it belongs to, so adding a user to the right group is usually all it takes to grant device access — no rule edit required. See AAA policy.
Enable password
Section titled “Enable password”For TACACS+ device administration, the enable (privilege escalation) password is resolved through an inheritance chain, with the first explicit (non-inherit) setting winning:
User → Group → TACACS+ profile → Global defaultEach enable_mode can be:
| Mode | Behaviour |
|---|---|
inherit | Fall through to the next level in the chain (the default). |
login_password | Reuse the user’s login password for enable. |
custom | Use a distinct, encrypted enable password set on this object. |
deny | Always refuse enable access. |
If a user is in several groups that each define an enable mode, the most recently updated group wins. Custom enable passwords are stored encrypted; revealing one in the UI is audit-logged.
Validity periods
Section titled “Validity periods”Local accounts can carry an optional valid-from / valid-until window. Outside the window the account is rejected at login, at token refresh, and on every API request — a soft but consistently enforced expiry. Leave a bound empty for “no restriction”. These fields apply to local users only; directory users have no validity window in Taranac.
References — “where used”
Section titled “References — “where used””Since 1.1.0, users and groups are protected by referential integrity rather than by a silent cascade. Both lists carry a Used by column, and both delete flows open a drawer listing exactly what still points at the object — an AAA or NAC policy rule, a credential, a lease. The delete is refused with that itemised list instead of failing opaquely or quietly stripping the reference. Unassign or repoint the references first, then delete.
Common scenarios
Section titled “Common scenarios”- A new network engineer. Create a local user, add them to a “Network Admins” group that has an RBAC model (or the admin flag) plus a TACACS+-friendly enable mode. They can now log in to the UI and administer devices governed by AAA rules that target that group.
- A contractor with an end date. Create a local user and set valid-until to the contract end date. Access stops automatically — no cleanup reminder needed.
- Granting AD users access without recreating them. Let LDAP sync import the AD security group, then set its RBAC model / admin flag here. AD members gain Taranac access on their next login; you never manage their passwords.
- A 802.1X service/user account. A local user automatically has the NT hash needed for MS-CHAP / PEAP, so it can be referenced by NAC and RADIUS flows with no extra configuration.
- Forcing step-up auth for sensitive staff. Turn on Require MFA on the group rather than per user — it overrides individual settings for everyone in it.
- A directory synced only for NAC/AAA policy. Set the installation default under System → Authentication & Sessions to Deny, then set Web console access = Allow on the two or three groups that actually operate Taranac. Every synced group — including the ones the directory creates next month — is closed to the management UI, while TACACS+, RADIUS, NAC and the BYOD portal carry on exactly as before. See Web console access.
When to use what
Section titled “When to use what”| You need… | Use |
|---|---|
| An account managed entirely in Taranac (service accounts, lab, no directory) | Local user |
| Centrally-managed staff identities, single source of truth | Directory (LDAP/AD) users + LDAP sync |
| To grant admin-UI permissions | Assign an RBAC model to a group, or the admin flag for full access |
| To keep a synced directory out of the admin UI without touching AAA | Web console access — the installation default, plus per-group Allow exceptions |
| To grant device (AAA) access | Put the user/group in a matching AAA policy rule’s WHO |
| Privilege escalation on switches/routers | Set enable mode on the user, group, or TACACS+ profile |
| Time-boxed access | Validity period on the local user |
| Mandatory MFA for a team | Require MFA on the group |
Reference — user fields
Section titled “Reference — user fields”| Field | Meaning |
|---|---|
username | Login name; immutable; max 150 characters. Unique case-insensitively (on lower(username)) among local users; a directory user is unique within its own LDAP configuration, so two forests may each hold their own admin. The stored value keeps its original casing for display. |
email | Notification/recovery address; not unique. |
first_name / last_name / display_name / phone | Profile fields; mapped from givenName / sn / displayName / telephoneNumber on directory sync. display_name empty ⇒ the UI composes it from first + last. |
is_active / is_locked | Active flag and lockout state; locking always blocks login. is_active is not a console switch — the TACACS+ user cache reads it too, so clearing it removes the account from AAA as well. To close only the management UI, use Web console access. |
locked_until | When an automatic lockout expires (the next login then auto-unlocks). NULL on a manual lock — permanent until an admin unlocks. |
failed_login_count | Consecutive failures; reset on unlock and on a successful login. Deliberately not incremented by a failed directory bind, since is_locked also gates the AAA data plane. |
must_change_password | Forces a password change at next login — and, for local accounts, denies TACACS+/RADIUS/NAC until it happens. |
lang | Per-user UI language (default en). |
auth_source | local or ldap. |
enable_mode / enable_password | TACACS+ enable behaviour (inherit / login_password / custom / deny). |
valid_from / valid_until | Optional account validity window (local only). |
has_nt_password | Whether an NT hash exists for RADIUS MS-CHAP (local only). |
Reference — group fields
Section titled “Reference — group fields”| Field | Meaning |
|---|---|
name | Unique group name. |
source | local or ldap. |
is_admins | Members bypass all RBAC checks (full access), and are never refused the web console. |
mfa_required | All members must complete MFA at login. |
web_login_mode | Web console access: inherit (resolve against auth.web_login_default), allow, deny. Overridden by is_admins. The API also returns web_login_effective — the resolved answer the group table shows. |
rbac_model | Permission set granted to members for the UI/API. |
enable_mode / enable_password | Group-level TACACS+ enable policy for inheriting members. |
Related
Section titled “Related”- LDAP directories — sync directory users and groups.
- Roles & permissions — what RBAC models actually grant.
- Multi-factor (MFA) — enrollment and enforcement.
- AAA policy — how users and groups feed the WHO dimension.
- Captive portal — the BYOD flow that a console deny deliberately leaves open.
- TACACS+ — enable handling and shell profiles.
- Project repository