Skip to content

Linux Browser launcher must not need passwordless sudo #165

Open

Description

@andersalm

Part of #87.

Current goal: installer-owned Linux Browser host setup

The ordinary installer offers one explained root step for KVM access and the Browser network device/firewall. It shows the removal command. Runtime, providers and Browser launch remain ordinary-user processes and never call sudo. #90 owns actual Jetson proof; broader x86/reboot qualification stays under #293.

Current checkpoint: source implemented; installed gates open

PR #307 is merged and installer integration is implemented: it admits the helper, explains its changes, asks for the one-time root step, prints removal and resumes ordinary setup. Current source retains KVM/vhost-vsock access, scoped ACL/udev/filter setup and restoration. Runtime launches use ordinary-user authority. Installer and network fixtures pass in the source results linked from #217. Installed setuid/capability scan and sudo-free session proof run with the separate Linux x86 service journey. Actual Jetson and reboot proof remain open; Linux ARM64 is hidden until an enabled release.

The Linux fixture now passes actual host setup, ordinary-user check and removal: four owned TAPs/filter chains and setup records are absent after removal, and the recorded KVM/vhost-vsock user ACLs are restored. Setup was then restored for the service journey. This binds the helper source to 619b641df; it is a host-step proof, while installed Runtime sudo-free/setuid/capability and Jetson/reboot gates remain open.

Current installer check — 3 November 2026

The #90 source snapshot 3a8f41c62 invokes helper setup with --user in both the interactive and printed manual paths. The helper defaults to kernel-vsock; the tested Jetson needs the admitted confined userspace-vsock backend. Existing host preparation can hide this mismatch. Prove ordinary install on an empty eligible Jetson host, including explicit transport selection, matching root/boot receipts, unprivileged operation and removal. On kernel-vsock hosts, preserve the existing approved device path. #406 owns the signed-byte check at the privileged boundary. Main owns the #90 release lane.

Next step

Anders runs the root step on the Jetson test install (#90) once disk is freed. Codex proves the installed ordinary-user journey and removal/resource result on #90. No further installer source connection is pending.

Release checks

  • The Runtime, its providers and Browser networking never call sudo. The installer may create the Browser network device and firewall rules once, as root, after saying so and asking. At run time no binary is setuid or has file capabilities, and nothing calls sudo. Test: a scan of the installed files finds no setuid or capability binary, and a Browser session runs with sudo removed from PATH.
  • Ordinary installation offers explicit one-time privileged Browser host setup, identifies its effects and supports removal. User-session Runtime, providers and launches operate without sudo, setuid binaries or file capabilities.

The remaining original x86 launch/reboot/installed-files and seed-hardening criteria stay open in the prior record and #174/#183/#293. One lead (Codex) and at most one read-only reviewer. Fast local checks per change, one CI run per coherent batch, failed-job reruns only. OMP integrates the reviewed branch, performs cross-family review and publishes the release. Runtime owns signed artifact admission, configuration and lifecycle; Engine owns website execution and rendering; Exit owns authorized website networking; Carrier carries delivery below Runtime authority.

Activity

  1. added this to the 0.8.0 milestone on Oct 1, 2026
  2. andersalm commented on Oct 1, 2026

    @andersalm
    ContributorAuthor

    Part of #173 (isolation plan).

  3. modified the milestones: 0.8.0, 0.7.3 on Oct 1, 2026
  4. self-assigned this
    on Oct 7, 2026
  5. andersalm commented on Oct 8, 2026

    @andersalm
    ContributorAuthor

    Historical scope before the 8 October 0.8.0 finish-line instruction. The current goal, checkpoint and next step are in the issue body.

    Previous record

    Part of #173 (isolation plan); related: #87, #83.

    Status (6 Oct): PR #250 merged. The launcher no longer calls sudo; a one-time root step (scripts/browser-vm-linux-network.py, asks first, with a remove step) creates the TAP devices, firewall rules and KVM access, and a systemd unit and udev rule restore them after reboot. Unit tests pass in CI. Not yet proven: a real launch and cleanup without sudo on installed Linux x86-64, a reboot, and the installed-files scan; the installer does not run the setup step yet.

    Before #250 the launcher set up the guest network with sudo -n ip ... and sudo -n iptables ..., so it needed the account that runs the Runtime to have passwordless sudo. On the public seed that account has NOPASSWD: ALL and the Docker group, and the Runtime with all its native providers runs there unconfined (no NoNewPrivileges, seccomp or AppArmor; systemd-analyze security 9.2). A code-execution bug in any internet-facing part of the public Home then gives root on the server in one more step, and the passwordless sudo also blocks the obvious systemd hardening (NoNewPrivileges=yes).

    Jetson has no Browser engine VM today and is out of scope here.

    Done means

    Browser mission Linux host contribution (#283)

    This issue retains its Linux x86-64 scope and supplies B01/B02/B07 host evidence to #283. PR #250 source tests are a prerequisite result; installed acceptance remains open.

    • Ordinary installation offers explicit one-time privileged Browser host setup, identifies its effects and supports removal. User-session Runtime, providers and launches operate without sudo, setuid binaries or file capabilities.
    • A named installed KVM host obtains a verified compatible monitor/kernel/guest set, opens a controlled page, receives decoded WebRTC frames, navigates/types/scrolls and closes with exact cleanup.
    • Repeat after reboot and a supported host network change; prove restored TAP/firewall/KVM permissions and the installed-files scan.
    • Record target hardware/OS/KVM capability, source/tree, built/installed hashes, setup/launch/reboot/cleanup commands and resource limits.
    • Unavailable KVM or artifact delivery gives a clear role-specific refusal. A remote viewer/Exit result has separate proof and leaves local Engine qualification open.

    Coordinate signed component delivery with #217/#89. #90 and #283 own actual Jetson/ARM64 and other role decisions; this issue does not infer their local Engine support from x86 source presence.

    Browser plan reconciliation — 2026-10-08

    #288 consumes approved one-time Linux host preparation/removal, while #293 consumes this issue's installed x86 KVM/reboot/cleanup receipt. PR #250's source result remains accepted at its scope. Actual Jetson/ARM64 host preparation belongs #90; #292 owns the full advertised profile binding. Use the existing authorized Mac/Jetson targets and optional existing Namespace only; a missing suitable x86 KVM host leaves that installed row pending.

  6. modified the milestones: 0.8.0, After 0.8.0 on Oct 13, 2026
  7. andersalm commented on Oct 13, 2026

    @andersalm
    ContributorAuthor

    Postponed to 0.8.1: Browser on Linux follows #349.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions