Lawliet LAWLIET
Book a demo

1. Overview and concepts

This guide describes Lawliet 1.5.13.s (the current release). Screens, commands and procedures may change in later versions; the usage guide is updated with each release. Check the version your server runs under Settings > Platform or with ./lawliet version, and see the Releases page for what changed.

What Lawliet is made of, in operator terms, and the four ideas that every later chapter relies on: roles, four-eyes approval, the licence, and the air-gapped operating model.

Read this chapter once before you install. It has no procedures that change anything.


1.1 What runs where#

Lawliet has two parts:

The containers on the server#

ContainerWhat it doesHolds data?
postgresThe main database: users, agents, findings, compliance history, evidence, audit trailYes, volume postgres_data
clickhouseCollected log events (the Logs search)Yes, volume clickhouse_data
redisShort-lived state: rate limits, two-factor attempt counters, cachesYes, volume redis_data (can be lost safely)
backendThe API and every background job (scans, schedules, retention, agent commands)Volume lawliet_agent_artifacts (hosted agent releases), volume lawliet_config (the installation fingerprint)
frontendThe web console pagesNo
nginxHTTPS in front of the console and API (HTTPS mode only)No (reads the certificate from infra/docker/ssl/)
db-backupTakes a daily database dump into ./backups (HTTPS mode only)Writes to ./backups

The real container names start with the Compose project name, which is lawliet unless you chose another one at install time (see Installation): lawliet-postgres, lawliet-backend, and so on.

The two serving modes#

ModeChosen at install asOperators openAgents connect to
HTTPS (tls)Option 1 (recommended)https://<address> (port 443)https://<address> (port 443)
Plain HTTP (direct)Option 2 (lab only)http://<address>:3000, and the browser also calls port 8000http://<address>:8000

A plain-HTTP install can be moved to HTTPS later with sudo ./lawliet tls on, and an HTTPS install can be switched to plain HTTP with sudo ./lawliet tls off. Agents keep working in both directions. See TLS and certificates.

How agents talk to the server#

Agents are pull-only. Nothing ever connects to an agent.

Every command the server sends is signed. The agent refuses a command that is more than 10 minutes old or more than 60 seconds in the future. This is why clocks matter: a host whose clock has drifted refuses every command while still looking online. Run NTP on the server and on every agent host.

What the server reaches out to#

Nothing, unless you configure it. The shipped server makes no outbound connection at all: no licence check-in, no update check, no telemetry. Optional features that do reach out are listed in Security hardening of the server, and each is off until an operator configures it.


1.2 Roles and permissions#

Every console user has exactly one role. A role is a named set of permissions. You can add grants (extra permissions) and denials (removed permissions) for one user; a denial always wins.

Roles are managed under Settings > Access control, users under Settings > Users. The full procedures are in Users, roles and approvals.

The built-in roles#

RoleHoldsTypical use
Super administratorEvery permission. Cannot be edited or deletedThe break-glass account created by ./lawliet install. Keep it sealed for recovery
Left security officer (LSO)Every permissionFull administrator whose critical actions are approved by the RSO
Right security officer (RSO)Every permissionFull administrator whose critical actions are approved by the LSO
AdministratorEvery permissionFull administration on a site that does not use four-eyes pairs
AnalystEvery view permission except the audit trail and the user list, plus: run compliance scans, triage findings, run forensics, work the review queue, manage evidence, manage honeypotsDay-to-day investigation
AuditorEvery view permission, including the audit trail and the user listReads everything, changes nothing
ViewerEvery view permission except the audit trail and the user listRead-only operational screens

The permissions#

Permissions are grouped as the role editor shows them.

GroupPermissions
OverviewView the overview
FleetView agents, Manage agents, Delete agents, Publish agent releases, Manage deployment credentials, Deploy agents remotely
ComplianceView compliance, Run scans, Manage compliance, View hardening, Run hardening, View evidence, Manage evidence, Delete evidence, Manage reports
InvestigationView findings, Triage findings, View forensics, Run forensics, View active defence, Execute containment, View honeypots, Manage honeypots, View the review queue, Work the review queue, Manage playbooks
LogsSearch logs, Manage log sources, Manage detection rules, Manage SIEM forwarding
NetworkView network, Manage network, View firewall, Manage firewall, Push firewall policy, View DLP, Manage DLP, View FIM, Manage FIM, View assets, Manage assets, Write to Active Directory
AdministrationView users, Manage users, Manage roles, Approve critical actions, Configure dual control, View the audit trail, Manage API keys, Manage the licence, Manage platform updates, Manage settings, Manage demo data

