Back Original

Show HN: Bor – Open-source policy management for Linux desktops

Bor v0.8.0 is out. This release adds three new policy types — Thunderbird, Microsoft Edge for Business, and Firewalld zones — alongside a full web UI overhaul, finer-grained RBAC, and a dedicated security hardening pass. The complete changelog is on the GitHub release page.

The Policies list in v0.8.0 — Thunderbird, Edge, and Firewalld join Firefox, Chrome, Package, and dconf

Thunderbird policy type

Mozilla Thunderbird can now be managed on enrolled desktops with the same mechanism used for Firefox ESR. The agent writes the managed policies.json that Thunderbird expects, merged from all bound policies, and removing the last policy restores the original file. Flatpak installations are detected and enforced alongside RPM/DEB installations, and the managed file is protected by the tamper watcher — external edits are detected and immediately restored. The web UI ships a full policy editor with the complete Thunderbird policy catalogue.

Thunderbird policy in the tree editor — privacy, security, add-ons, and more

Microsoft Edge for Business policy type

For fleets running Edge on Linux, the agent writes bor_managed.json into each Edge managed-policy directory and cleans it up from every directory when the last bound policy is removed. The web UI provides a tree-based editor with the Edge policy catalogue, JSON validation, and a setting preview before enabling.

Microsoft Edge policy — a released kiosk baseline in the read-only Configuration view

Firewalld zone policy type

The new Firewalld policy type manages firewalld zones on enrolled nodes: services, ports, forward ports, rich rules, masquerade, interfaces, sources, and the zone target. The agent writes zone XML to /etc/firewalld/zones/, validates it with firewall-cmd --check-config, and reloads firewalld. Like all other managed files, the zone files are tamper-protected.

Firewalld zone policy — target zone, allowed services, and ports

Polkit: variable conditions

Polkit rules now support variable conditions via action.lookup(), so a rule can match on action variables — for example allowing mounts only for removable drives. Also fixed: multiple action IDs in one rule are now correctly joined with ||.

Polkit rule with an action.lookup() variable condition — drive_removable == true

Per-action RBAC

User and role administration is now guarded by per-action permissions instead of a single blanket permission, allowing finer-grained delegation of admin duties.

Web UI overhaul

A full modernization pass over the PatternFly 6 interface, spanning several UX sprints. The dashboard shows the new look — grouped sidebar navigation, a single left-aligned page title, and stat tiles that drill down to pre-filtered lists: click Offline and you land on the Nodes page already filtered to offline nodes.

The redesigned dashboard with drill-down stat tiles and grouped sidebar navigation

The highlights:

The policy editor is now a routed, full-width page instead of stacked modals, with room for the tree-based editors behind each policy type:

The full-page policy editor

Node and compliance lists are paginated, filtered, and sorted server-side, so fleets with thousands of nodes stay fast:

The Nodes list with server-side pagination and searchable filter dropdowns

Plus many quality-of-life changes: policies can be released/unreleased directly from the list view, backup codes for MFA can be copied or downloaded, the login form gained a password reveal toggle and Caps Lock hint, and the sidebar is now grouped into Fleet / Policy / System.

The password step of the redesigned two-step login — reveal toggle and live Caps Lock warning

Proto-driven policy catalogues

The Firefox, Thunderbird, Chrome, and Edge policy catalogues shown in the web UI are now generated from protobuf annotations — one source of truth shared by the server, agent, and frontend.

Security hardening

This release includes a dedicated hardening pass:

Audit logs — every login, policy change, and admin action, exportable as injection-safe CSV or JSON

Platform updates

The frontend moved to React 19.2 and react-router 8.3, with TypeScript typecheck now enforced in CI. Server and agent dependencies were bumped, including gRPC 1.82.1 and golang.org/x/crypto 0.52.0.

Upgrade notes

Download

Packages for Debian/Ubuntu, RHEL/Fedora/SUSE, Alpine Linux, and Arch Linux across x86_64, aarch64, and ppc64le are available on the Download page.