Release v0.9.0 #165
eniac111
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
New Features
Session Access Policy Type
A new
SessionAccesspolicy type controls when selected users or groupsmay use a desktop session — for example a school computer lab usable only
during school hours, or a kiosk restricted to business hours.
node-local times and midnight-crossing windows (e.g.
22:00–02:00).the user (default 30/15/5 minutes, the final warning bypassing
do-not-disturb) and then locks the screen (apps keep running) or
logs off the session, per rule. A re-lock watchdog keeps a session
locked outside its allowed hours.
pam_time, optional) — blocks fresh logins outside the allowedhours by managing a marked block in
/etc/security/time.confand enablingpam_timein the account stack. Optionally extends to SSH. The blockencodes the full weekly schedule, so it keeps enforcing even while the
agent is not running.
pam_timeautomatically via
pam-auth-update; on authselect-managed Fedora/RHEL itreports a degraded compliance state with a documented one-time admin step
while Layer 1 still enforces.
rootis never restricted, thetime.confblock iswritten atomically with a self-check and is tamper-protected, and unbinding
the policy removes all PAM artifacts fail-open.
window builder, lock/log-off selection, warning thresholds, the PAM and SSH
switches, and a node-requirements info box.
Known limitation, by design: on GNOME and KDE the screen unlock is enforced
by the Layer-1 watchdog, not PAM — the desktop lockers do not honour the PAM
account phase on unlock. Use the Log off end action with PAM for the
strictest restriction. See
docs/session-access.mdfor full behaviour, thenode requirements, and break-glass recovery.
Flatpak Policy Type and Application Catalog
A new
Flatpakpolicy type manages Flatpak remotes and applications onmanaged desktops, with a server-side application catalog.
key, subset such as Flathub's
verified, allow-/deny-list filters,priority, enabled state). Definitions are written to
/etc/bor/flatpak/and tamper-protected; existing remotes such as a distribution-provided
flathubare adopted rather than duplicated and restored on unbind.with remote, branch, optional and delete data flags. The agent drives
the
flatpakCLI idempotently, off the policy stream, with per-operationtimeouts (default 30 minutes), and reports one compliance item per remote
and per application.
flatpak updateand unused-runtime cleanup.flatpakreportthe policy as Inapplicable, like other unsupported subsystems.
the box from its AppStream feed; additional repositories can be added from
a
.flatpakrepoURL or manually, refreshed on a schedule or by uploadingan
appstream.xml.gzfor air-gapped servers. The policy editor searchesthe catalog and copies remote definitions into the policy, so policies stay
self-contained. New permissions
flatpak_repo:*(backfilled onto everyrole that holds
settings:manage); new server settingsBOR_FLATPAK_CATALOG_REFRESH,BOR_FLATPAK_CATALOG_MAX_DOWNLOAD_MBandBOR_FLATPAK_CATALOG_ALLOW_PRIVATE_NETWORKS.flatpak:section (binary,state_dir,state_file,proxy_url).See
docs/flatpak.md.Instance-Hosted Agent Packages and Deploy Wizard
Every Bor server now ships and serves the agent packages itself, so managed
nodes never need internet access to install or upgrade the agent.
bor-serverpackages and the container image embed thebor-agentpackages for all formats (deb, rpm, apk, Arch) and architectures (amd64,
arm64, ppc64le) under
/usr/share/bor/agent-repo, assembled andGPG-signed at release build time.
/agent/*: a signed flat apt repository(
/agent/deb), a signed dnf/zypper repository (/agent/rpm), directdownloads for Alpine and Arch, the repository signing key
(
/agent/repo-key.asc), the internal CA certificate (/agent/ca.crt) and astatic install page at
/agent/. Download endpoints are public by design(package managers cannot authenticate); files are served through a rooted
filesystem with no directory listings.
Nodes page): pick the platform (Debian/Ubuntu, RHEL/Fedora, SUSE, Alpine,
Arch) and architecture and get a single copy-paste script that trusts the
server CA, sets up the signed repository or downloads the package, and
optionally generates a one-time enrollment token inline so the same script
enrolls and starts the agent. A Direct downloads tab lists every package.
BOR_AGENT_REPO_DIR(agent_repo.dir); when the directoryholds no manifest the feature is off and
/agent/*returns 404. The serverlogs a warning at startup when the packaged agent version differs from its
own.
bor_agent_package_downloads_total{format,arch}(aggregate labels only, no client identifiers).
Policy Export and Import
Policies can be exported and imported as
bor.dev/v1YAML bundles(schema in
proto/export/export.proto), for backups, migration betweenservers and keeping policies in version control.
PolicyorPolicyBindingdocument per YAML document, with
metadata.name/displayName/descriptionand aspecholding the policy type and its canonicalcontent. Bindings reference policies by slug or display name and node
groups by name, never by UUID, so bundles are portable across servers.
select several and export them as one bundle with their bindings. The API
(
GET /api/v1/policies/export) also supportsformat=json.POST /api/v1/policies/import): uploading a bundle first runs adry run and shows a preview table of what would be created, updated,
skipped or rejected; nothing is written until confirmed. Conflict modes
for an existing policy name: fail the import (default), skip that policy,
or update the existing draft (released policies are never overwritten).
A bundle with any invalid document is rejected as a whole, and bindings
to node groups that do not exist on the server are reported as errors.
policy:view, import requirespolicy:create; both areaudited (
policy.export,policy.import).Policy Creation Wizard
/policies/newis now a four-step wizard: Type (tiles grouped intoBrowsers / Desktop / System, each with a tagline and a description panel),
Details (name, description), Configuration (the same editor used on
the edit page) and Review. A contextual help drawer is available on
every step after the first.
(with confirmation) and Assign to a node group, which opens the binding
form with the new policy pre-selected — plus open the editor, create another
or back to the list. Changing the type after configuring or leaving with
unsaved work asks for confirmation.
icons) used by the wizard, the Policies list, the dashboard and the
bindings page; Firefox, Chrome, Thunderbird, KDE and Flatpak show their
brand marks (CC0-licensed) next to the type name.
editors (tree editors for the browser catalogues, KConfig, JSON-backed
types), so the wizard and the edit page cannot drift apart.
Readable Sidebar and Masthead in Every Theme
properties, so navigation group titles, the current item, the footer and
links stay readable in the light, dark and high-contrast themes (group
titles 7.9:1, links 9.4:1, footer 6.6:1 in the light theme; previously as
low as 1.65:1). Fixes contrast issue in UI #138.
14 px with a theme-aware subtle token instead of hand-rolled small gray
text.
Security
go/request-forgery): admin-supplied repository URLs are validated with a strict https-only pattern
(host name or IPv4 literal, no credentials); loopback, unspecified,
link-local, multicast and broadcast addresses are always refused and
private/CGNAT ranges are refused unless
BOR_FLATPAK_CATALOG_ALLOW_PRIVATE_NETWORKS=true; the transport resolvesnames itself and dials only approved addresses (DNS pinning), TLS 1.2
minimum.
os.Root-scopedfilesystem (path traversal and symlink escapes are structurally
impossible), never list directories, set
X-Content-Type-Options: nosniffand cap manifest reads. Only public material (CA certificate, signing
public key) is exposed.
passphrase-protected; the passphrase is consumed from the environment
only and never passed on a command line.
memory exhaustion (GHSA-vp52-pcj8-j9qc), five
fast-urihost-confusion /SSRF advisories, two
browserslistadvisories,brace-expansion,js-yaml,nanoidandpostcss-selector-parser.Bug Fixes
are computed from the many-to-many
node_group_idsarray; previously everynode was reported as unassigned and the group tiles stayed empty. A node in
several groups is now counted in each.
API, where protojson omits empty
action_ids/action_prefixes/action_conditionsarrays; sparse rules are normalized on load.TimeoutStopSec=120so long-runningenforcement steps (Flatpak installs, package transactions) can wind down
cleanly on stop instead of being killed.
BOR_VERSIONbuild argument sets the version shown in the sidebarand
/api/v1/version.Platform & Dependency Updates
google.golang.org/grpc1.82.1 → 1.83.2,golang.org/x/crypto0.52.0 → 0.55.0,golang.org/x/net0.55.0 → 0.58.0,golang.org/x/text0.39.0 → 0.41.0,golang.org/x/sys0.45.0 → 0.47.0.Server:
github.com/go-ldap/ldap/v33.4.12 → 3.4.14. Agent:google.golang.org/protobuf1.36.11 → 1.36.12.react-router8.3.0 → 8.3.1 plus the transitivefast-uri,browserslist,postcss-selector-parser,js-yaml,brace-expansionand
nanoidbumps.actions/checkoutv7; the pipeline gained an Assemble Agent Repostage between the agent and server package builds, and the container image
embeds the assembled repository. Dependabot ignores ESLint major updates
until
eslint-plugin-jsx-a11ysupports ESLint 10.bor_flatpak_catalog_apps_total,bor_flatpak_catalog_last_success_timestamp,bor_flatpak_catalog_refresh_totalandbor_agent_package_downloads_total; seedocs/metrics.md.Notes
Flatpak policy types; older agents ignore policy types they do not
understand. The new deploy wizard is the easiest way to roll the upgrade
out from the server itself.
000029_flatpak_catalogruns automatically at serverstart: it adds the
flatpak_repositories,flatpak_catalog_appsandflatpak_catalog_iconstables, theflatpak_repo:*permissions and theseeded Flathub repository.
session_access.protoandflatpak.proto(policy fields 20 and 21) and a newproto/export/export.proto; regenerate any external tooling built againstproto/.BOR_AGENT_REPO_DIR,BOR_FLATPAK_CATALOG_REFRESH(set to
falseon air-gapped servers; catalog uploads still work),BOR_FLATPAK_CATALOG_MAX_DOWNLOAD_MBandBOR_FLATPAK_CATALOG_ALLOW_PRIVATE_NETWORKS. See.env.exampleandserver/server.yaml.example.release pipeline contain no agent repository; the deploy wizard and
/agent/*stay off until a packaged build is installed.pam_time) requiressystemd-logindand PAM on thenode; on authselect-managed Fedora/RHEL a one-time admin step is needed and
the agent reports the policy as degraded until it is done.
This discussion was created from the release Release v0.9.0.
All reactions