What can be restricted
The full list of switches, grouped, and the rule that keeps the list honest.
On this page 3 sections
A policy is a list of capabilities that are denied. Everything not denied is allowed, so a new MSL feature is never silently restricted by an old policy.
msl admin capabilitiesprints every one with what it covers and where it is enforced.
The groups#
| Group | Covers |
|---|---|
instance | Creating, deleting, starting, stopping, renaming, cloning, locking instances |
resources | Memory, CPUs, disk size, fixed or dynamic memory |
distro | Installing and removing distros, custom images, where images come from |
shipment | Importing and exporting .mslship files |
network | The VPN, DNS, the sandbox network gate, the traffic monitor, forwarded ports |
public | Publishing an instance to the internet, and each backend |
sharing | The Mac home share, the clipboard, MSL Files, the Finder mount, the file picker |
peripherals | USB, audio, camera, microphone |
graphics | GPU acceleration, per-app graphics, scaling |
apps | Launching Linux apps, launch commands, Launchpad, the Dock, scanning |
integrations | Links and mail opening on the Mac, the global menu bar, shortcuts, sign-in |
system | Experimental features, updating, startup, uninstalling, the terminal, SSH, diagnostics |
admin | Removing or editing the policy itself |
Denying a group denies everything under it: network covers network.vpn. Whole segments only — denying net denies nothing.
Scopes#
A rule applies to or to instance names, including lab-. So a lab Mac can forbid copying the teaching image while leaving a student's own instances alone.
The honesty rule#
Every capability says where it is enforced:
| Tier | Means |
|---|---|
| daemon | mslhd refuses the request. Binds the app and the command line alike. |
| app | Refused in the app or CLI, for things the daemon never sees. |
| interface only | A hidden control, and nothing more. |
That last one is deliberately unflattering, and MSL labels it rather than hiding it. system.terminal is interface-only: hiding MSL's Terminal tab does not stop anybody typing msl <instance> in Terminal.app, and the refusal on screen says exactly that.
A capability with nowhere that refuses it is not shipped as enforced. A test walks the whole list against the real enforcement sites, so the catalogue cannot drift into a list of promises nothing keeps.