Replies: 3 comments 1 reply
-
Just though of a possible way to make this work with a slight tweaks:
Let's imagine the following scenario:
/etc/qubes/policy.d/30-securedrop.policy/etc/qubes/policy.d/31-dangerzone.policy/etc/qubes/policy.d/include/sd-managed/etc/qubes/policy.d/include/dz-managedIn the end if This is a bit convoluted, but it is an attempt to use the same "AND" philosophy to make multiVM application extensibility work. Alternative approach would be a manifest files describing which policies a multiVM application exposes. Note: in case no rule is matched in one of the included policies, this would result in a Evolution of this ideaAllow SecureDrop's management VM to define which VMs can interact with it. |
Beta Was this translation helpful? Give feedback.
-
|
Notes from 2025-07-03 discussion at proposal review meeting: Introducing a management VM is not on the immediate horizon, but under consideration longer term, and relevant for potential Signal/DZ integration. For folks interested in looking at similar architectures, Qubes 4.3's GUI VM will be a good example to study. Kunal notes that it would be good to review the impact of potential changes to the format as Francisco's first suggested change is motivated by this use case: We would like multi-VM application to be able to deny calls targeted at it within the includes themselves. Francisco will make that use case explicit on the upstream issue & suggest possible approaches if not covered by current syntax. Francisco suggests deeper explorations of management VM (e.g., toy project to demonstrate concepts) as part of Salt->Ansible transition; not necessarily blocked on 4.3. He'll comment directly on relevant upstream issues, flagging any larger potential custom work that could be charged against the retainer. |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for the explanation of all this.
One thing that I've had in mind is the fact that depending on the Would that solve the mentioned use case of "denying the calls targeted at it within the includes themselves"? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Starting this as a discussion because there are probably many different sub-issues and this is a bit open-opened at this point. It may also be moved into Qubes-issues or somewhere else at some point.
The Problem
MultiVM applications exist in many shapes and sizes. Most use SaltStack running in dom0 directly, to provision and configure qubes (including SecureDrop). Yet, there is another way way with more tightly scoped boundaries, using the Qubes Admin API and Management VMs. But despite its introduction in 2017, it still hasn’t seen wide adoption in publicly-known projects. One of the limitations is the fact that it is semi-trusted: it either fully manages a policy file or it doesn't. A ManagmentVM does not have the fine-grained policy control to only manage itself, but there is a proposal to fix that.
Why now? What made Management VMs cumbersome to work with is improving
With momentum towards Ansible in Qubes (which works great under ManagementVMs), this appears to no longer being a limitation
Workstation Needs
The Workstation plays several separate roles that would need to be considered separately on a management-VM based architecture.
Here's a breakdown:
deny policies from other app qubes (e.g. qubes.ClipboardPaste, qubes.Filecopy)
Future needs:
Workstation/Dangerzone's Needs vs Proposal
Managing it own VMs (:heavy_check_mark:)
Regarding intra-MultiVM application policy management, the proposal adds the ability for fully untrusted MultiVM Applications.
RPC Policies to System VMs
This is partially solved by the proposal. The file in
policy.ddefines the scope of actions that the management VM can theoretically do, while the file inpolicy.d/include/(controlled by the managment VM) defines what it actually does.In the following example, we can see how sd-mgmt (SecureDrop's hypothetical management qube) would be able to manage
sys-net's template.It should be highlighted that
sd-mgmtwould be able to do nothing more than change the template forsys-net. Even if it added some other policy because the "outer" policy (the one inpolicy.d) restricts it. The corollary is that outer policy approvals require dom0 policy changes.In this sense, I'd say that the policy syntax proposal sufficiently addresses the issue and makes clear permission for outer operations a dom0 change -- a sane approach!
Non-overridable Denials
The workstation denies certain policies to (among other things) prevent copying an pasting into these qubes or moving files.
From my assessment, it should be totally fine to have something like this:
The only problem here is that the above syntax is not part of the proposal because
!includewould be in the place ofaction(allow,denyorask).My suggestion here would be to have the action also as included in the list of things that can get "and". This could be tricky when one wants to give full flexibility in the included files (i.e. not specifying an action). For these cases, I'd suggest either making action optional (keeping it as originally proposed) or allowing
*in action when!include.Composability and Extensibility
The last point in my assessment is the composability of MultiVMs and its interaction, something I believe the proposal does not address (neither does it need to).
Goals:
dz.ConvertMultiVM2, but it should not need to know which VM implements that. MultiVM2 should be able to have flexibility to change internal implementation without requiring all other MultiVM apps relying on it to also change. Versioned policies (dz.v1.Convertcould alleviate semantic changes).dz.Convertpolicy, without any dom0 policy changes (inpolicy.d) because Dangerzone consents to having this policy exposed.The proposed change does not address this (from what I can tell), since inter-MultiVM application policies need dom0 policy changes. Furthermore, there is no way to say which VMs expose which RPC policies and which ones are internal only. Marek mentioned the idea of a MultiVM Application manifest defining this, but these are early day and no spec exists for that yet.
Beta Was this translation helpful? Give feedback.
All reactions