Rules that always apply:


1.3 Four-eyes approval (dual control)#

Some actions are critical. While dual control is on, a request to perform a critical action does not run at once. It is held until a second person with the right to approve it signs it off. Then the person who asked runs it.

The critical actions#

Critical actionNeeds approval by default
Change usersYes
Change rolesYes
Change the dual-control policyAlways (cannot be turned off while dual control is on)
Run a containment actionYes
Execute remediationYes
Push a firewall policyYes
Delete an agentYes
Change the licenceYes
Stage a platform updateYes
Change API keysYes
Publish an agent releaseYes
Deploy agents remotely (also a connection test, weakening how a WinRM credential checks the host, and making an offline agent package)Yes
Write to Active DirectoryYes
Change SIEM forwardingNo
Clear or seed demo dataNo

The defaults of a fresh install: dual control is on, Super administrators act alone is off, a reason is required, a pending request expires after 60 minutes without a decision, and an approved request must be executed within 15 minutes.

The flow, in short#

  1. The requester makes the change in the console as usual and, when asked, types a reason.
  2. The console says the request was sent for approval. Nothing has changed yet.
  3. An approver opens Approvals > Waiting for me, reads the request and presses Approve or Reject (a rejection needs a comment).
  4. The requester opens Approvals > My requests and presses Execute now within the execution window. The action runs once.

What makes it a control:

The first day: one approver#

A fresh install has one account. Nobody can approve their own request, so until a second approver exists every critical action of an approver runs on that one signature. Each such action is written to the audit trail as dual_control_bypassed with reason no_second_approver, and every console page shows the banner Four-eyes is inactive until a second approver exists.

The banner disappears as soon as a pair of approvers exists who can approve each other's user and policy changes: a second Super administrator, or an LSO and an RSO. Creating that pair is the last step of Installation.

What four-eyes does not cover#

./lawliet on the server runs as root (or as a member of the docker group, which is equivalent). It can read the database and .env, so console approvals do not apply to it: installing a licence with ./lawliet licence, building an offline agent package with ./lawliet agent-package, or resetting the administrator password with ./lawliet passwd needs no second signature. Shell access to the server is therefore the most privileged access there is. Limit it to the people who would hold the Super administrator account. See Security hardening of the server.


1.4 The licence#

Where you see it:

WhereWhat it shows
./lawliet licenceType, organisation, expiry and days left, issue date, whether it is bound to this installation, where it was loaded from, the installation fingerprint
Settings > Platform, panel LicenseStatus, agent seats in use, expiry, the modules in this build, the installation fingerprint and the request text for your vendor
The activation screenShown after sign-in while no valid licence is active

How to install a licence: Installation, step 2.10.


1.5 The air-gapped operating model#

Lawliet is built to run on a network with no route to the internet.

TaskHow it reaches the server
InstallThe bundle (.tar.gz) carries every container image. Nothing is downloaded or built
LicenceYou read the fingerprint on the server, send it out by whatever channel you use, and bring the key back as a small text file
UpdatesA new bundle, or a smaller delta, carried in on media and applied with ./lawliet update. The console can also take the file by upload (Settings > Platform > Install from a file)
Agent installationAgents download their installer from your server, or come on media as an offline package
Agent upgradesAgent releases are hosted on your server; agents fetch them over their normal connection
Support./lawliet diag writes one redacted archive you can carry out and send to the vendor
TimeUse an internal NTP source. Without one, set clocks by hand and check them regularly

What crosses the boundary, and in which direction:

Out of your siteInto your site
The installation fingerprint (identifies the installation, nothing else)The bundle and its .sha256 file
Optionally, a diagnostics archive from ./lawliet diag (redacted, checked for secrets before it is written)The licence key file
Updates and deltas

1.6 Words used in this guide#

WordMeaning
BundleThe release archive, lawliet-docker-<version>-<customer>.tar.gz. Unpacked, it is the installation directory
Installation directoryThe directory you run ./lawliet from, for example /opt/lawliet-1.5.13.s. An update creates a new one beside it
.envThe configuration file in the installation directory: secrets, addresses, settings. Mode 600
.lawliet.confThe deployment choices ./lawliet records (mode, address, TLS state, rollback record). No secrets
Enrolment secretThe token agents use once, to register. Each agent then has its own token
Build idA 16-character id that names exactly one build. Quote it to support. ./lawliet status shows it
Four-eyes, dual controlThe same thing: a second person signs a critical action before it runs
DeltaA smaller update that carries only what changed since the build you have installed