From a78075a4429b91aba7e1f1d6ccb1018fd8086605 Mon Sep 17 00:00:00 2001
From: zetigu <81594452+zetigu@users.noreply.github.com>
Date: Thu, 1 Apr 2021 18:18:49 -0400
Subject: [PATCH 001/332] Add instruction for using Btrfs as a qvm-pool
I reformated the article to devide it in 2 section, one concerning LVM pools and the other Btrfs pool.
The synthax should be close to the original.
Awaiting comments.
---
.../secondary-storage.md | 79 ++++++++++++++++++-
1 file changed, 76 insertions(+), 3 deletions(-)
diff --git a/user/advanced-configuration/secondary-storage.md b/user/advanced-configuration/secondary-storage.md
index 90faca71..8de061cd 100644
--- a/user/advanced-configuration/secondary-storage.md
+++ b/user/advanced-configuration/secondary-storage.md
@@ -20,6 +20,24 @@ You want to store a subset of your AppVMs on the HDD.
Qubes 4.0 is more flexible than earlier versions about placing different VMs on different disks.
For example, you can keep templates on one disk and AppVMs on another, without messy symlinks.
+You can query qvm-pool to list available storage drivers.
+
+```
+qvm-pool --help-drivers
+```
+qvm-pool driver explaination :
+```
+ refers to using a simple file for image storage and lacks a few features.
+ refers to storing images on a filesystem supporting copy on write.
+ refers to a directory holding kernel images.
+ refers to LVM managed pools.
+```
+In theory, you can still use file-based disk images ("file" pool driver), but it lacks some features such as you won't be able to do backups without shutting down the qube.
+
+Additionnal storage can also be added on a Btrfs filesystem. A unique feature of Btrfs over LVM is that data can be compressed transparently. The subvolume can also be backuped using snapshots for an other layer protection and Btrfs supports different level of redundancy and is able to be expanded/shrinked easily. Revelant information will be provided after LVM section.
+
+### LVM storage
+
These steps assume you have already created a separate [volume group](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/vg_admin#VG_create) and [thin pool](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/thinly_provisioned_volume_creation) (not thin volume) for your HDD.
See also [this example](https://www.linux.com/blog/how-full-encrypt-your-linux-system-lvm-luks) if you would like to create an encrypted LVM pool (but note you can use a single logical volume if preferred, and to use the `-T` option on `lvcreate` to specify it is thin). You can find the commands for this example applied to Qubes at the bottom of this R4.0 section.
@@ -39,6 +57,24 @@ Take note of the VG and thin pool names for your HDD, then register it with Qube
qvm-pool --add lvm_thin -o volume_group=,thin_pool=,revisions_to_keep=2
```
+### BTRFS storage
+Theses steps assume you have already created a separate Btrfs filesystem for your HDD, that it is encrypted with LUKS and it is mounted. It is recommended to use a subvolume as it enables compression and excess storage can be use for other things.
+
+
+It is possible to use already available Btrfs storage if it is configured. In dom0, available Btrfs storage can be displayed using :
+```
+mount -t btrfs
+```
+To register the storage to qubes :
+
+```shell_session
+# is a freely chosen pool name
+# is the mounted path to the second btrfs storage
+qvm-pool --add file-reflink -o dir_path=,revisions_to_keep=2
+```
+
+#### Using the new pool
+
Now, you can create qubes in that pool:
```
@@ -59,9 +95,7 @@ For example:
qvm-prefs template
```
-In theory, you can still use file-based disk images ("file" pool driver), but it lacks some features such as you won't be able to do backups without shutting down the qube.
-
-### Example HDD setup
+#### Example HDD setup
Assuming the secondary hard disk is at /dev/sdb (it will be completely erased), you can set it up for encryption by doing in a dom0 terminal (use the same passphrase as the main Qubes disk to avoid a second password prompt at boot):
@@ -84,6 +118,8 @@ luks-b20975aa-8318-433d-8508-6c23982c6cde UUID=b20975aa-8318-433d-8508-6c23982c6
Reboot the computer so the new luks device appears at /dev/mapper/luks-b209... and we can then create its pool, by doing this on a dom0 terminal (substitute the b209... UUIDs with yours):
+##### For LVM
+
First create the physical volume
```
@@ -107,6 +143,40 @@ Finally we will tell Qubes to add a new pool on the just created thin pool
```
qvm-pool --add poolhd0_qubes lvm_thin -o volume_group=qubes,thin_pool=poolhd0,revisions_to_keep=2
```
+#### For Btrfs
+
+First create the physical volume
+
+```
+#
-
U2F proxy
+
CTAP proxy
- Operate Qubes U2F proxy to use your
+ Operate Qubes CTAP proxy to use your
two-factor authentication devices without exposing your web browser to the
full USB stack.
diff --git a/user/how-to-guides/how-to-use-usb-devices.md b/user/how-to-guides/how-to-use-usb-devices.md
index e515231f..0618bb04 100644
--- a/user/how-to-guides/how-to-use-usb-devices.md
+++ b/user/how-to-guides/how-to-use-usb-devices.md
@@ -25,7 +25,7 @@ Examples of valid cases for USB-passthrough:
- [external audio devices](/doc/external-audio/)
- [optical drives](/doc/recording-optical-discs/) for recording
-(If you are thinking to use a two-factor-authentication device, [there is an app for that](/doc/u2f-proxy/).
+(If you are thinking to use a two-factor-authentication device, [there is an app for that](/doc/ctap-proxy/).
But it has some [issues](https://github.com/QubesOS/qubes-issues/issues/4661).)
## Attaching And Detaching a USB Device
diff --git a/user/security-in-qubes/ctap-proxy.md b/user/security-in-qubes/ctap-proxy.md
new file mode 100644
index 00000000..6ba1f696
--- /dev/null
+++ b/user/security-in-qubes/ctap-proxy.md
@@ -0,0 +1,143 @@
+---
+lang: en
+layout: doc
+permalink: /doc/ctap-proxy/
+ref: 167
+title: CTAP proxy
+---
+
+The [Qubes CTAP Proxy](https://github.com/QubesOS/qubes-app-u2f) is a secure proxy intended to make use of CTAP two-factor authentication devices with web browsers without exposing the browser to the full USB stack, not unlike the [USB keyboard and mouse proxies](/doc/usb/) implemented in Qubes.
+
+## What is CTAP, U2F, FIDO2?
+
+CTAP, U2F, and FIDO2 are all related to authentication protocols and standards developed by the FIDO Alliance. CTAP has two versions: CTAP1 and CTAP2:
+
+1. [CTAP1/U2F](https://en.wikipedia.org/wiki/Universal_2nd_Factor) (Universal 2nd Factor): U2F is an earlier protocol developed by the FIDO Alliance as part of the FIDO U2F standard. It provides a strong second-factor authentication method using dedicated hardware security keys. U2F allows users to authenticate to online services by simply plugging in a U2F-compliant security key and pressing a button, providing a higher level of security compared to traditional passwords.
+
+2. [CTAP2](https://en.wikipedia.org/wiki/Client_to_Authenticator_Protocol) (Client to Authenticator Protocol): CTAP2 is a protocol within the FIDO2 framework that enables communication between a client device (e.g., a computer or smartphone) and an authenticator (e.g., a hardware device). CTAP allows for secure and convenient authentication using public key cryptography and strong authentication factors.
+
+3. [FIDO2](https://en.wikipedia.org/wiki/FIDO_Alliance): FIDO2 is a set of standards and protocols developed by the FIDO Alliance for passwordless and strong authentication. It combines two main components: CTAP (Client to Authenticator Protocol) and WebAuthn (Web Authentication API). FIDO2 enables users to authenticate to online services using various authentication methods, such as biometrics, PINs, or hardware tokens, instead of relying on passwords.
+
+The aim of these protocols is to introduce additional control which provides [good protection](https://krebsonsecurity.com/2018/07/google-security-keys-neutralized-employee-phishing/) in cases in which the passphrase is stolen (e.g. by phishing or keylogging).
+While passphrase compromise may not be obvious to the user, a physical device that cannot be duplicated must be stolen to be used outside the owner's control.
+Nonetheless, it is important to note at the outset that CTAP cannot guarantee security when the host system is compromised (e.g. a malware-infected operating system under an adversary's control).
+
+The CTAP specification defines protocols for multiple layers from USB to the browser API, and the whole stack is intended to be used with web applications (most commonly websites) in browsers.
+In most cases, authenticators are USB dongles.
+The protocol is very simple, allowing the devices to store very little state inside (so the tokens may be reasonably cheap) while simultaneously authenticating a virtually unlimited number of services (so each person needs only one token, not one token per application).
+The user interface is usually limited to a single LED and a button that is pressed to confirm each transaction, so the devices themselves are also easy to use.
+Both CTAP1 and CTAP2 share the same underlying transports: USB Human Interface Device (USB HID), Near Field Communication (NFC), and Bluetooth Smart / Bluetooth Low Energy Technology (BLE).
+
+Currently, the most common form of two-step authentication consists of a numeric code that the user manually types into a web application.
+These codes are typically generated by an app on the user's smartphone or sent via SMS.
+By now, it is well-known that this form of two-step authentication is vulnerable to phishing and man-in-the-middle attacks due to the fact that the application requesting the two-step authentication code is typically not itself authenticated by the user.
+(In other words, users can accidentally give their codes to attackers because they do not always know who is really requesting the code.) In the CTAP model, by contrast, the browser ensures that the token receives valid information about the web application requesting authentication, so the token knows which application it is authenticating (for details, see [here](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-overview-v1.2-ps-20170411.html#site-specific-public-private-key-pairs)).
+Nonetheless, [some attacks are still possible](https://www.wired.com/story/chrome-yubikey-phishing-webusb/) even with CTAP (more on this below).
+
+## The Qubes approach to CTAP
+
+In a conventional setup, web browsers and the USB stack (to which the authenticator is connected) are all running in the same monolithic OS.
+Since the CTAP model assumes that the browser is trustworthy, any browser in the OS is able to access any key stored on the authenticator.
+The user has no way to know which keys have been accessed by which browsers for which services.
+If any of the browsers are compromised, it should be assumed that all the token's keys have been compromised.
+(This problem can be mitigated, however, if the CTAP device has a special display to show the user what's being authenticated.) Moreover, since the USB stack is in the same monolithic OS, the system is vulnerable to attacks like [BadUSB](https://www.blackhat.com/us-14/briefings.html#badusb-on-accessories-that-turn-evil).
+
+In Qubes OS, by contrast, it is possible to securely compartmentalise the browser in one qube and the USB stack in another so that they are always kept separate from each other.
+The Qubes CTAP Proxy then allows the token connected to the USB stack in one qube to communicate with the browser in a separate qube.
+We operate under the assumption that the USB stack is untrusted from the point of view of the browser and also that the browser is not to be trusted blindly by the token.
+Therefore, the token is never in the same qube as the browser.
+Our proxy forwards only the data necessary to actually perform the authentication, leaving all unnecessary data out, so it won't become a vector of attack.
+This is depicted in the diagram below (click for full size).
+
+[](/attachment/doc/ctap.svg)
+
+The Qubes CTAP Proxy has two parts: the frontend and the backend.
+The frontend runs in the same qube as the browser and presents a fake USB-like HID device using `uhid`.
+The backend runs in `sys-usb` and behaves like a browser.
+This is done using the `fido2` reference library.
+All of our code was written in Python.
+The standard [qrexec](/doc/qrexec3/) policy is responsible for directing calls to the appropriate domains.
+
+The `vault` qube with a dashed line in the bottom portion of the diagram depicts future work in which we plan to implement the Qubes CTAP Proxy with a software token in an isolated qube rather than a physical hardware token.
+This is similar to the manner in which [Split GPG](/doc/split-gpg/) allows us to emulate the smart card model without physical smart cards.
+
+One very important assumption of protocol is that the browser verifies every request sent to the authenticator --- in particular, that the web application sending an authentication request matches the application that would be authenticated by answering that request (in order to prevent, e.g., a phishing site from sending an authentication request for your bank's site).
+With the WebUSB feature in Chrome, however, a malicious website can [bypass](https://www.wired.com/story/chrome-yubikey-phishing-webusb/) this safeguard by connecting directly to the token instead of using the browser's CTAP API.
+
+The Qubes CTAP Proxy also prevents this class of attacks by implementing an additional verification layer.
+This verification layer allows you to enforce, for example, that the web browser in your `twitter` qube can only access the CTAP key associated with `https://twitter.com`.
+This means that if anything in your `twitter` qube were compromised --- the browser or even the OS itself --- it would still not be able to access the CTAP keys on your token for any other websites or services, like your email and bank accounts.
+This is another significant security advantage over monolithic systems.
+(For details and instructions, see the [Advanced usage](#advanced-usage-per-qube-key-access) section below.)
+
+For even more protection, you can combine this with the [Qubes firewall](/doc/firewall/) to ensure, for example, that the browser in your `banking` qube accesses only one website (your bank's website).
+By configuring the Qubes firewall to prevent your `banking` qube from accessing any other websites, you reduce the risk of another website compromising the browser in an attempt to bypass CTAP authentication.
+
+## Installation
+
+These instructions assume that there is a `sys-usb` qube that holds the USB stack, which is the default configuration in most Qubes OS installations.
+
+In dom0:
+
+```
+$ sudo qubes-dom0-update qubes-ctap-dom0
+$ qvm-service --enable work qubes-ctap-proxy
+```
+
+The above assumes a `work` qube in which you would like to enable ctap. Repeat the `qvm-service` command for all qubes that should have the proxy enabled. Alternatively, you can add `qubes-ctap-proxy` in VM settings -> Services in the Qube Manager of each qube you would like to enable the service.
+
+In Fedora templates:
+
+```
+$ sudo dnf install qubes-ctap
+```
+
+In Debian templates:
+
+```
+$ sudo apt install qubes-ctap
+```
+
+As usual with software updates, shut down the templates after installation, then restart `sys-usb` and all qubes that use the proxy.
+After that, you may use your CTAP authenticator (but see [Browser support](#template-and-browser-support) below).
+
+## Advanced usage: per-qube key access
+
+If you are using Qubes 4.0, you can further compartmentalise your CTAP keys by restricting each qube's access to specific keys.
+For example, you could make it so that your `twitter` qube (and, therefore, all web browsers in your `twitter` qube) can access only the key on your CTAP token for `https://twitter.com`, regardless of whether any of the web browsers in your `twitter` qube or the `twitter` qube itself are compromised.
+If your `twitter` qube makes an authentication request for your bank website, it will be denied at the Qubes policy level.
+
+To enable this, create a file in dom0 named `/etc/qubes/policy.d/30-user-ctapproxy.policy` with the following content:
+
+```
+policy.RegisterArgument +ctap.GetAssertion sys-usb @anyvm allow target=dom0
+```
+
+Next, empty the contents of `/etc/qubes-rpc/policy/ctap.GetAssertion` so that it is a blank file.
+Do not delete the file itself.
+(If you do, the default file will be recreated the next time you update, so it will no longer be empty.) Finally, follow your web application's instructions to enroll your token and use it as usual.
+(This enrollment process depends on the web application and is in no way specific to Qubes CTAP.)
+
+The default model is to allow a qube to access all and only the keys that were enrolled by that qube.
+For example, if your `banking` qube enrolls your banking key, and your `twitter` qube enrolls your Twitter key, then your `banking` qube will have access to your banking key but not your Twitter key, and your `twitter` qube will have access to your Twitter key but not your banking key.
+
+## Non-default USB qube name
+
+If your USB qube is named differently than `sys-usb`, then do the following in the appropriate template(s):
+
+```
+systemctl enable qubes-ctapproxy@USB_QUBE.service
+systemctl disable qubes-ctapproxy@sys-usb.service
+```
+
+Replace `USB_QUBE` with the actual USB qube name.
+
+Do not forget to change the sys-usb qube name in the policy `/etc/qubes/policy.d/30-user-ctapproxy.policy`.
+
+## Template and browser support
+
+The large number of possible combinations of template (Fedora 37, 38; Debian 10, 11) and browser (multiple Google Chrome versions, multiple Chromium versions, multiple Firefox versions) made it impractical for us to test every combination that users are likely to attempt with the Qubes CTAP Proxy.
+In some cases, you may be the first person to try a particular combination.
+Consequently, (and as with any new feature), users will inevitably encounter bugs.
+We ask for your patience and understanding in this regard.
+As always, please [report any bugs you encounter](/doc/issue-tracking/).
diff --git a/user/security-in-qubes/device-handling-security.md b/user/security-in-qubes/device-handling-security.md
index 2301020f..233b1ab3 100644
--- a/user/security-in-qubes/device-handling-security.md
+++ b/user/security-in-qubes/device-handling-security.md
@@ -71,4 +71,4 @@ Locking the screen (with a traditional password) does not solve the problem, bec
One possibility is to set up the screen locker to require an additional step to unlock (i.e., two-factor authentication).
One way to achieve this is to use a [YubiKey](/doc/YubiKey/), or some other hardware token, or even to manually enter a one-time password.
-Support for [two factor authentication](/news/2018/09/11/qubes-u2f-proxy/) was recently added, though there are [issues](https://github.com/QubesOS/qubes-issues/issues/4661).
+Support for [two factor authentication](/news/2018/09/11/qubes-ctap-proxy/) was recently added, though there are [issues](https://github.com/QubesOS/qubes-issues/issues/4661).
diff --git a/user/security-in-qubes/u2f-proxy.md b/user/security-in-qubes/u2f-proxy.md
deleted file mode 100644
index 81c0520b..00000000
--- a/user/security-in-qubes/u2f-proxy.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /doc/u2f-proxy/
-ref: 167
-title: U2F proxy
----
-
-The [Qubes U2F Proxy](https://github.com/QubesOS/qubes-app-u2f) is a secure proxy intended to make use of U2F two-factor authentication devices with web browsers without exposing the browser to the full USB stack, not unlike the [USB keyboard and mouse proxies](/doc/usb/) implemented in Qubes.
-
-## What is U2F?
-
-[U2F](https://en.wikipedia.org/wiki/U2F), which stands for "Universal 2nd Factor", is a framework for authentication using hardware devices (U2F tokens) as "second factors", i.e. *what you have* as opposed to *what you know*, like a passphrase.
-This additional control provides [good protection](https://krebsonsecurity.com/2018/07/google-security-keys-neutralized-employee-phishing/) in cases in which the passphrase is stolen (e.g. by phishing or keylogging).
-While passphrase compromise may not be obvious to the user, a physical device that cannot be duplicated must be stolen to be used outside of the owner's control.
-Nonetheless, it is important to note at the outset that U2F cannot guarantee security when the host system is compromised (e.g. a malware-infected operating system under an adversary's control).
-
-The U2F specification defines protocols for multiple layers from USB to the browser API, and the whole stack is intended to be used with web applications (most commonly websites) in browsers.
-In most cases, tokens are USB dongles.
-The protocol is very simple, allowing the devices to store very little state inside (so the tokens may be reasonably cheap) while simultaneously authenticating a virtually unlimited number of services (so each person needs only one token, not one token per application).
-The user interface is usually limited to a single LED and a button that is pressed to confirm each transaction, so the devices themselves are also easy to use.
-
-Currently, the most common form of two-step authentication consists of a numeric code that the user manually types into a web application.
-These codes are typically generated by an app on the user's smartphone or sent via SMS.
-By now, it is well-known that this form of two-step authentication is vulnerable to phishing and man-in-the-middle attacks due to the fact that the application requesting the two-step authentication code is typically not itself authenticated by the user.
-(In other words, users can accidentally give their codes to attackers because they do not always know who is really requesting the code.) In the U2F model, by contrast, the browser ensures that the token receives valid information about the web application requesting authentication, so the token knows which application it is authenticating (for details, see [here](https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-overview-v1.2-ps-20170411.html#site-specific-public-private-key-pairs)).
-Nonetheless, [some attacks are still possible](https://www.wired.com/story/chrome-yubikey-phishing-webusb/) even with U2F (more on this below).
-
-## The Qubes approach to U2F
-
-In a conventional setup, web browsers and the USB stack (to which the U2F token is connected) are all running in the same monolithic OS.
-Since the U2F model assumes that the browser is trustworthy, any browser in the OS is able to access any key stored on the U2F token.
-The user has no way to know which keys have been accessed by which browsers for which services.
-If any of the browsers are compromised, it should be assumed that all of the token's keys have been compromised.
-(This problem can be mitigated, however, if the U2F device has a special display to show the user what's being authenticated.) Moreover, since the USB stack is in the same monolithic OS, the system is vulnerable to attacks like [BadUSB](https://www.blackhat.com/us-14/briefings.html#badusb-on-accessories-that-turn-evil).
-
-In Qubes OS, by contrast, it is possible to securely compartmentalise the browser in one qube and the USB stack in another so that they are always kept separate from each other.
-The Qubes U2F Proxy then allows the token connected to the USB stack in one qube to communicate with the browser in a separate qube.
-We operate under the assumption that the USB stack is untrusted from the point of view of the browser and also that the browser is not to be trusted blindly by the token.
-Therefore, the token is never in the same qube as the browser.
-Our proxy forwards only the data necessary to actually perform the authentication, leaving all unnecessary data out, so it won't become a vector of attack.
-This is depicted in the diagram below (click for full size).
-
-[](/attachment/doc/u2f.svg)
-
-The Qubes U2F Proxy has two parts: the frontend and the backend.
-The frontend runs in the same qube as the browser and presents a fake USB-like HID device using `uhid`.
-The backend runs in `sys-usb` and behaves like a browser.
-This is done using the `u2flib_host` reference library.
-All of our code was written in Python.
-The standard [qrexec](/doc/qrexec3/) policy is responsible for directing calls to the appropriate domains.
-
-The `vault` qube with a dashed line in the bottom portion of the diagram depicts future work in which we plan to implement the Qubes U2F Proxy with a software token in an isolated qube rather than a physical hardware token.
-This is similar to the manner in which [Split GPG](/doc/split-gpg/) allows us to emulate the smart card model without physical smart cards.
-
-One very important assumption of U2F is that the browser verifies every request sent to the U2F token --- in particular, that the web application sending an authentication request matches the application that would be authenticated by answering that request (in order to prevent, e.g., a phishing site from sending an authentication request for your bank's site).
-With the WebUSB feature in Chrome, however, a malicious website can [bypass](https://www.wired.com/story/chrome-yubikey-phishing-webusb/) this safeguard by connecting directly to the token instead of using the browser's U2F API.
-
-The Qubes U2F Proxy also prevents this class of attacks by implementing an additional verification layer.
-This verification layer allows you to enforce, for example, that the web browser in your `twitter` qube can only access the U2F key associated with `https://twitter.com`.
-This means that if anything in your `twitter` qube were compromised --- the browser or even the OS itself --- it would still not be able to access the U2F keys on your token for any other websites or services, like your email and bank accounts.
-This is another significant security advantage over monolithic systems.
-(For details and instructions, see the [Advanced usage](#advanced-usage-per-qube-key-access) section below.)
-
-For even more protection, you can combine this with the [Qubes firewall](/doc/firewall/) to ensure, for example, that the browser in your `banking` qube accesses only one website (your bank's website).
-By configuring the Qubes firewall to prevent your `banking` qube from accessing any other websites, you reduce the risk of another website compromising the browser in an attempt to bypass U2F authentication.
-
-## Installation
-
-These instructions assume that there is a `sys-usb` qube that holds the USB stack, which is the default configuration in most Qubes OS installations.
-
-In dom0:
-
-```
-$ sudo qubes-dom0-update qubes-u2f-dom0
-$ qvm-service --enable work qubes-u2f-proxy
-```
-
-The above assumes a `work` qube in which you would like to enable u2f. Repeat the `qvm-service` command for all qubes that should have the proxy enabled. Alternatively, you can add `qubes-u2f-proxy` in VM settings -> Services in the Qube Manager of each qube you would like to enable the service.
-
-In Fedora templates:
-
-```
-$ sudo dnf install qubes-u2f
-```
-
-In Debian templates:
-
-```
-$ sudo apt install qubes-u2f
-```
-
-As usual with software updates, shut down the templates after installation, then restart `sys-usb` and all qubes that use the proxy.
-After that, you may use your U2F token (but see [Browser support](#template-and-browser-support) below).
-
-## Advanced usage: per-qube key access
-
-If you are using Qubes 4.0, you can further compartmentalise your U2F keys by restricting each qube's access to specific keys.
-For example, you could make it so that your `twitter` qube (and, therefore, all web browsers in your `twitter` qube) can access only the key on your U2F token for `https://twitter.com`, regardless of whether any of the web browsers in your `twitter` qube or the `twitter` qube itself are compromised.
-If your `twitter` qube makes an authentication request for your bank website, it will be denied at the Qubes policy level.
-
-To enable this, create a file in dom0 named `/etc/qubes/policy.d/30-user-u2fproxy.policy` with the following content:
-
-```
-policy.RegisterArgument +u2f.Authenticate sys-usb @anyvm allow target=dom0
-```
-
-Next, empty the contents of `/etc/qubes-rpc/policy/u2f.Authenticate` so that it is a blank file.
-Do not delete the file itself.
-(If you do, the default file will be recreated the next time you update, so it will no longer be empty.) Finally, follow your web application's instructions to enroll your token and use it as usual.
-(This enrollment process depends on the web application and is in no way specific to Qubes U2F.)
-
-The default model is to allow a qube to access all and only the keys that were enrolled by that qube.
-For example, if your `banking` qube enrolls your banking key, and your `twitter` qube enrolls your Twitter key, then your `banking` qube will have access to your banking key but not your Twitter key, and your `twitter` qube will have access to your Twitter key but not your banking key.
-
-## Non-default USB qube name
-
-If your USB qube is named differently than `sys-usb`, then do the following in the appropriate template(s):
-
-```
-systemctl enable qubes-u2fproxy@USB_QUBE.service
-systemctl disable qubes-u2fproxy@sys-usb.service
-```
-
-Replace `USB_QUBE` with the actual USB qube name.
-
-Do not forget to change the sys-usb qube name in the policy `/etc/qubes/policy.d/30-user-u2fproxy.policy`.
-
-## Template and browser support
-
-The large number of possible combinations of template (Fedora 27, 28; Debian 8, 9) and browser (multiple Google Chrome versions, multiple Chromium versions, multiple Firefox versions) made it impractical for us to test every combination that users are likely to attempt with the Qubes U2F Proxy.
-In some cases, you may be the first person to try a particular combination.
-Consequently (and as with any new feature), users will inevitably encounter bugs.
-We ask for your patience and understanding in this regard.
-As always, please [report any bugs you encounter](/doc/issue-tracking/).
diff --git a/user/security-in-qubes/yubi-key.md b/user/security-in-qubes/yubi-key.md
index 8e231592..a4cdfc68 100644
--- a/user/security-in-qubes/yubi-key.md
+++ b/user/security-in-qubes/yubi-key.md
@@ -22,8 +22,8 @@ Most use cases for the YubiKey can be achieved exactly as described by the
manufacturer or other instructions found online. One usually just needs to
attach the YubiKey to the corresponding app qube to get the same result (see the
documentation on how to use [USB devices](/doc/how-to-use-usb-devices/) in Qubes
-OS accordingly). The recommended way for using U2F in Qubes is described
-[here](https://www.qubes-os.org/doc/u2f-proxy/).
+OS accordingly). The recommended way for using CTAP in Qubes is described
+[here](https://www.qubes-os.org/doc/ctap-proxy/).
## Multi-factor login for Qubes OS
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 8d63fbc4..43349d95 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -192,7 +192,7 @@ are:
Also, there are packages to provide additional services:
- `qubes-gpg-split`: For implementing split GPG.
-- `qubes-u2f`: For implementing secure forwarding of U2F messages.
+- `qubes-ctap`: For implementing secure forwarding of CTAP messages.
- `qubes-pdf-converter`: For implementing safe conversion of PDFs.
- `qubes-img-converter`: For implementing safe conversion of images.
- `qubes-snapd-helper`: If you want to use snaps in qubes.
@@ -287,7 +287,7 @@ are:
Also, there are packages to provide additional services:
- `qubes-gpg-split`: For implementing split GPG.
-- `qubes-u2f`: For implementing secure forwarding of U2F messages.
+- `qubes-ctap`: For implementing secure forwarding of CTAP messages.
- `qubes-pdf-converter`: For implementing safe conversion of PDFs.
- `qubes-img-converter`: For implementing safe conversion of images.
- `qubes-snapd-helper`: If you want to use snaps in qubes.
From 8b64b9d555bd43ae95b51c60050bfddaaa3f4eb3 Mon Sep 17 00:00:00 2001
From: Piotr Bartman
Date: Sun, 21 May 2023 13:41:02 +0200
Subject: [PATCH 026/332] migration to fido2: redirect_from
---
user/security-in-qubes/ctap-proxy.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/user/security-in-qubes/ctap-proxy.md b/user/security-in-qubes/ctap-proxy.md
index 6ba1f696..59e65f32 100644
--- a/user/security-in-qubes/ctap-proxy.md
+++ b/user/security-in-qubes/ctap-proxy.md
@@ -2,6 +2,7 @@
lang: en
layout: doc
permalink: /doc/ctap-proxy/
+redirect_from: /doc/u2f-proxy/
ref: 167
title: CTAP proxy
---
From 3a3a39cd5ff44620f1c791e3bf09f8e78a43acaa Mon Sep 17 00:00:00 2001
From: Piotr Bartman
Date: Mon, 29 May 2023 23:58:24 +0200
Subject: [PATCH 027/332] migration to fido2: backward compatible policies
names
---
user/security-in-qubes/ctap-proxy.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/security-in-qubes/ctap-proxy.md b/user/security-in-qubes/ctap-proxy.md
index 59e65f32..92e127dc 100644
--- a/user/security-in-qubes/ctap-proxy.md
+++ b/user/security-in-qubes/ctap-proxy.md
@@ -111,10 +111,10 @@ If your `twitter` qube makes an authentication request for your bank website, it
To enable this, create a file in dom0 named `/etc/qubes/policy.d/30-user-ctapproxy.policy` with the following content:
```
-policy.RegisterArgument +ctap.GetAssertion sys-usb @anyvm allow target=dom0
+policy.RegisterArgument +u2f.Authenticate sys-usb @anyvm allow target=dom0
```
-Next, empty the contents of `/etc/qubes-rpc/policy/ctap.GetAssertion` so that it is a blank file.
+Next, empty the contents of `/etc/qubes-rpc/policy/u2f.Authenticate` so that it is a blank file.
Do not delete the file itself.
(If you do, the default file will be recreated the next time you update, so it will no longer be empty.) Finally, follow your web application's instructions to enroll your token and use it as usual.
(This enrollment process depends on the web application and is in no way specific to Qubes CTAP.)
From f24299be1ebdd81a5acb6af66967104955ae885a Mon Sep 17 00:00:00 2001
From: Oni
Date: Wed, 7 Jun 2023 05:59:45 -0400
Subject: [PATCH 028/332] Use 'qvm-template' to uninstall templates
The 'dnf remove' command no longer removes templates and mentions "No
Match" when using . The 'qvm-template' command will
remove templates from both package installation and
cloning. 'qvm-template' also warns about qubes dependent on the template
which reduces the need for the user to preemptively check that
relationship.
In its implementation, 'qvm-template' imports and calls 'qvm-remove'
to remove the template. 'qvm-template' was selected as the command to
present as it provides a more consistent interface when installing,
listing, and removing among other commands.
---
user/templates/templates.md | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/user/templates/templates.md b/user/templates/templates.md
index f3740dec..30e40635 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -144,28 +144,19 @@ Please see [How to Install Software](/doc/how-to-install-software).
## Uninstalling
-If you want to remove a template you must make sure that it is not being used.
-You should check that the template is not being used by any qubes,
-and also that it is not set as the default template.
-
-The procedure for uninstalling a template depends on how it was created.
-
-If the template was originaly created by cloning another template, then you can
-delete it the same way as you would any other qube. In the Qube Manager,
-right-click on the template and select **Delete qube**. (If you're not sure,
-you can safely try this method first to see if it works.)
-
-If, on the other hand, the template came pre-installed or was installed by
-installing a template package in dom0, per the instructions
-[above](#installing), then you must execute the following type of command in
-dom0 in order to uninstall it:
+To remove a template, the graphical `Qube Manager` (Qubes Menu > Qubes Tools > Qube Manager) may be used. Right-click the template to be uninstalled and click "Delete qube" to begin removal.
+Alternatively, to remove a template via the command line in dom0:
```
-$ sudo dnf remove qubes-template--
+$ qvm-template remove
```
-`qubes-template--` is the name of the desired
-template package.
+\ is the first column from the output of:
+```
+$ qvm-template list --installed
+```
+
+In either case, if another qube is based on the template, the template will remain installed and a list of the dependent qubes will be displayed. [Switch](#switching) the dependent qubes to another template before attempting the removal again.
You may see warning messages like the following:
From e1abb55e638ce29bf8ae17f504a83b4ba024e101 Mon Sep 17 00:00:00 2001
From: Oni
Date: Mon, 19 Jun 2023 06:26:18 -0400
Subject: [PATCH 029/332] Retire template removal warning messages
This section was added in response to:
https://github.com/QubesOS/qubes-issues/issues/6432
Seven months later, 'qvm-template' became the installation redirection
target:
https://github.com/QubesOS/qubes-core-admin-linux/pull/80
Now that 'dnf remove' is not being called directly, these warnings
should not be an issue.
---
user/templates/templates.md | 26 --------------------------
1 file changed, 26 deletions(-)
diff --git a/user/templates/templates.md b/user/templates/templates.md
index 30e40635..a15bfc16 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -158,32 +158,6 @@ $ qvm-template list --installed
In either case, if another qube is based on the template, the template will remain installed and a list of the dependent qubes will be displayed. [Switch](#switching) the dependent qubes to another template before attempting the removal again.
-You may see warning messages like the following:
-
-```
-warning: file /var/lib/qubes/vm-templates/fedora-XX/whitelisted-appmenus.list: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/vm-whitelisted-appmenus.list: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/root.img.part.04: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/root.img.part.03: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/root.img.part.02: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/root.img.part.01: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/root.img.part.00: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/netvm-whitelisted-appmenus.list: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/icon.png: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/clean-volatile.img.tar: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/apps.templates: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/apps.tempicons: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX/apps: remove failed: No such file or directory
-warning: file /var/lib/qubes/vm-templates/fedora-XX: remove failed: No such file or directory
-```
-
-These are normal and expected. Nothing is wrong, and no action is required to
-address these warnings.
-
-If the uninstallation command doesn't work, pay close attention to
-any error message: it may tell you what qube is using the template,
-or if the template is default. In other cases, please see [VM Troubleshooting](/doc/vm-troubleshooting/).
-
If the Applications Menu entry doesn't go away after you uninstall a template,
execute the following type of command in dom0:
From 781780f07e7bd24618bfef64e650f482fd914b16 Mon Sep 17 00:00:00 2001
From: Oni
Date: Mon, 19 Jun 2023 06:59:06 -0400
Subject: [PATCH 030/332] Redirect Qubes Menu issues with template
uninstallation
Manually removing Qubes Menu entries is covered on the linked page.
---
user/templates/templates.md | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/user/templates/templates.md b/user/templates/templates.md
index a15bfc16..7bd6a9a3 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -158,19 +158,7 @@ $ qvm-template list --installed
In either case, if another qube is based on the template, the template will remain installed and a list of the dependent qubes will be displayed. [Switch](#switching) the dependent qubes to another template before attempting the removal again.
-If the Applications Menu entry doesn't go away after you uninstall a template,
-execute the following type of command in dom0:
-
-```
-$ rm ~/.local/share/applications/
-```
-
-Applications Menu entries for backups of removed qubes can also be found in
-`/usr/local/share/applications/` of dom0.
-
-```
-$ rm /usr/local/share/applications/
-```
+If the template's entry in the Qubes Menu is not removed with its uninstallation, consult the [troubleshooting page](/doc/app-menu-shortcut-troubleshooting/#fixing-shortcuts).
## Reinstalling
From 1e7a9f7437f6428e9fba97be3dea67de172a80b3 Mon Sep 17 00:00:00 2001
From: Oni
Date: Mon, 19 Jun 2023 08:42:59 -0400
Subject: [PATCH 031/332] Address two potential issues raised when removing a
template
Mentioned the final confirmation step asked for by the `Qube Manager`
to type the template's name. However, before this final confirmation
is displayed, issues may be raised. Deleting templates may run afoul
of dependent qubes and the "default_template" global
property. Instructions to resolve via switching are linked.
---
user/templates/templates.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/templates/templates.md b/user/templates/templates.md
index 7bd6a9a3..651c7a88 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -144,7 +144,7 @@ Please see [How to Install Software](/doc/how-to-install-software).
## Uninstalling
-To remove a template, the graphical `Qube Manager` (Qubes Menu > Qubes Tools > Qube Manager) may be used. Right-click the template to be uninstalled and click "Delete qube" to begin removal.
+To remove a template, the graphical `Qube Manager` (Qubes Menu > Qubes Tools > Qube Manager) may be used. Right-click the template to be uninstalled and click "Delete qube" to begin removal. If no issues are found, a dialog box will request the template's name be typed as a final confirmation. Upon completion, the template will be deleted.
Alternatively, to remove a template via the command line in dom0:
```
@@ -156,7 +156,7 @@ $ qvm-template remove
$ qvm-template list --installed
```
-In either case, if another qube is based on the template, the template will remain installed and a list of the dependent qubes will be displayed. [Switch](#switching) the dependent qubes to another template before attempting the removal again.
+In either case, issues with template removal may be raised. If an issue is raised, the template will remain installed and a list of concerns displayed. "Global property default_template" requires [switching](#switching) the default_template property to another template. "Template for" can be resolved by [switching](#switching) the dependent qubes' template. Once the issues are addressed, attempt the removal again.
If the template's entry in the Qubes Menu is not removed with its uninstallation, consult the [troubleshooting page](/doc/app-menu-shortcut-troubleshooting/#fixing-shortcuts).
From 6e15603483b02bef6ae8f76fca78be3bc93b353e Mon Sep 17 00:00:00 2001
From: Rusty Bird
Date: Tue, 20 Jun 2023 13:52:30 +0000
Subject: [PATCH 032/332] Clarify reading the passphrase
https://forum.qubes-os.org/t/getting-stuck-on-emergency-backup-recovery/18520/5
https://forum.qubes-os.org/t/getting-stuck-on-emergency-backup-recovery/18520/6
---
user/how-to-guides/backup-emergency-restore-v4.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/user/how-to-guides/backup-emergency-restore-v4.md b/user/how-to-guides/backup-emergency-restore-v4.md
index 92b4866c..8688f5b0 100644
--- a/user/how-to-guides/backup-emergency-restore-v4.md
+++ b/user/how-to-guides/backup-emergency-restore-v4.md
@@ -91,6 +91,8 @@ any GNU/Linux system.
[user@restore ~]$ read -r backup_pass
+ Type in your passphrase (it will be visible on screen!) and press Enter.
+
3. Verify the integrity of `backup-header` using `backup-header.hmac` (an
encrypted *and integrity protected* version of `backup-header`).
From 0aee55a8dd6b29a0a55006532c046b56e04c5416 Mon Sep 17 00:00:00 2001
From: Rusty Bird
Date: Tue, 20 Jun 2023 13:52:31 +0000
Subject: [PATCH 033/332] Use ls instead of cat to show example data
https://forum.qubes-os.org/t/getting-stuck-on-emergency-backup-recovery/18520/5
---
user/how-to-guides/backup-emergency-restore-v4.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/user/how-to-guides/backup-emergency-restore-v4.md b/user/how-to-guides/backup-emergency-restore-v4.md
index 8688f5b0..d4baa698 100644
--- a/user/how-to-guides/backup-emergency-restore-v4.md
+++ b/user/how-to-guides/backup-emergency-restore-v4.md
@@ -194,8 +194,9 @@ any GNU/Linux system.
[user@restore ~]$ sudo mkdir /mnt/img
[user@restore ~]$ sudo mount -o loop vm123/private.img /mnt/img/
- [user@restore ~]$ cat /mnt/img/home/user/your_data.txt
- This data has been successfully recovered!
+ [user@restore ~]$ ls /mnt/img/home/user/
+ example_data_file.txt
+ ...
Success! If you wish to recover data from more than one qube in your backup,
simply repeat steps 7, 8, and 9 for each additional qube.
From bd763623ca0702cd1bb360b1e5c830be195d3536 Mon Sep 17 00:00:00 2001
From: taradiddles
Date: Tue, 15 Aug 2023 09:34:37 +0300
Subject: [PATCH 034/332] Update qubes-community links to point to the forum
---
developer/general/documentation-style-guide.md | 2 +-
.../building-guides/building-archlinux-template.md | 2 +-
.../building-non-fedora-template.md | 2 +-
.../building-guides/building-whonix-template.md | 2 +-
external/configuration-guides/change-time-zone.md | 2 +-
external/configuration-guides/disk-trim.md | 2 +-
external/configuration-guides/external-audio.md | 2 +-
external/configuration-guides/fetchmail.md | 2 +-
.../configuration-guides/install-nvidia-driver.md | 2 +-
external/configuration-guides/multiboot.md | 2 +-
external/configuration-guides/multimedia.md | 2 +-
external/configuration-guides/mutt.md | 2 +-
.../configuration-guides/network-bridge-support.md | 2 +-
external/configuration-guides/network-printer.md | 2 +-
external/configuration-guides/postfix.md | 2 +-
external/configuration-guides/rxvt.md | 2 +-
external/configuration-guides/tips-and-tricks.md | 9 ---------
external/configuration-guides/vpn.md | 2 +-
external/configuration-guides/w3m.md | 2 +-
external/configuration-guides/zfs.md | 2 +-
external/customization-guides/dark-theme.md | 2 +-
.../fedora-minimal-template-customization.md | 2 +-
.../customization-guides/language-localization.md | 2 +-
.../removing-templatevm-packages.md | 2 +-
.../windows-template-customization.md | 2 +-
external/os-guides/centos.md | 2 +-
external/os-guides/gentoo.md | 2 +-
external/os-guides/linux-hvm-tips.md | 2 +-
external/os-guides/netbsd.md | 2 +-
external/os-guides/pentesting.md | 9 ---------
external/os-guides/pentesting/blackarch.md | 2 +-
external/os-guides/pentesting/kali.md | 2 +-
external/os-guides/pentesting/ptf.md | 2 +-
external/os-guides/ubuntu.md | 2 +-
.../privacy-guides/anonymizing-your-mac-address.md | 2 +-
external/privacy-guides/signal.md | 2 +-
external/privacy-guides/tails.md | 2 +-
external/privacy-guides/torvm.md | 2 +-
external/privacy-guides/whonix.md | 2 +-
.../security-guides/multifactor-authentication.md | 2 +-
external/security-guides/security-guidelines.md | 2 +-
external/security-guides/split-bitcoin.md | 2 +-
.../troubleshooting/application-troubleshooting.md | 2 +-
.../troubleshooting/intel-igfx-troubleshooting.md | 2 +-
.../troubleshooting/macbook-troubleshooting.md | 2 +-
external/troubleshooting/nvidia-troubleshooting.md | 2 +-
external/troubleshooting/sony-vaio-tinkering.md | 2 +-
external/troubleshooting/tails-troubleshooting.md | 2 +-
.../troubleshooting/thinkpad-troubleshooting.md | 2 +-
introduction/faq.md | 4 ++--
user/advanced-topics/standalones-and-hvms.md | 2 +-
user/how-to-guides/how-to-organize-your-qubes.md | 8 ++++----
user/how-to-guides/how-to-use-optical-discs.md | 2 +-
user/security-in-qubes/anti-evil-maid.md | 4 ++--
user/security-in-qubes/firewall.md | 2 +-
user/templates/minimal-templates.md | 14 +++++++-------
.../installation-troubleshooting.md | 4 ++--
user/troubleshooting/pci-troubleshooting.md | 2 +-
user/troubleshooting/uefi-troubleshooting.md | 2 +-
59 files changed, 69 insertions(+), 87 deletions(-)
delete mode 100644 external/configuration-guides/tips-and-tricks.md
delete mode 100644 external/os-guides/pentesting.md
diff --git a/developer/general/documentation-style-guide.md b/developer/general/documentation-style-guide.md
index 84881663..4b4334e8 100644
--- a/developer/general/documentation-style-guide.md
+++ b/developer/general/documentation-style-guide.md
@@ -262,7 +262,7 @@ Duplicating documentation is almost always a bad idea. There are many reasons fo
### Core vs. external documentation
-Core documentation resides in the [Qubes OS Project's official repositories](https://github.com/QubesOS/), mainly in [qubes-doc](https://github.com/QubesOS/qubes-doc). External documentation can be anywhere else (such as forums, community websites, and blogs), but there is an especially large collection in the [Qubes Community](https://github.com/Qubes-Community) project. External documentation should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc). If you've written a piece of documentation that is not appropriate for [qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit it to the [Qubes Community](https://github.com/Qubes-Community) project instead. However, *linking* to external documentation from [qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine. Indeed, the maintainers of the [Qubes Community](https://github.com/Qubes-Community) project should regularly submit PRs against the documentation index (see [How to edit the documentation index](/doc/how-to-edit-the-documentation/#how-to-edit-the-documentation-index)) to add and update Qubes Community links in the ["External documentation"](/doc/#external-documentation) section of the documentation table of contents.
+Core documentation resides in the [Qubes OS Project's official repositories](https://github.com/QubesOS/), mainly in [qubes-doc](https://github.com/QubesOS/qubes-doc). External documentation can be anywhere else (such as forums, community websites, and blogs), but there is an especially large collection in the [Qubes Forum](https://forum.qubes-os.org/docs). External documentation should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc). If you've written a piece of documentation that is not appropriate for [qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit it to the [Qubes Forum](https://forum.qubes-os.org/docs) instead. However, *linking* to external documentation from [qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine. Indeed, the maintainers of the [Qubes Forum](https://forum.qubes-os.org/) should regularly submit PRs against the documentation index (see [How to edit the documentation index](/doc/how-to-edit-the-documentation/#how-to-edit-the-documentation-index)) to add and update Qubes Community links in the ["External documentation"](/doc/#external-documentation) section of the documentation table of contents.
The main difference between **core** (or **official**) and **external** (or **community** or **unofficial**) documentation is whether it documents software that is officially written and maintained by the Qubes OS Project. The purpose of this distinction is to keep the core docs maintainable and high-quality by limiting them to the software output by the Qubes OS Project. In other words, we take responsibility for documenting all of the software we put out into the world, but it doesn't make sense for us to take on the responsibility of documenting or maintaining documentation for anything else. For example, Qubes OS may use a popular Linux distribution for an official [TemplateVM](/doc/templates/). However, it would not make sense for a comparatively small project like ours, with modest funding and a lean workforce, to attempt to document software belonging to a large, richly-funded project with an army of paid and volunteer contributors, especially when they probably already have documentation of their own. This is particularly true when it comes to Linux in general. Although many users who are new to Qubes are also new to Linux, it makes absolutely no sense for our comparatively tiny project to try to document Linux in general when there is already a plethora of documentation out there.
diff --git a/external/building-guides/building-archlinux-template.md b/external/building-guides/building-archlinux-template.md
index d6bce239..9894d001 100644
--- a/external/building-guides/building-archlinux-template.md
+++ b/external/building-guides/building-archlinux-template.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/building-archlinux-template/
- /doc/BuildingArchlinuxTemplate/
- /wiki/BuildingArchlinuxTemplate/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/building/building-archlinux-template.md
+redirect_to: https://forum.qubes-os.org/t/19052
ref: 116
title: Building Arch Linux template
---
diff --git a/external/building-guides/building-non-fedora-template.md b/external/building-guides/building-non-fedora-template.md
index 9bc8490e..a07b726f 100644
--- a/external/building-guides/building-non-fedora-template.md
+++ b/external/building-guides/building-non-fedora-template.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/building-non-fedora-template/
- /doc/BuildingNonFedoraTemplate/
- /wiki/BuildingNonFedoraTemplate/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/building/building-non-fedora-template.md
+redirect_to: https://forum.qubes-os.org/t/18972
ref: 117
title: Building non-Fedora template
---
diff --git a/external/building-guides/building-whonix-template.md b/external/building-guides/building-whonix-template.md
index 23e29760..a0bbb0e7 100644
--- a/external/building-guides/building-whonix-template.md
+++ b/external/building-guides/building-whonix-template.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/building-whonix-template/
- /en/doc/building-whonix-template/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/building/building-whonix-template.md
+redirect_to: https://forum.qubes-os.org/t/18981
ref: 115
title: Building Whonix templates
---
diff --git a/external/configuration-guides/change-time-zone.md b/external/configuration-guides/change-time-zone.md
index a7666f47..e0cc6bb4 100644
--- a/external/configuration-guides/change-time-zone.md
+++ b/external/configuration-guides/change-time-zone.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/change-time-zone/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/change-time-zone.md
+redirect_to: https://forum.qubes-os.org/t/18983
ref: 109
title: Changing your time zone
---
diff --git a/external/configuration-guides/disk-trim.md b/external/configuration-guides/disk-trim.md
index 60bc1aa7..c8102a07 100644
--- a/external/configuration-guides/disk-trim.md
+++ b/external/configuration-guides/disk-trim.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/disk-trim/
- /doc/DiskTRIM/
- /wiki/DiskTRIM/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/disk-trim.md
+redirect_to: https://forum.qubes-os.org/t/19054
ref: 104
title: Disk TRIM
---
diff --git a/external/configuration-guides/external-audio.md b/external/configuration-guides/external-audio.md
index 4fe19b8b..64392b87 100644
--- a/external/configuration-guides/external-audio.md
+++ b/external/configuration-guides/external-audio.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/external-audio/
- /doc/ExternalAudio/
- /wiki/ExternalAudio/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/external-audio.md
+redirect_to: https://forum.qubes-os.org/t/18984
ref: 100
title: External audio
---
diff --git a/external/configuration-guides/fetchmail.md b/external/configuration-guides/fetchmail.md
index 84d9e772..4f13adcc 100644
--- a/external/configuration-guides/fetchmail.md
+++ b/external/configuration-guides/fetchmail.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/fetchmail/
- /doc/Fetchmail/
- /wiki/Fetchmail/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/fetchmail.md
+redirect_to: https://forum.qubes-os.org/t/18985
ref: 114
title: Fetchmail
---
diff --git a/external/configuration-guides/install-nvidia-driver.md b/external/configuration-guides/install-nvidia-driver.md
index 8c997052..d1b1e967 100644
--- a/external/configuration-guides/install-nvidia-driver.md
+++ b/external/configuration-guides/install-nvidia-driver.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/install-nvidia-driver/
- /doc/InstallNvidiaDriver/
- /wiki/InstallNvidiaDriver/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/install-nvidia-driver.md
+redirect_to: https://forum.qubes-os.org/t/18987
ref: 96
title: How to install an Nvidia driver
---
diff --git a/external/configuration-guides/multiboot.md b/external/configuration-guides/multiboot.md
index 2d7e1841..92aec5bf 100644
--- a/external/configuration-guides/multiboot.md
+++ b/external/configuration-guides/multiboot.md
@@ -1,7 +1,7 @@
---
lang: en
layout: doc
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/multiboot.md
+redirect_to: https://forum.qubes-os.org/t/18988
ref: 112
title: Multibooting
---
diff --git a/external/configuration-guides/multimedia.md b/external/configuration-guides/multimedia.md
index 24369540..5941f17b 100644
--- a/external/configuration-guides/multimedia.md
+++ b/external/configuration-guides/multimedia.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/multimedia/
- /doc/Multimedia/
- /wiki/Multimedia/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/multimedia.md
+redirect_to: https://forum.qubes-os.org/t/19055
ref: 105
title: How to make a multimedia template
---
diff --git a/external/configuration-guides/mutt.md b/external/configuration-guides/mutt.md
index 6ba929df..1b057c17 100644
--- a/external/configuration-guides/mutt.md
+++ b/external/configuration-guides/mutt.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/mutt/
- /doc/Mutt/
- /wiki/Mutt/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/mutt.md
+redirect_to: https://forum.qubes-os.org/t/18989
ref: 106
title: Mutt
---
diff --git a/external/configuration-guides/network-bridge-support.md b/external/configuration-guides/network-bridge-support.md
index 5a460a6e..ea84f401 100644
--- a/external/configuration-guides/network-bridge-support.md
+++ b/external/configuration-guides/network-bridge-support.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/network-bridge-support/
- /doc/NetworkBridgeSupport/
- /wiki/NetworkBridgeSupport/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/network-bridge-support.md
+redirect_to: https://forum.qubes-os.org/t/18990
ref: 113
title: Network bridge support
---
diff --git a/external/configuration-guides/network-printer.md b/external/configuration-guides/network-printer.md
index b29ae5ed..848ab9f1 100644
--- a/external/configuration-guides/network-printer.md
+++ b/external/configuration-guides/network-printer.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/network-printer/
- /doc/NetworkPrinter/
- /wiki/NetworkPrinter/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/network-printer.md
+redirect_to: https://forum.qubes-os.org/t/19056
ref: 108
title: Network printer
---
diff --git a/external/configuration-guides/postfix.md b/external/configuration-guides/postfix.md
index 1ee8be06..03b2c7e3 100644
--- a/external/configuration-guides/postfix.md
+++ b/external/configuration-guides/postfix.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/postfix/
- /doc/Postfix/
- /wiki/Postfix/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/postfix.md
+redirect_to: https://forum.qubes-os.org/t/18991
ref: 107
title: Postfix
---
diff --git a/external/configuration-guides/rxvt.md b/external/configuration-guides/rxvt.md
index 9c47538b..b34dd736 100644
--- a/external/configuration-guides/rxvt.md
+++ b/external/configuration-guides/rxvt.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/rxvt/
- /doc/Rxvt/
- /wiki/Rxvt/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/rxvt.md
+redirect_to: https://forum.qubes-os.org/t/18992
ref: 103
title: Rxvt
---
diff --git a/external/configuration-guides/tips-and-tricks.md b/external/configuration-guides/tips-and-tricks.md
deleted file mode 100644
index 099e51ab..00000000
--- a/external/configuration-guides/tips-and-tricks.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-lang: en
-layout: doc
-redirect_from:
-- /doc/tips-and-tricks/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/tips-and-tricks.md
-ref: 110
-title: Tips and tricks
----
diff --git a/external/configuration-guides/vpn.md b/external/configuration-guides/vpn.md
index 5431af63..f0cd50d8 100644
--- a/external/configuration-guides/vpn.md
+++ b/external/configuration-guides/vpn.md
@@ -7,7 +7,7 @@ redirect_from:
- /en/doc/vpn/
- /doc/VPN/
- /wiki/VPN/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md
+redirect_to: https://forum.qubes-os.org/t/19061
ref: 102
title: VPN
---
diff --git a/external/configuration-guides/w3m.md b/external/configuration-guides/w3m.md
index 50f3642c..c2b701eb 100644
--- a/external/configuration-guides/w3m.md
+++ b/external/configuration-guides/w3m.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/mutt/
- /doc/W3m/
- /wiki/W3m/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/w3m.md
+redirect_to: https://forum.qubes-os.org/t/18993
ref: 101
title: Reducing the fingerprint of the text-based web browser w3m
---
diff --git a/external/configuration-guides/zfs.md b/external/configuration-guides/zfs.md
index 55fb87b2..4d2bf1cd 100644
--- a/external/configuration-guides/zfs.md
+++ b/external/configuration-guides/zfs.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/zfs/
- /doc/ZFS/
- /wiki/ZFS/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/zfs.md
+redirect_to: https://forum.qubes-os.org/t/18994
ref: 111
title: ZFS
---
diff --git a/external/customization-guides/dark-theme.md b/external/customization-guides/dark-theme.md
index 2494fca9..364f926f 100644
--- a/external/customization-guides/dark-theme.md
+++ b/external/customization-guides/dark-theme.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/dark-theme/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/customization/dark-theme.md
+redirect_to: https://forum.qubes-os.org/t/18997
ref: 74
title: Dark theme
---
diff --git a/external/customization-guides/fedora-minimal-template-customization.md b/external/customization-guides/fedora-minimal-template-customization.md
index d9773499..fbb2dc1c 100644
--- a/external/customization-guides/fedora-minimal-template-customization.md
+++ b/external/customization-guides/fedora-minimal-template-customization.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /en/doc/fedora-minimal-template-customization/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/customization/fedora-minimal-template-customization.md
+redirect_to: https://forum.qubes-os.org/t/18999
ref: 76
title: Fedora minimal template customization
---
diff --git a/external/customization-guides/language-localization.md b/external/customization-guides/language-localization.md
index 61015d39..00d729c3 100644
--- a/external/customization-guides/language-localization.md
+++ b/external/customization-guides/language-localization.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/language-localization/
- /doc/LanguageLocalization/
- /wiki/LanguageLocalization/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/customization/language-localization.md
+redirect_to: https://forum.qubes-os.org/t/19001
ref: 73
title: Language localization
---
diff --git a/external/customization-guides/removing-templatevm-packages.md b/external/customization-guides/removing-templatevm-packages.md
index 23efe5a7..7c12637c 100644
--- a/external/customization-guides/removing-templatevm-packages.md
+++ b/external/customization-guides/removing-templatevm-packages.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/removing-templatevm-packages/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/customization/removing-templatevm-packages.md
+redirect_to: https://forum.qubes-os.org/t/19002
ref: 75
title: Removing template packages
---
diff --git a/external/customization-guides/windows-template-customization.md b/external/customization-guides/windows-template-customization.md
index ac368c23..48e0a345 100644
--- a/external/customization-guides/windows-template-customization.md
+++ b/external/customization-guides/windows-template-customization.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/windows-template-customization/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/customization/windows-template-customization.md
+redirect_to: https://forum.qubes-os.org/t/19005
ref: 72
title: Windows template customization
---
diff --git a/external/os-guides/centos.md b/external/os-guides/centos.md
index 68c43e11..149dac25 100644
--- a/external/os-guides/centos.md
+++ b/external/os-guides/centos.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/templates/centos/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/centos.md
+redirect_to: https://forum.qubes-os.org/t/19006
ref: 81
title: CentOS template
---
diff --git a/external/os-guides/gentoo.md b/external/os-guides/gentoo.md
index ac9f89c2..1b2b9607 100644
--- a/external/os-guides/gentoo.md
+++ b/external/os-guides/gentoo.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/templates/gentoo/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/gentoo.md
+redirect_to: https://forum.qubes-os.org/t/19007
ref: 221
title: Gentoo template
---
diff --git a/external/os-guides/linux-hvm-tips.md b/external/os-guides/linux-hvm-tips.md
index 7b1c0e3d..33c45dd1 100644
--- a/external/os-guides/linux-hvm-tips.md
+++ b/external/os-guides/linux-hvm-tips.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/linux-hvm-tips/
- /doc/LinuxHVMTips/
- /wiki/LinuxHVMTips/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/linux-hvm-tips.md
+redirect_to: https://forum.qubes-os.org/t/19008
ref: 82
title: Linux HVM tips
---
diff --git a/external/os-guides/netbsd.md b/external/os-guides/netbsd.md
index 9e37cc5f..2d825bb7 100644
--- a/external/os-guides/netbsd.md
+++ b/external/os-guides/netbsd.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/netbsd/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/netbsd.md
+redirect_to: https://forum.qubes-os.org/t/19009
ref: 84
title: How to create a NetBSD qube
---
diff --git a/external/os-guides/pentesting.md b/external/os-guides/pentesting.md
deleted file mode 100644
index 8828e5d8..00000000
--- a/external/os-guides/pentesting.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-lang: en
-layout: doc
-redirect_from:
-- /doc/pentesting/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/pentesting.md
-ref: 83
-title: Penetration testing
----
diff --git a/external/os-guides/pentesting/blackarch.md b/external/os-guides/pentesting/blackarch.md
index a353c37b..d23081e1 100644
--- a/external/os-guides/pentesting/blackarch.md
+++ b/external/os-guides/pentesting/blackarch.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/pentesting/blackarch/
- /doc/blackarch/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/pentesting/blackarch.md
+redirect_to: https://forum.qubes-os.org/t/19010
ref: 88
title: How to create a BlackArch qube
---
diff --git a/external/os-guides/pentesting/kali.md b/external/os-guides/pentesting/kali.md
index 817b5aba..9bd1f6b4 100644
--- a/external/os-guides/pentesting/kali.md
+++ b/external/os-guides/pentesting/kali.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/pentesting/kali/
- /doc/kali/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/pentesting/kali.md
+redirect_to: https://forum.qubes-os.org/t/19071
ref: 87
title: How to create a Kali Linux qube
---
diff --git a/external/os-guides/pentesting/ptf.md b/external/os-guides/pentesting/ptf.md
index 440b660b..b8639f32 100644
--- a/external/os-guides/pentesting/ptf.md
+++ b/external/os-guides/pentesting/ptf.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/pentesting/ptf/
- /doc/ptf/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/pentesting/ptf.md
+redirect_to: https://forum.qubes-os.org/t/19011
ref: 89
title: How to create penetration testers framework (PTF) qube
---
diff --git a/external/os-guides/ubuntu.md b/external/os-guides/ubuntu.md
index 3a877c8f..6a98b073 100644
--- a/external/os-guides/ubuntu.md
+++ b/external/os-guides/ubuntu.md
@@ -7,7 +7,7 @@ redirect_from:
- /en/doc/templates/ubuntu/
- /doc/Templates/Ubuntu/
- /wiki/Templates/Ubuntu/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/os/ubuntu.md
+redirect_to: https://qubes.3isec.org
ref: 80
title: Ubuntu template
---
diff --git a/external/privacy-guides/anonymizing-your-mac-address.md b/external/privacy-guides/anonymizing-your-mac-address.md
index b7ff2f67..99518ef1 100644
--- a/external/privacy-guides/anonymizing-your-mac-address.md
+++ b/external/privacy-guides/anonymizing-your-mac-address.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/anonymizing-your-mac-address/
- /doc/randomizing-your-mac-address/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/anonymizing-your-mac-address.md
+redirect_to: https://forum.qubes-os.org/t/19072
ref: 67
title: Anonymizing your MAC address
---
diff --git a/external/privacy-guides/signal.md b/external/privacy-guides/signal.md
index 9999a1f1..2341d865 100644
--- a/external/privacy-guides/signal.md
+++ b/external/privacy-guides/signal.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/signal/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/signal.md
+redirect_to: https://forum.qubes-os.org/t/19073
ref: 70
title: Signal
---
diff --git a/external/privacy-guides/tails.md b/external/privacy-guides/tails.md
index 6de580b5..ffc55e54 100644
--- a/external/privacy-guides/tails.md
+++ b/external/privacy-guides/tails.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/tails/
- /doc/running-tails/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/tails.md
+redirect_to: https://forum.qubes-os.org/t/19012
ref: 71
title: Running Tails in qubes
---
diff --git a/external/privacy-guides/torvm.md b/external/privacy-guides/torvm.md
index b5177ff3..8010e81d 100644
--- a/external/privacy-guides/torvm.md
+++ b/external/privacy-guides/torvm.md
@@ -8,7 +8,7 @@ redirect_from:
- /doc/TorVM/
- /doc/UserDoc/TorVM/
- /wiki/UserDoc/TorVM/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/torvm.md
+redirect_to: https://forum.qubes-os.org/t/19013
ref: 68
title: TorVM
---
diff --git a/external/privacy-guides/whonix.md b/external/privacy-guides/whonix.md
index 8f8c7abb..580b2a87 100644
--- a/external/privacy-guides/whonix.md
+++ b/external/privacy-guides/whonix.md
@@ -16,7 +16,7 @@ redirect_from:
- /doc/privacy/uninstall-whonix/
- /doc/whonix/update/
- /doc/privacy/updating-whonix/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/whonix.md
+redirect_to: https://forum.qubes-os.org/t/19014
ref: 69
title: Whonix for privacy & anonymity
---
diff --git a/external/security-guides/multifactor-authentication.md b/external/security-guides/multifactor-authentication.md
index 7912b8ed..4d0e8c4f 100644
--- a/external/security-guides/multifactor-authentication.md
+++ b/external/security-guides/multifactor-authentication.md
@@ -5,7 +5,7 @@ redirect_from:
- /doc/multifactor-authentication/
- /en/doc/multifactor-authentication/
- /doc/Multi-factorAuthentication/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/security/multifactor-authentication.md
+redirect_to: https://forum.qubes-os.org/t/19016
ref: 78
title: Multifactor authentication
---
diff --git a/external/security-guides/security-guidelines.md b/external/security-guides/security-guidelines.md
index eb4d4542..36af472a 100644
--- a/external/security-guides/security-guidelines.md
+++ b/external/security-guides/security-guidelines.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/security-guidelines/
- /doc/SecurityGuidelines/
- /wiki/SecurityGuidelines/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md
+redirect_to: https://forum.qubes-os.org/t/19075
ref: 79
title: Security guidelines
---
diff --git a/external/security-guides/split-bitcoin.md b/external/security-guides/split-bitcoin.md
index a192a5e6..8ffc3258 100644
--- a/external/security-guides/split-bitcoin.md
+++ b/external/security-guides/split-bitcoin.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/split-bitcoin/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/security/split-bitcoin.md
+redirect_to: https://forum.qubes-os.org/t/19017
ref: 77
title: Split Bitcoin
---
diff --git a/external/troubleshooting/application-troubleshooting.md b/external/troubleshooting/application-troubleshooting.md
index 5c5efb04..b10ddc7f 100644
--- a/external/troubleshooting/application-troubleshooting.md
+++ b/external/troubleshooting/application-troubleshooting.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/application-troubleshooting/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/application-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19019
ref: 236
title: Application troubleshooting
---
diff --git a/external/troubleshooting/intel-igfx-troubleshooting.md b/external/troubleshooting/intel-igfx-troubleshooting.md
index f616fbda..f733031b 100644
--- a/external/troubleshooting/intel-igfx-troubleshooting.md
+++ b/external/troubleshooting/intel-igfx-troubleshooting.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/intel-igfx-troubleshooting/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/intel-igfx-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19081
ref: 90
title: Intel integrated graphics troubleshooting
---
diff --git a/external/troubleshooting/macbook-troubleshooting.md b/external/troubleshooting/macbook-troubleshooting.md
index 955e21ad..face9f66 100644
--- a/external/troubleshooting/macbook-troubleshooting.md
+++ b/external/troubleshooting/macbook-troubleshooting.md
@@ -1,7 +1,7 @@
---
lang: en
layout: doc
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/macbook-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19020
ref: 238
title: Apple MacBook troubleshooting
---
diff --git a/external/troubleshooting/nvidia-troubleshooting.md b/external/troubleshooting/nvidia-troubleshooting.md
index f9d686f9..a628141b 100644
--- a/external/troubleshooting/nvidia-troubleshooting.md
+++ b/external/troubleshooting/nvidia-troubleshooting.md
@@ -4,7 +4,7 @@ layout: doc
redirect_from:
- /doc/NvidiaTroubleshooting/
- /wiki/NvidiaTroubleshooting/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/nvidia-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19021
ref: 91
title: Nvidia troubleshooting
---
diff --git a/external/troubleshooting/sony-vaio-tinkering.md b/external/troubleshooting/sony-vaio-tinkering.md
index 19fe54c4..7191850b 100644
--- a/external/troubleshooting/sony-vaio-tinkering.md
+++ b/external/troubleshooting/sony-vaio-tinkering.md
@@ -6,7 +6,7 @@ redirect_from:
- /en/doc/sony-vaio-tinkering/
- /doc/SonyVaioTinkering/
- /wiki/SonyVaioTinkering/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/sony-vaio-tinkering.md
+redirect_to: https://forum.qubes-os.org/t/19022
ref: 93
title: Sony Vaio tinkering
---
diff --git a/external/troubleshooting/tails-troubleshooting.md b/external/troubleshooting/tails-troubleshooting.md
index 6b815f49..1d933244 100644
--- a/external/troubleshooting/tails-troubleshooting.md
+++ b/external/troubleshooting/tails-troubleshooting.md
@@ -3,7 +3,7 @@ lang: en
layout: doc
redirect_from:
- /doc/tails-troubleshooting/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/tails-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19023
ref: 237
title: Tails troubleshooting
---
diff --git a/external/troubleshooting/thinkpad-troubleshooting.md b/external/troubleshooting/thinkpad-troubleshooting.md
index 42f25997..e0e99603 100644
--- a/external/troubleshooting/thinkpad-troubleshooting.md
+++ b/external/troubleshooting/thinkpad-troubleshooting.md
@@ -11,7 +11,7 @@ redirect_from:
- /en/doc/lenovo450-tinkering/
- /doc/Lenovo450Tinkering/
- /wiki/Lenovo450Tinkering/
-redirect_to: https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/thinkpad-troubleshooting.md
+redirect_to: https://forum.qubes-os.org/t/19024
ref: 95
title: Lenovo ThinkPad troubleshooting
---
diff --git a/introduction/faq.md b/introduction/faq.md
index 5b334e91..2258ee1b 100644
--- a/introduction/faq.md
+++ b/introduction/faq.md
@@ -459,7 +459,7 @@ You have to restart the NetVM after the template has been shut down.
### Can I install Qubes OS together with other operating system (dual-boot/multi-boot)?
You shouldn't do that, because it poses a security risk for your Qubes OS installation.
-But if you understand the risk and accept it, read [documentation on multibooting](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/multiboot.md).
+But if you understand the risk and accept it, read [documentation on multibooting](https://forum.qubes-os.org/t/18988).
It begins with an explanation of the risks with such a setup.
### Which version of Qubes am I running?
@@ -806,4 +806,4 @@ If you need to support not-fully-updated systems, check for the existence of `/u
Yes, Qubes natively supports automation via [Salt (SaltStack)](/doc/salt/).
There is also the unofficial [ansible-qubes toolkit](https://github.com/Rudd-O/ansible-qubes).
-(**Warning:** Since this is an external project that has not been reviewed or endorsed by the Qubes team, [allowing it to manage dom0 may be a security risk](https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md#dom0-precautions).)
+(**Warning:** Since this is an external project that has not been reviewed or endorsed by the Qubes team, [allowing it to manage dom0 may be a security risk](https://forum.qubes-os.org/t/19075#dom0-precautions).)
diff --git a/user/advanced-topics/standalones-and-hvms.md b/user/advanced-topics/standalones-and-hvms.md
index a911dc55..038f4f71 100644
--- a/user/advanced-topics/standalones-and-hvms.md
+++ b/user/advanced-topics/standalones-and-hvms.md
@@ -440,4 +440,4 @@ qemu-img -h | tail -n1
Other documents related to HVMs:
- [Windows VMs](https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-vm.md)
-- [Linux HVM Tips](https://github.com/Qubes-Community/Contents/blob/master/docs/os/linux-hvm-tips.md)
+- [Linux HVM Tips](https://forum.qubes-os.org/t/19008)
diff --git a/user/how-to-guides/how-to-organize-your-qubes.md b/user/how-to-guides/how-to-organize-your-qubes.md
index 406d346d..e5c9891b 100644
--- a/user/how-to-guides/how-to-organize-your-qubes.md
+++ b/user/how-to-guides/how-to-organize-your-qubes.md
@@ -99,7 +99,7 @@ the other. Alice's setup looks like this:
- **Several email qubes.** Since Alice is a command-line aficionado, she likes
to use a terminal-based email client, so both her work and personal email
qubes are based on a template with
- [Mutt](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/mutt.md)
+ [Mutt](https://forum.qubes-os.org/t/18989)
installed. The email qubes where she sends and receives PGP-signed and
encrypted email securely accesses the private keys in her PGP backend qube
(more on that below). To guard against malicious attachments, she configured
@@ -199,7 +199,7 @@ for work, which contains:
communication.
- **Two qubes for
- [Signal](https://github.com/Qubes-Community/Contents/blob/master/docs/privacy/signal.md).**
+ [Signal](https://forum.qubes-os.org/t/19073).**
Bob has two Signal app qubes (both on the same template in which the Signal
desktop app is installed). One is linked to his own mobile number for
communicating with co-workers and other known, trusted contacts. The other is
@@ -217,7 +217,7 @@ for work, which contains:
the side benefit of helping to keep things organized.
- **A [VPN
- qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md)
+ qube](https://forum.qubes-os.org/t/19061)
and associated qubes for accessing work resources.** The servers at work can
only be accessed from the organization's network, so Bob has certain qubes
that are connected to a VPN qube so that he can upload his work and access
@@ -391,7 +391,7 @@ Carol has added the following to her Qubes setup:
physically air-gapped machine, but she's figures they all have different
security properties. She also recently heard about using [Electrum as a
"split" wallet in
- Qubes](https://github.com/Qubes-Community/Contents/blob/master/docs/security/split-bitcoin.md)
+ Qubes](https://forum.qubes-os.org/t/19017)
and is interested in exploring that further.
- **Whonix qubes.** Carol read somewhere that Bitcoin nodes should be run over
diff --git a/user/how-to-guides/how-to-use-optical-discs.md b/user/how-to-guides/how-to-use-optical-discs.md
index 4d9cf4f7..4b7b536e 100644
--- a/user/how-to-guides/how-to-use-optical-discs.md
+++ b/user/how-to-guides/how-to-use-optical-discs.md
@@ -17,7 +17,7 @@ Currently, the only options for reading and recording optical discs (e.g., CDs,
1. Use a USB optical drive.
2. Attach a SATA optical drive to a secondary SATA controller, then assign this secondary SATA controller to a VM.
3. Use a SATA optical drive attached to dom0.
- (**Caution:** This option is [potentially dangerous](https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md#dom0-precautions).)
+ (**Caution:** This option is [potentially dangerous](https://forum.qubes-os.org/t/19075#dom0-precautions).)
To access an optical disc via USB follow the [typical procedure for attaching a USB device](/doc/how-to-use-usb-devices/#with-the-command-line-tool), then check with the **Qubes Devices** widget to see what device in the target qube the USB optical drive was attached to.
Typically this would be `sr0`.
diff --git a/user/security-in-qubes/anti-evil-maid.md b/user/security-in-qubes/anti-evil-maid.md
index 19ac3193..0bcf0964 100644
--- a/user/security-in-qubes/anti-evil-maid.md
+++ b/user/security-in-qubes/anti-evil-maid.md
@@ -39,7 +39,7 @@ For more information, see the [qubes-antievilmaid](https://github.com/QubesOS/qu
Security Considerations
-----------------------
-[Qubes security guidelines](https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md) dictate that USB devices should never be attached directly to dom0, since this can result in the entire system being compromised.
+[Qubes security guidelines](https://forum.qubes-os.org/t/19075) dictate that USB devices should never be attached directly to dom0, since this can result in the entire system being compromised.
However, in its default configuration, installing and using AEM requires attaching a USB drive (i.e., [mass storage device](https://en.wikipedia.org/wiki/USB_mass_storage_device_class)) directly to dom0.
(The other option is to install AEM to an internal disk.
However, this carries significant security implications, as explained [here](https://blog.invisiblethings.org/2011/09/07/anti-evil-maid.html).) This presents us with a classic security trade-off: each Qubes user must make a choice between protecting dom0 from a potentially malicious USB drive, on the one hand, and protecting the system from Evil Maid attacks, on the other hand.
@@ -50,7 +50,7 @@ Therefore, it is up to each individual Qubes user to evaluate the relative risk
For example, a user who frequently travels with a Qubes laptop holding sensitive data may be at a much higher risk of Evil Maid attacks than a home user with a stationary Qubes desktop.
If the frequent traveler judges her risk of an Evil Maid attack to be higher than the risk of a malicious USB device, she might reasonably opt to install and use AEM.
On the other hand, the home user might deem the probability of an Evil Maid attack occurring in her own home to be so low that there is a higher probability that any USB drive she purchases is already compromised, in which case she might reasonably opt never to attach any USB devices directly to dom0.
-(In either case, users can--and should--secure dom0 against further USB-related attacks through the use of a [USB VM](https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md#creating-and-using-a-usbvm).)
+(In either case, users can--and should--secure dom0 against further USB-related attacks through the use of a [USB VM](https://forum.qubes-os.org/t/19075#creating-and-using-a-usbvm).)
For more information, please see [this discussion thread](https://groups.google.com/d/msg/qubes-devel/EBc4to5IBdg/n1hfsHSfbqsJ).
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 7a5ad072..2974209b 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -88,7 +88,7 @@ The sys-firewall-2 proxy ensures that:
If you adopt this model, you should be aware that all traffic will arrive at the `network service qube` appearing to originate from the IP address of `sys-firewall-2`.
-For the VPN service please also look at the [VPN documentation](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md).
+For the VPN service please also look at the [VPN documentation](https://forum.qubes-os.org/t/19061).
Enabling networking between two qubes
-------------------------------------
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 8d63fbc4..4b5a394f 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -155,12 +155,12 @@ list of packages to be installed):
`qubes-usb-proxy` to provide USB devices to other Qubes and
`qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
- [VPN
- qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ qube](https://forum.qubes-os.org/t/19061):
Use the `dnf search "NetworkManager VPN plugin"` command to look up the VPN
packages you need, based on the VPN technology you'll be using, and install
them. Some GNOME related packages may be needed as well. After creation of a
machine based on this template, follow the [VPN
- instructions](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ instructions](https://forum.qubes-os.org/t/19061#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
to configure it.
- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
`qubes-mgmt-salt-vm-connector`.
@@ -206,7 +206,7 @@ You may also wish to consider additional packages from the `qubes-core-agent`
suite.
See
-[here](https://github.com/Qubes-Community/Contents/blob/master/docs/customization/fedora-minimal-template-customization.md)
+[here](https://forum.qubes-os.org/t/18999)
for further information on customizing `fedora-minimal`.
#### Logging
@@ -254,11 +254,11 @@ list of packages to be installed):
pair it with `qubes-core-agent-passwordless-root` or manually activate the
user session with `loginctl activate `.)
- [VPN
- qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ qube](https://forum.qubes-os.org/t/19061):
You may need to install network-manager VPN packages, depending on the VPN
technology you'll be using. After creating a machine based on this template,
follow the [VPN
- howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ howto](https://forum.qubes-os.org/t/19061#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
to configure it.
- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
`qubes-mgmt-salt-vm-connector`.
@@ -334,11 +334,11 @@ list of packages to be installed):
`qubes-usb-proxy` to provide USB devices to other Qubes and
`qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
- [VPN
- qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ qube](https://forum.qubes-os.org/t/19061):
You may need to install network-manager VPN packages, depending on the VPN
technology you'll be using. After creating a machine based on this template,
follow the [VPN
- howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ howto](https://forum.qubes-os.org/t/19061#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
to configure it.
- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
`qubes-mgmt-salt-vm-connector`.
diff --git a/user/troubleshooting/installation-troubleshooting.md b/user/troubleshooting/installation-troubleshooting.md
index ddbf1a5c..ffc53e7a 100644
--- a/user/troubleshooting/installation-troubleshooting.md
+++ b/user/troubleshooting/installation-troubleshooting.md
@@ -75,11 +75,11 @@ These errors may also occur due to an incompatible Nvidia graphics card. If you
noexitboot=1 modprobe.blacklist=nouveau rd.driver.blacklist=nouveau --- intitrd.img
```
-For more information, look at the [Nvidia Troubleshooting guide](https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/nvidia-troubleshooting.md#disabling-nouveau).
+For more information, look at the [Nvidia Troubleshooting guide](https://forum.qubes-os.org/t/19021#disabling-nouveau).
## Installation freezes at "Setting up Networking"
-If you are facing this problem on an Apple computer, check out the [Macbook Troubleshooting guide](https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/macbook-troubleshooting.md).
+If you are facing this problem on an Apple computer, check out the [Macbook Troubleshooting guide](https://forum.qubes-os.org/t/19020).
If you are installing Qubes 4.0 on an external storage device, you may have forgotten to disable `sys-usb` during the [initial setup](/doc/installation-guide/#initial-setup), which is generally required for that setup to work.
diff --git a/user/troubleshooting/pci-troubleshooting.md b/user/troubleshooting/pci-troubleshooting.md
index c1aad95b..42d30254 100644
--- a/user/troubleshooting/pci-troubleshooting.md
+++ b/user/troubleshooting/pci-troubleshooting.md
@@ -120,7 +120,7 @@ You can also configure strict reset directly from the Qubes interface by followi
## Broadcom BCM43602 Wi-Fi card causes system freeze
-You may face the problem where the BCM43602 Wi-Fi chip causes a system freeze whenever it is attached to a VM. To fix this problem on a Macbook, follow the steps in [Macbook Troubleshooting](https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/macbook-troubleshooting.md#system-freezes-after-attaching-broadcom-bcm43602-wi-fi-card).
+You may face the problem where the BCM43602 Wi-Fi chip causes a system freeze whenever it is attached to a VM. To fix this problem on a Macbook, follow the steps in [Macbook Troubleshooting](https://forum.qubes-os.org/t/19020#system-freezes-after-attaching-broadcom-bcm43602-wi-fi-card).
For other non-Macbook machines, it is advisable to replace the Broadcom BCM43602 with one known to work on Qubes, such as the Atheros AR9462.
diff --git a/user/troubleshooting/uefi-troubleshooting.md b/user/troubleshooting/uefi-troubleshooting.md
index 0c84934a..35e33877 100644
--- a/user/troubleshooting/uefi-troubleshooting.md
+++ b/user/troubleshooting/uefi-troubleshooting.md
@@ -30,7 +30,7 @@ If you've installed successfully in legacy mode but had to change some kernel pa
## Installation freezes before displaying installer
-If you have an Nvidia card, see also [Nvidia Troubleshooting](https://github.com/Qubes-Community/Contents/blob/master/docs/troubleshooting/nvidia-troubleshooting.md#disabling-nouveau).
+If you have an Nvidia card, see also [Nvidia Troubleshooting](https://forum.qubes-os.org/t/19021#disabling-nouveau).
### Removing `noexitboot` and `mapbs`
From f6db6fc2dae3c843710ce4b465fe9de343e1c030 Mon Sep 17 00:00:00 2001
From: taradiddles
Date: Tue, 15 Aug 2023 09:37:49 +0300
Subject: [PATCH 035/332] Fix remaining mention of qubes-community
---
developer/general/documentation-style-guide.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/general/documentation-style-guide.md b/developer/general/documentation-style-guide.md
index 4b4334e8..79146d96 100644
--- a/developer/general/documentation-style-guide.md
+++ b/developer/general/documentation-style-guide.md
@@ -262,7 +262,7 @@ Duplicating documentation is almost always a bad idea. There are many reasons fo
### Core vs. external documentation
-Core documentation resides in the [Qubes OS Project's official repositories](https://github.com/QubesOS/), mainly in [qubes-doc](https://github.com/QubesOS/qubes-doc). External documentation can be anywhere else (such as forums, community websites, and blogs), but there is an especially large collection in the [Qubes Forum](https://forum.qubes-os.org/docs). External documentation should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc). If you've written a piece of documentation that is not appropriate for [qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit it to the [Qubes Forum](https://forum.qubes-os.org/docs) instead. However, *linking* to external documentation from [qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine. Indeed, the maintainers of the [Qubes Forum](https://forum.qubes-os.org/) should regularly submit PRs against the documentation index (see [How to edit the documentation index](/doc/how-to-edit-the-documentation/#how-to-edit-the-documentation-index)) to add and update Qubes Community links in the ["External documentation"](/doc/#external-documentation) section of the documentation table of contents.
+Core documentation resides in the [Qubes OS Project's official repositories](https://github.com/QubesOS/), mainly in [qubes-doc](https://github.com/QubesOS/qubes-doc). External documentation can be anywhere else (such as forums, community websites, and blogs), but there is an especially large collection in the [Qubes Forum](https://forum.qubes-os.org/docs). External documentation should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc). If you've written a piece of documentation that is not appropriate for [qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit it to the [Qubes Forum](https://forum.qubes-os.org/docs) instead. However, *linking* to external documentation from [qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine. Indeed, the maintainers of the [Qubes Forum](https://forum.qubes-os.org/) should regularly submit PRs against the documentation index (see [How to edit the documentation index](/doc/how-to-edit-the-documentation/#how-to-edit-the-documentation-index)) to add and update Qubes Forum links in the ["External documentation"](/doc/#external-documentation) section of the documentation table of contents.
The main difference between **core** (or **official**) and **external** (or **community** or **unofficial**) documentation is whether it documents software that is officially written and maintained by the Qubes OS Project. The purpose of this distinction is to keep the core docs maintainable and high-quality by limiting them to the software output by the Qubes OS Project. In other words, we take responsibility for documenting all of the software we put out into the world, but it doesn't make sense for us to take on the responsibility of documenting or maintaining documentation for anything else. For example, Qubes OS may use a popular Linux distribution for an official [TemplateVM](/doc/templates/). However, it would not make sense for a comparatively small project like ours, with modest funding and a lean workforce, to attempt to document software belonging to a large, richly-funded project with an army of paid and volunteer contributors, especially when they probably already have documentation of their own. This is particularly true when it comes to Linux in general. Although many users who are new to Qubes are also new to Linux, it makes absolutely no sense for our comparatively tiny project to try to document Linux in general when there is already a plethora of documentation out there.
From 98acc2c5b1bb90521c0cb073ba910c0b7036b602 Mon Sep 17 00:00:00 2001
From: Krzysztof Katowicz-Kowalewski
Date: Sun, 27 Aug 2023 15:35:33 +0200
Subject: [PATCH 036/332] Update volume-backup-revert.md
fixing typo: 'minimum' to 'maximum'
---
user/advanced-topics/volume-backup-revert.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/advanced-topics/volume-backup-revert.md b/user/advanced-topics/volume-backup-revert.md
index 50351107..3d836cc3 100644
--- a/user/advanced-topics/volume-backup-revert.md
+++ b/user/advanced-topics/volume-backup-revert.md
@@ -31,7 +31,7 @@ qvm-volume info vmname:private
The output of the above command will also display the "Available revisions
(for revert)" at the bottom. For a very large volume in a small pool,
-revisions_to_keep should probably be set to the minimum value of 1 to minimize
+revisions_to_keep should probably be set to the maximum value of 1 to minimize
the possibility of the pool being accidentally filled up by snapshots. For a
smaller volume for which you would like to have the future option of reverting,
revisions_to_keep should probably be set to at least 2. To set
From 09ec28134430cccbf2124ea6032c69ae7c5a3f08 Mon Sep 17 00:00:00 2001
From: Ben Grande
Date: Wed, 4 Oct 2023 21:16:40 +0000
Subject: [PATCH 037/332] Add Wi-Fi requirement to Debian minimal templates
Removed:
- qubes-core-agent-networking: already a dependency of
qubes-core-agent-network-manager;
Added:
- wpasupplicant: required for Wi-Fi, it is recommended by
network-manager but is not installed if not installing recommends.
It is required on Fedora by NetworkManager-wifi and was installed by
default on Debian Minimal before
https://github.com/QubesOS/qubes-builder-debian/pull/74;
- gnome-keyring: already recommended on the Fedora section, saves Wi-Fi
password;
---
user/templates/minimal-templates.md | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 8d63fbc4..c4787ef5 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -240,12 +240,14 @@ list of packages to be installed):
- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates`
if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
-- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
- `qubes-core-agent-network-manager`. If your network devices need extra
- packages for a network VM, use the `lspci` command to identify the devices,
- then find the package that provides necessary firmware and install it. If you
- need utilities for debugging and analyzing network connections, install the
- following packages: `tcpdump` `telnet` `nmap` `ncat`.
+- NetVM, such as the template for `sys-net`: Ethernet requires
+ `qubes-core-agent-network-manager`, and Wi-Fi requires the previous
+ package(s) plus `wpasupplicant`, optionally `gnome-keyring` for saving the
+ Wi-Fi password. If your network devices need extra packages for a network
+ VM, use the `lspci` command to identify the devices, then find the package
+ that provides necessary firmware and install it. If you need utilities for
+ debugging and analyzing network connections, install the following packages:
+ `tcpdump` `telnet` `nmap` `ncat`.
- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`:
`qubes-usb-proxy` to provide USB devices to other Qubes and
`qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
From d9560c17aae00b5712a789f0c4b127cb867aa05c Mon Sep 17 00:00:00 2001
From: Gordon Shumway <60302611+gordon-shumway-net@users.noreply.github.com>
Date: Sat, 14 Oct 2023 22:51:21 +0200
Subject: [PATCH 038/332] added ntp package hint
---
user/templates/minimal-templates.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 8d63fbc4..f902f8d5 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -241,8 +241,8 @@ list of packages to be installed):
least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates`
if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
- `qubes-core-agent-network-manager`. If your network devices need extra
- packages for a network VM, use the `lspci` command to identify the devices,
+ `qubes-core-agent-network-manager` `systemd-timesyncd`(or other NTP Service).
+ If your network devices need extra packages for a network VM, use the `lspci` command to identify the devices,
then find the package that provides necessary firmware and install it. If you
need utilities for debugging and analyzing network connections, install the
following packages: `tcpdump` `telnet` `nmap` `ncat`.
From 299f31f37b584c6c23a81e3fbd9a6948bd42bb08 Mon Sep 17 00:00:00 2001
From: Gordon Shumway <60302611+gordon-shumway-net@users.noreply.github.com>
Date: Sun, 15 Oct 2023 17:34:48 +0200
Subject: [PATCH 039/332] First revision of an disposable creation intro
---
user/how-to-guides/how-to-use-disposables.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/user/how-to-guides/how-to-use-disposables.md b/user/how-to-guides/how-to-use-disposables.md
index 7999d8b7..2778d2ff 100644
--- a/user/how-to-guides/how-to-use-disposables.md
+++ b/user/how-to-guides/how-to-use-disposables.md
@@ -22,6 +22,22 @@ From inside an app qube, choosing the `Open in disposable` option on a file will
This diagram provides a general example of how disposables can be used to safely open untrusted links and attachments in disposables. See [this article](https://blog.invisiblethings.org/2010/06/01/disposable-vms.html) for more on why one would want to use a disposable.
+## Named disposables and disposable templates
+
+There is a difference between [named disposables](/doc/glossary/#named-disposable) and [disposable templates](/doc/glossary/#disposable-template).
+
+In a default QubesOS Installation, you would probably use the 'whonix-ws-16-dvm' if you, as an example, want to browse the Tor network with an disposable. Every application starts a new random disposable with an ID in the name and if you close the window, it shuts down the qube. This is the feeling of an disposable template.
+
+In named disposables every application starts in the same qube, the qube itself has a fixed name and you need to manually shutdown the qube. Except from the non-persistance, they feel like usual app qubes. Named disposables are built upon disposable templates.
+
+### How to create disposable templates
+
+First you need to create an app qube. After that you need to go to the 'Qubes Settings' of the created app qube and set it as a 'Disposable template' in the 'Advanced' section and apply the change. From now on the entry in the Application menu is not named 'Qube' anymore, but splitted into 'Disposable' and 'Template (disp)'. The settings for the disposable can be changed under **'Application Menu -> Template (disp) -> Template: Qubes Settings**
+
+### How to create named disposables
+
+Named disposables can be created under **Application Menu -> Create Qubes VM**, the type needs to be 'DisposableVM'.
+
## Security
If a [disposable template](/doc/glossary/#disposable-template) becomes compromised, then any disposable based on that disposable template could be compromised. In particular, the *default* disposable template is important because it is used by the "Open in disposable" feature. This means that it will have access to everything that you open with this feature. For this reason, it is strongly recommended that you base the default disposable template on a trusted template.
From e3e23814d0f6ef4d1832d6fe863a1fc20317509d Mon Sep 17 00:00:00 2001
From: Patrick Schleizer
Date: Tue, 24 Oct 2023 10:25:31 -0400
Subject: [PATCH 040/332] Update managing-vm-kernels.md
---
user/advanced-topics/managing-vm-kernels.md | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/user/advanced-topics/managing-vm-kernels.md b/user/advanced-topics/managing-vm-kernels.md
index 903151ad..5c7ba0d6 100644
--- a/user/advanced-topics/managing-vm-kernels.md
+++ b/user/advanced-topics/managing-vm-kernels.md
@@ -275,9 +275,11 @@ grub2-probe: error: cannot find a GRUB drive for /dev/mapper/dmroot. Check your
Then shutdown the VM.
-**Note:** You may also use `PV` mode instead of `HVM` but this is not recommended for security purposes.
-If you require `PV` mode, install `grub2-xen` in dom0 and change the template's kernel to `pvgrub2`.
-Booting to a kernel inside the template is not supported under `PVH`.
+**Notes:**
+
+* You may also use `PV` mode instead of `HVM` but this is not recommended for security purposes.
+* If you require `PV` mode, install `grub2-xen-pvh` in dom0 and change the template's kernel to `pvgrub2-pvh`.
+* Booting to a kernel inside the template is not supported under `PVH`.
### Installing kernel in Debian VM
@@ -311,7 +313,7 @@ Go to dom0 -> Qubes VM Manger -> right click on the VM -> Qube settings -> Advan
Depends on `Virtualization` mode setting:
* `Virtualization` mode `PV`: Possible, however use of `Virtualization` mode `PV` mode is discouraged for security purposes.
- * If you require `Virtualization` mode `PV` mode, install `grub2-xen` in dom0. This can be done by running command `sudo qubes-dom0-update grub2-xen` in dom0.
+ * If you require `Virtualization` mode `PV` mode, install `grub2-xen-pvh` in dom0. This can be done by running command `sudo qubes-dom0-update pvgrub2-pvh in dom0.
* `Virtualization` mode `PVH`: Possible.
* `Virtualization` mode `HVM`: Possible.
From b1d22b6d6bc1be93246faa19406d89d3d6a516f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 12:17:09 +0100
Subject: [PATCH 041/332] doc: firewall: small improvements
---
user/security-in-qubes/firewall.md | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 7a5ad072..369308f9 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -31,8 +31,8 @@ In order to edit rules for a given qube, select it in the Qube Manager and press
If the qube is running, you can open Settings from the Qube Popup Menu.
-*R4.0 note:* ICMP and DNS are no longer accessible in the GUI, but can be changed via `qvm-firewall` described below.
-Connections to Updates Proxy are not made over a network so can not be allowed or blocked with firewall rules, but are controlled using the relevant policy file (see [R4.0 Updates proxy](/doc/software-update-vm/) for more detail).
+ICMP and DNS are not accessible in the GUI, but can be changed via `qvm-firewall` described below.
+Connections to Updates Proxy are not made over a network so can not be allowed or blocked with firewall rules, but are controlled using the relevant policy file (see [R4.x Updates proxy](/doc/software-update-vm/) for more detail).
Note that if you specify a rule by DNS name it will be resolved to IP(s) *at the moment of applying the rules*, and not on the fly for each new connection.
This means it will not work for servers using load balancing, and traffic to complex web sites which draw from many servers will be difficult to control.
@@ -50,19 +50,19 @@ Rules are implemented on the netvm.
You can also manually create rules in the qube itself using standard firewalling controls.
See [Where to put firewall rules](#where-to-put-firewall-rules).
-In complex cases, it might be appropriate to load a ruleset using `iptables-restore` called from `/rw/config/rc.local`.
+In complex cases, it might be appropriate to load a ruleset using `nft -f /path/to/ruleset` called from `/rw/config/rc.local`, the ruleset file can be populated from the current ruleset using `nft list ruleset > /path/to/ruleset`, you should add `flush ruleset` at the top of the file to remove all existing rules before loading them.
if you do this, be aware that `rc.local` is called *after* the network is up, so local rules should not be relied upon to block leaks.
Reconnecting qubes after a NetVM reboot
-------------------------------------
Normally Qubes doesn't let the user stop a NetVM if there are other qubes running which use it as their own NetVM.
-But in case the NetVM stops for whatever reason (e.g. it crashes, or the user forces its shutdown via qvm-kill via terminal in Dom0), Qubes R4.0 will often automatically repair the connection.
+But in case the NetVM stops for whatever reason (e.g. it crashes, or the user forces its shutdown via qvm-kill via terminal in Dom0), Qubes R4.x will often automatically repair the connection.
If it does not, then there is an easy way to restore the connection to the NetVM by issuing in dom0:
` qvm-prefs netvm `
-Normally qubes do not connect directly to the actual NetVM which has networking devices, but rather to the default sys-firewall first, and in most cases it would be the NetVM that will crash, e.g. in response to S3 sleep/restore or other issues with WiFi drivers.
+Normally qubes do not connect directly to the actual NetVM (sys-net by default) which has networking devices, but rather to the default sys-firewall first, and in most cases it would be the NetVM that will crash, e.g. in response to S3 sleep/restore or other issues with WiFi drivers.
In that case it is only necessary to issue the above command once, for the sys-firewall (this assumes default VM-naming used by the default Qubes installation):
` qvm-prefs sys-firewall netvm sys-net `
@@ -242,7 +242,7 @@ When the qube `unstrusted` has started (after a first reboot), you can directly
Port forwarding to a qube from the outside world
------------------------------------------------
-In order to allow a service present in a qube to be exposed to the outside world in the default setup (where the qube has sys-firewall as network VM, which in turn has sys-net as network VM) the following needs to be done:
+In order to allow a service present in a qube to be exposed to the outside world in the default setup (where the qube has `sys-firewall` as network VM, which in turn has `sys-net` as network VM) the following needs to be done:
- In the sys-net VM:
- Route packets from the outside world to the sys-firewall VM
From a3cefd266eacad101472155da53d4719c0d19add Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 12:17:28 +0100
Subject: [PATCH 042/332] doc: firewall: add tcpdump example
---
user/security-in-qubes/firewall.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 369308f9..4be3aed2 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -509,3 +509,13 @@ Firewall troubleshooting
Firewall logs are stored in the systemd journal of the qube the firewall is running in (probably `sys-firewall`).
You can view them by running `sudo journalctl -u qubes-firewall.service` in the relevant qube.
Sometimes these logs can contain useful information about errors that are preventing the firewall from behaving as you would expect.
+
+An effective console utility to troubleshoot network is [tcpdump](https://www.tcpdump.org/), it can be used to display network packets entering or leaving network interfaces.
+
+For instance, if you want to check if your network interface `eth0` is receiving packets on port TCP 22 from the network 192.168.x.y, you can run this command:
+
+```
+tcpdump -i eth0 -nn dst port 22 and src net 192.168.x.y/24
+```
+
+This can be used effectively in a destination qube and its Network VM to see if forwarding / NAT rules are working.
From 5738e75e46b02b926ecc0cd340a4da6f7ee09bac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 12:19:03 +0100
Subject: [PATCH 043/332] doc: firewall: switch to nftables
---
user/security-in-qubes/firewall.md | 269 ++++++++++-------------------
1 file changed, 90 insertions(+), 179 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 4be3aed2..f932f4ed 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -71,7 +71,7 @@ Network service qubes
---------------------
Qubes does not support running any networking services (e.g. VPN, local DNS server, IPS, ...) directly in a qube that is used to run the Qubes firewall service (usually sys-firewall) for good reasons.
-In particular, if you want to ensure proper functioning of the Qubes firewall, you should not tinker with iptables or nftables rules in such qubes.
+In particular, if you want to ensure proper functioning of the Qubes firewall, you should not tinker with nftables rules in such qubes.
Instead, you should deploy a network infrastructure such as
@@ -95,45 +95,43 @@ Enabling networking between two qubes
Normally any networking traffic between qubes is prohibited for security reasons.
However, in special situations, you might want to selectively allow specific qubes to establish networking connectivity between each other.
-For example, this might be useful in some development work, when you want to test networking code, or to allow file exchange between HVM domains (which do not have Qubes tools installed) via SMB/scp/NFS protocols.
+For example, this might be useful in some development work, when you want to test networking code, or to allow file exchange between HVM domains (which do not have Qubes tools installed) via SMB/SSH/NFS protocols.
-In order to allow networking between qubes A and B follow these steps:
+In order to allow networking from qube A (client) to qube B (server) follow these steps:
- Make sure both A and B are connected to the same firewall vm (by default all VMs use the same firewall VM).
- Note the Qubes IP addresses assigned to both qubes.
- This can be done using the `qvm-ls -n` command, or via the Qubes Manager preferences pane for each qube.
+ This can be done using the `qvm-ls -n` command, or via the Qubes Manager using the IP column.
- Start both qubes, and also open a terminal in the firewall VM
-- In the firewall VM's terminal enter the following iptables rule:
+- In the firewall VM's terminal enter the following nftables rule:
~~~
-sudo iptables -I FORWARD 2 -s -d -j ACCEPT
+sudo nft add rule ip qubes custom-forward ip saddr ip daddr accept
~~~
-- In qube B's terminal enter the following iptables rule:
+- In qube B's terminal enter the following nftables rule:
~~~
-sudo iptables -I INPUT -s -j ACCEPT
+sudo nft add rule qubes custom-input ip saddr accept
~~~
- Now you should be able to reach B from A -- test it using e.g. ping issued from A.
Note however, that this doesn't allow you to reach A from B -- for this you would need two more rules, with A and B swapped.
-- If everything works as expected, then you should write the above iptables rules into firewallVM's `qubes-firewall-user-script` script.
+- If everything works as expected, then you should write the above nftables rules into firewallVM's `qubes-firewall-user-script` script.
This script is run when the netvm starts up.
You should also write relevant rules in A and B's `rc.local` script which is run when the qube is launched.
Here's an example how to update the script:
~~~
-[user@sys-firewall ~]$ sudo bash
-[root@sys-firewall user]# echo "iptables -I FORWARD 2 -s 10.137.2.25 -d 10.137.2.6 -j ACCEPT" >> /rw/config/qubes-firewall-user-script
-[root@sys-firewall user]# chmod +x /rw/config/qubes-firewall-user-script
+[user@sys-firewall ~]$ sudo -i
+[root@sys-firewall user]# echo "nft add rule ip qubes custom-forward ip saddr 10.137.2.25 ip daddr 10.137.2.6 accept" >> /rw/config/qubes-firewall-user-script
~~~
- Here is an example how to update `rc.local`:
~~~
-[user@B ~]$ sudo bash
-[root@B user]# echo "iptables -I INPUT -s 10.137.2.25 -j ACCEPT" >> /rw/config/rc.local
-[root@B user]# chmod +x /rw/config/rc.local
+[user@B ~]$ sudo -i
+[root@B user]# echo "nft add rule qubes custom-input ip saddr 10.137.2.25 accept" >> /rw/config/rc.local
~~~
Opening a single TCP port to other network-isolated qube
@@ -250,10 +248,10 @@ In order to allow a service present in a qube to be exposed to the outside world
- In the sys-firewall VM:
- Route packets from the sys-net VM to the VM
- Allow packets through the sys-firewall VM firewall
-- In the qube:
+- In the qube QubeDest:
- Allow packets through the qube firewall to reach the service
-As an example we can take the use case of a web server listening on port 443 that we want to expose on our physical interface eth0, but only to our local network 192.168.x.0/24.
+As an example we can take the use case of qube QubeDest running a web server listening on port 443 that we want to expose on our physical interface ens6, but only to our local network 192.168.x.y/24.
> Note: To have all interfaces available and configured, make sure the 3 qubes are up and running
@@ -261,113 +259,85 @@ As an example we can take the use case of a web server listening on port 443 tha
**1. Identify the IP addresses you will need to use for sys-net, sys-firewall and the destination qube.**
-You can get this information from the Settings Window for the qube, or by running this command in each qube:
-`ifconfig | grep -i cast `
+You can get this information using various methods, but only the first one can be used for `sys-net` outside world IP:
+
+- by running this command in each qube: `ip -4 -br a | grep UP`
+- using `qvm-ls -n`
+- in the Qubes Manager window using the column IP
+- from the Settings Window for the qube
+
Note the IP addresses you will need.
> Note: The vifx.0 interface is the one used by qubes connected to this netvm so it is _not_ an outside world interface.
**2. Route packets from the outside world to the FirewallVM**
-For the following example, we assume that the physical interface eth0 in sys-net has the IP address 192.168.x.y and that the IP address of sys-firewall is 10.137.1.z.
+For the following example, we assume that the physical interface ens6 in sys-net is on the local network 192.168.x.y with the IP 192.168.x.n, and that the IP address of sys-firewall is 10.137.1.z.
-In the sys-net VM's Terminal, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
+In the sys-net VM's Terminal, the first step is to to define an ntables chain that will receive DNAT rules, we recommend to define a new chain for each destination qubes, this ease the rules management:
```
-iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 192.168.x.y -j DNAT --to-destination 10.137.1.z
+nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
```
-Code the appropriate new filtering firewall rule to allow new connections for the service
+Second step, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
```
-iptables -I FORWARD 2 -i eth0 -d 10.137.1.z -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
+nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" ip saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.1.z
```
-> If you want to expose the service on multiple interfaces, repeat the steps described in part 1 for each interface.
-> In Qubes R4, at the moment ([QubesOS/qubes-issues#3644](https://github.com/QubesOS/qubes-issues/issues/3644)), nftables is also used which imply that additional rules need to be set in a `qubes-firewall` nft table with a forward chain.
-
-`nft add rule ip qubes-firewall forward meta iifname eth0 ip daddr 10.137.1.z tcp dport 443 ct state new counter accept`
-
-Verify you are cutting through the sys-net VM firewall by looking at its counters (column 2)
+Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-iptables -t nat -L -v -n
-iptables -L -v -n
+nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter accept
```
-> Note: On Qubes R4, you can also check the nft counters
+> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
+
+> If you want to expose the service on multiple interfaces, repeat the steps 2 and 3 described above, for each interface.
+
+Verify you are cutting through the sys-net VM firewall by looking at its counters, check for the lines in the chains `custom-forward` and `custom-dnat-qubeDEST`:
```
nft list table ip qubes-firewall
```
-Send a test packet by trying to connect to the service from an external device
+E.g. In our example, we can see 7 packets in the forward rule, and 3 packets in the dnat rule:
```
-telnet 192.168.x.y 443
+chain custom-forward {
+ iifname "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter packets 7 bytes 448 accept
+}
+
+chain custom-dnat-qubeDEST {
+ type nat hook prerouting priority filter + 1; policy accept;
+ iifname "ens6" ip saddr 192.168.x.y/24 tcp dport 443 counter packets 3 bytes 192 dnat to 10.138.33.59
+}
```
-Once you have confirmed that the counters increase, store these command in `/rw/config/rc.local` so they get set on sys-net start-up
+Optional step: You can send a test packet by trying to connect to the service from an external device using the following command:
```
-sudo nano /rw/config/rc.local
+telnet 192.168.x.n 443
+```
+
+Once you have confirmed that the counters increase, store the commands used in the previous steps in `/rw/config/rc.local` so they get set on sys-net start-up
+
+```
+[user@sys-net user]$ sudo -i
+[root@sys-net user]# nano /rw/config/qubes-firewall-user-script
```
~~~
#!/bin/sh
+# create the dnat chain for qubeDEST if it doesn't already exist
+if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
+then
+ # create the dnat rule
+ nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.1.z
-####################
-# My service routing
-
-# Create a new firewall natting chain for my service
-if iptables -w -t nat -N MY-HTTPS; then
-
-# Add a natting rule if it did not exist (to avoid clutter if script executed multiple times)
- iptables -w -t nat -A MY-HTTPS -j DNAT --to-destination 10.137.1.z
-
-fi
-
-
-# If no prerouting rule exist for my service
-if ! iptables -w -t nat -n -L PREROUTING | grep --quiet MY-HTTPS; then
-
-# add a natting rule for the traffic (same reason)
- iptables -w -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 192.168.x.y -j MY-HTTPS
-fi
-
-
-######################
-# My service filtering
-
-# Create a new firewall filtering chain for my service
-if iptables -w -N MY-HTTPS; then
-
-# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
- iptables -w -A MY-HTTPS -s 192.168.x.0/24 -j ACCEPT
-
-fi
-
-# If no forward rule exist for my service
-if ! iptables -w -n -L FORWARD | grep --quiet MY-HTTPS; then
-
-# add a forward rule for the traffic (same reason)
- iptables -w -I FORWARD 2 -d 10.137.1.z -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
-
-fi
-~~~
-
-> Note: Again in R4 the following needs to be added:
-
-~~~
-#############
-# In Qubes R4
-
-# If not already present
-if nft -nn list table ip qubes-firewall | grep "tcp dport 443 ct state new"; then
-
-# Add a filtering rule
- nft add rule ip qubes-firewall forward meta iifname eth0 ip daddr 10.137.1.z tcp dport 443 ct state new counter accept
-
+ # allow forwarded traffic
+ nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter accept
fi
~~~
@@ -375,133 +345,74 @@ fi
For the following example, we use the fact that the physical interface of sys-firewall, facing sys-net, is eth0. Furthermore, we assume that the target VM running the web server has the IP address 10.137.0.xx and that the IP address of sys-firewall is 10.137.1.z.
-In the sys-firewall VM's Terminal, code a natting firewall rule to route traffic on its outside interface for the service to the qube
+In the sys-firewall VM's Terminal, add a DNAT chain to route traffic on its outside interface for the service to the qube:
```
-iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 10.137.1.z -j DNAT --to-destination 10.137.0.xx
+nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
```
-Code the appropriate new filtering firewall rule to allow new connections for the service
+Second step, code a natting firewall rule to route traffic on the outside interface for the service to the destination qube
```
-iptables -I FORWARD 2 -i eth0 -s 192.168.x.0/24 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
+nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" ip saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.0.xx
```
-> Note: If you do not wish to limit the IP addresses connecting to the service, remove the ` -s 192.168.0.1/24 `
-
-> Note: On Qubes R4
+Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-nft add rule ip qubes-firewall forward meta iifname eth0 ip saddr 192.168.x.0/24 ip daddr 10.137.0.xx tcp dport 443 ct state new counter accept
+nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 counter accept
```
-Once you have confirmed that the counters increase, store these command in `/rw/config/qubes-firewall-user-script`
+> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
+
+Once you have confirmed that the counters increase, store these commands in the script `/rw/config/qubes-firewall-user-script`
```
-sudo nano /rw/config/qubes-firewall-user-script
+[user@sys-net user]$ sudo -i
+[root@sys-net user]# nano /rw/config/qubes-firewall-user-script
```
~~~
#!/bin/sh
+# create the dnat chain for qubeDEST if it doesn't already exist
+if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
+then
+ # create the dnat rule
+ nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" tcp dport 22 counter dnat 10.137.0.xx
-####################
-# My service routing
-
-# Create a new firewall natting chain for my service
-if iptables -w -t nat -N MY-HTTPS; then
-
-# Add a natting rule if it did not exist (to avoid clutter if script executed multiple times)
- iptables -w -t nat -A MY-HTTPS -j DNAT --to-destination 10.137.0.xx
-
-fi
-
-
-# If no prerouting rule exist for my service
-if ! iptables -w -t nat -n -L PREROUTING | grep --quiet MY-HTTPS; then
-
-# add a natting rule for the traffic (same reason)
- iptables -w -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 10.137.1.z -j MY-HTTPS
-fi
-
-
-######################
-# My service filtering
-
-# Create a new firewall filtering chain for my service
-if iptables -w -N MY-HTTPS; then
-
-# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
- iptables -w -A MY-HTTPS -s 192.168.x.0/24 -j ACCEPT
-
-fi
-
-# If no forward rule exist for my service
-if ! iptables -w -n -L FORWARD | grep --quiet MY-HTTPS; then
-
-# add a forward rule for the traffic (same reason)
- iptables -w -I FORWARD 4 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
-
-fi
-
-################
-# In Qubes OS R4
-
-# If not already present
-if ! nft -nn list table ip qubes-firewall | grep "tcp dport 443 ct state new"; then
-
-# Add a filtering rule
- nft add rule ip qubes-firewall forward meta iifname eth0 ip saddr 192.168.x.0/24 ip daddr 10.137.0.xx tcp dport 443 ct state new counter accept
-
+ # allow forwarded traffic
+ nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 22 counter accept
fi
~~~
-Finally make this file executable (so it runs at every Firewall VM update)
-
-~~~
-sudo chmod +x /rw/config/qubes-firewall-user-script
-~~~
-
-If the service should be available to other VMs on the same system, do not forget to specify the additional rules described above.
+If the service should be available to other VMs on the same system, do not forget to specify the additional rules described earlier in this guide.
**4. Allow packets into the qube to reach the service**
-Here no routing is required, only filtering.
-Proceed in the same way as above but store the filtering rule in the `/rw/config/rc.local` script.
+No routing is required in the destination qube, only filtering.
For the following example, we assume that the target VM running the web server has the IP address 10.137.0.xx
+The according rule to allow the traffic is:
+
```
-sudo nano /rw/config/rc.local
+nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx counter accept
```
-~~~
-######################
-# My service filtering
+To make it persistent, you need to add this command in `/rw/config/rc.local`:
-# Create a new firewall filtering chain for my service
-if iptables -w -N MY-HTTPS; then
+```
+[user@qubeDEST user]$ sudo -i
+[root@qubeDEST user]# echo 'nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx counter accept' >> /rw/config/rc.local
+```
-# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
- iptables -w -A MY-HTTPS -j ACCEPT
-
-fi
-
-# If no input rule exists for my service
-if ! iptables -w -n -L INPUT | grep --quiet MY-HTTPS; then
-
-# add a forward rule for the traffic (same reason)
- iptables -w -I INPUT 5 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
-
-fi
-~~~
-
-This time testing should allow connectivity to the service as long as the service is up :-)
+This time testing should allow connectivity to the service as long qubeDEST is running and the service is up :-)
Where to put firewall rules
---------------------------
-Implicit in the above example [scripts](/doc/config-files/), but worth calling attention to: for all qubes *except* those supplying networking, iptables commands should be added to the `/rw/config/rc.local` script.
-For app qubes supplying networking (`sys-firewall` inclusive), iptables commands should be added to `/rw/config/qubes-firewall-user-script`.
+Implicit in the above example [scripts](/doc/config-files/), but worth calling attention to: for all qubes *except* those supplying networking, nftables commands should be added to the `/rw/config/rc.local` script.
+For service qubes supplying networking (`sys-firewall` and `sys-net` inclusive), nftables commands should be added to `/rw/config/qubes-firewall-user-script`.
Firewall troubleshooting
------------------------
From d6ad647518a35228e4fb3c79b2f55e58e32c09d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 14:50:42 +0100
Subject: [PATCH 044/332] doc: firewall: add nftables tips
---
user/security-in-qubes/firewall.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index f932f4ed..d71e662e 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -430,3 +430,24 @@ tcpdump -i eth0 -nn dst port 22 and src net 192.168.x.y/24
```
This can be used effectively in a destination qube and its Network VM to see if forwarding / NAT rules are working.
+
+Nftables tips
+-------------
+
+A simple way to experiment changes with your ruleset can be achieved by saving the current working ruleset in two files, one for backup and the other for making changes.
+
+By adding `flush ruleset` at the top of the file, you can achieve atomic update, which mean the new ruleset would replace the current one only if it fully succeed to load.
+
+You can dump the ruleset in two files using the following command:
+
+```
+nft list ruleset | tee nft_backup | tee nft_new_ruleset
+```
+
+Then, edit `nft_new_ruleset`, add `flush ruleset` on top and make changes, load it with `nft -f nft_new_ruleset`.
+
+You can revert to the original ruleset with the following commands:
+
+```
+nft flush ruleset && nft -f nft_backup
+```
\ No newline at end of file
From caf9b9a2b41c95de6e52243786b00e32a6dbc13e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 14:50:49 +0100
Subject: [PATCH 045/332] doc: firewall: rewording
---
user/security-in-qubes/firewall.md | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index d71e662e..e4ab0f0d 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -266,19 +266,24 @@ You can get this information using various methods, but only the first one can b
- in the Qubes Manager window using the column IP
- from the Settings Window for the qube
-Note the IP addresses you will need.
+Note the IP addresses you will need, they will be required in the next steps.
+
> Note: The vifx.0 interface is the one used by qubes connected to this netvm so it is _not_ an outside world interface.
**2. Route packets from the outside world to the FirewallVM**
For the following example, we assume that the physical interface ens6 in sys-net is on the local network 192.168.x.y with the IP 192.168.x.n, and that the IP address of sys-firewall is 10.137.1.z.
-In the sys-net VM's Terminal, the first step is to to define an ntables chain that will receive DNAT rules, we recommend to define a new chain for each destination qubes, this ease the rules management:
+In the sys-net VM's Terminal, the first step is to to define an ntables chain that will receive DNAT rules to relay the network traffic on a given port to the qube NetVM, we recommend to define a new chain for each destination qube to ease rules management:
```
nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
```
+> Note: the name `custom-dnat-qubeDST` is arbitrary
+
+> Note: while we use a DNAT chain for a single qube, it's totally possible to have a single DNAT chain for multiple qubes
+
Second step, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
```
@@ -295,13 +300,13 @@ nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip d
> If you want to expose the service on multiple interfaces, repeat the steps 2 and 3 described above, for each interface.
-Verify you are cutting through the sys-net VM firewall by looking at its counters, check for the lines in the chains `custom-forward` and `custom-dnat-qubeDEST`:
+Verify the rules on sys-net firewall correctly match the packets you want by looking at its counters, check for the counter lines in the chains `custom-forward` and `custom-dnat-qubeDEST`:
```
nft list table ip qubes-firewall
```
-E.g. In our example, we can see 7 packets in the forward rule, and 3 packets in the dnat rule:
+In this example, we can see 7 packets in the forward rule, and 3 packets in the dnat rule:
```
chain custom-forward {
@@ -314,19 +319,21 @@ chain custom-dnat-qubeDEST {
}
```
-Optional step: You can send a test packet by trying to connect to the service from an external device using the following command:
+(Optional) You can send a test packet by trying to connect to the service from an external device using the following command:
```
telnet 192.168.x.n 443
```
-Once you have confirmed that the counters increase, store the commands used in the previous steps in `/rw/config/rc.local` so they get set on sys-net start-up
+Once you have confirmed that the counters increase, store the commands used in the previous steps in `/rw/config/rc.local` so they get set on sys-net start-up:
```
[user@sys-net user]$ sudo -i
[root@sys-net user]# nano /rw/config/qubes-firewall-user-script
```
+Content of `/rw/config/qubes-firewall-user-script` in `sys-net`:
+
~~~
#!/bin/sh
@@ -345,7 +352,7 @@ fi
For the following example, we use the fact that the physical interface of sys-firewall, facing sys-net, is eth0. Furthermore, we assume that the target VM running the web server has the IP address 10.137.0.xx and that the IP address of sys-firewall is 10.137.1.z.
-In the sys-firewall VM's Terminal, add a DNAT chain to route traffic on its outside interface for the service to the qube:
+In the sys-firewall VM's Terminal, add a DNAT chain that will contain routing rules:
```
nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
@@ -372,6 +379,8 @@ Once you have confirmed that the counters increase, store these commands in the
[root@sys-net user]# nano /rw/config/qubes-firewall-user-script
```
+Content of `/rw/config/qubes-firewall-user-script` in `sys-firewall`:
+
~~~
#!/bin/sh
@@ -391,6 +400,7 @@ If the service should be available to other VMs on the same system, do not forge
**4. Allow packets into the qube to reach the service**
No routing is required in the destination qube, only filtering.
+
For the following example, we assume that the target VM running the web server has the IP address 10.137.0.xx
The according rule to allow the traffic is:
@@ -399,7 +409,7 @@ The according rule to allow the traffic is:
nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx counter accept
```
-To make it persistent, you need to add this command in `/rw/config/rc.local`:
+To make it persistent, you need to add this command in the script `/rw/config/rc.local`:
```
[user@qubeDEST user]$ sudo -i
From 0dbafca889e6fb03446eb44c5b025a77e2da9075 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 15:03:14 +0100
Subject: [PATCH 046/332] doc: firewall: example port is 443
---
user/security-in-qubes/firewall.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index e4ab0f0d..fad87eaa 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -433,10 +433,10 @@ Sometimes these logs can contain useful information about errors that are preven
An effective console utility to troubleshoot network is [tcpdump](https://www.tcpdump.org/), it can be used to display network packets entering or leaving network interfaces.
-For instance, if you want to check if your network interface `eth0` is receiving packets on port TCP 22 from the network 192.168.x.y, you can run this command:
+For instance, if you want to check if your network interface `eth0` is receiving packets on port TCP 443 from the network 192.168.x.y, you can run this command:
```
-tcpdump -i eth0 -nn dst port 22 and src net 192.168.x.y/24
+tcpdump -i eth0 -nn dst port 443 and src net 192.168.x.y/24
```
This can be used effectively in a destination qube and its Network VM to see if forwarding / NAT rules are working.
From aa4442d023ca8a001fc3eb979fee38d112ea4965 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Fri, 3 Nov 2023 15:03:25 +0100
Subject: [PATCH 047/332] doc: firewall: add conntrack support
---
user/security-in-qubes/firewall.md | 32 +++++++++++++++---------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index fad87eaa..a58f0102 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -106,13 +106,13 @@ In order to allow networking from qube A (client) to qube B (server) follow thes
- In the firewall VM's terminal enter the following nftables rule:
~~~
-sudo nft add rule ip qubes custom-forward ip saddr ip daddr accept
+sudo nft add rule ip qubes custom-forward ip saddr ip daddr ct state new,established,related counter accept
~~~
- In qube B's terminal enter the following nftables rule:
~~~
-sudo nft add rule qubes custom-input ip saddr accept
+sudo nft add rule qubes custom-input ip saddr ct state new,established,related counter accept
~~~
- Now you should be able to reach B from A -- test it using e.g. ping issued from A.
@@ -124,7 +124,7 @@ sudo nft add rule qubes custom-input ip saddr accept
~~~
[user@sys-firewall ~]$ sudo -i
-[root@sys-firewall user]# echo "nft add rule ip qubes custom-forward ip saddr 10.137.2.25 ip daddr 10.137.2.6 accept" >> /rw/config/qubes-firewall-user-script
+[root@sys-firewall user]# echo "nft add rule ip qubes custom-forward ip saddr 10.137.2.25 ip daddr 10.137.2.6 ct state new,established,related counter accept" >> /rw/config/qubes-firewall-user-script
~~~
- Here is an example how to update `rc.local`:
@@ -287,13 +287,13 @@ nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority fi
Second step, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
```
-nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" ip saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.1.z
+nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
```
Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter accept
+nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
```
> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
@@ -310,12 +310,12 @@ In this example, we can see 7 packets in the forward rule, and 3 packets in the
```
chain custom-forward {
- iifname "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter packets 7 bytes 448 accept
+ iifname "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter packets 7 bytes 448 accept
}
chain custom-dnat-qubeDEST {
type nat hook prerouting priority filter + 1; policy accept;
- iifname "ens6" ip saddr 192.168.x.y/24 tcp dport 443 counter packets 3 bytes 192 dnat to 10.138.33.59
+ iifname "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter packets 3 bytes 192 dnat to 10.138.33.59
}
```
@@ -341,10 +341,10 @@ Content of `/rw/config/qubes-firewall-user-script` in `sys-net`:
if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
then
# create the dnat rule
- nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.1.z
+ nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
# allow forwarded traffic
- nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 counter accept
+ nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
fi
~~~
@@ -361,13 +361,13 @@ nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority fi
Second step, code a natting firewall rule to route traffic on the outside interface for the service to the destination qube
```
-nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" ip saddr 192.168.x.y/24 tcp dport 443 counter dnat 10.137.0.xx
+nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
```
Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 counter accept
+nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
```
> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
@@ -388,10 +388,10 @@ Content of `/rw/config/qubes-firewall-user-script` in `sys-firewall`:
if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
then
# create the dnat rule
- nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" tcp dport 22 counter dnat 10.137.0.xx
+ nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
# allow forwarded traffic
- nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 22 counter accept
+ nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
fi
~~~
@@ -406,14 +406,14 @@ For the following example, we assume that the target VM running the web server h
The according rule to allow the traffic is:
```
-nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx counter accept
+nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx ct state new,established,related counter accept
```
To make it persistent, you need to add this command in the script `/rw/config/rc.local`:
```
[user@qubeDEST user]$ sudo -i
-[root@qubeDEST user]# echo 'nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx counter accept' >> /rw/config/rc.local
+[root@qubeDEST user]# echo 'nft add rule qubes custom-input tcp dport 443 ip daddr 10.137.0.xx ct state new,established,related counter accept' >> /rw/config/rc.local
```
This time testing should allow connectivity to the service as long qubeDEST is running and the service is up :-)
@@ -460,4 +460,4 @@ You can revert to the original ruleset with the following commands:
```
nft flush ruleset && nft -f nft_backup
-```
\ No newline at end of file
+```
From 718a380ccfa4a513aa34b2ce48a1950832be5fd1 Mon Sep 17 00:00:00 2001
From: gordon-shumway-net
<60302611+gordon-shumway-net@users.noreply.github.com>
Date: Sun, 5 Nov 2023 00:07:02 +0100
Subject: [PATCH 048/332] Apply suggestions from first code review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Marta Marczykowska-Górecka
---
user/how-to-guides/how-to-use-disposables.md | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/user/how-to-guides/how-to-use-disposables.md b/user/how-to-guides/how-to-use-disposables.md
index 2778d2ff..d13c467b 100644
--- a/user/how-to-guides/how-to-use-disposables.md
+++ b/user/how-to-guides/how-to-use-disposables.md
@@ -24,19 +24,25 @@ This diagram provides a general example of how disposables can be used to safely
## Named disposables and disposable templates
-There is a difference between [named disposables](/doc/glossary/#named-disposable) and [disposable templates](/doc/glossary/#disposable-template).
+There is a difference between [named disposable qubes](/doc/glossary/#named-disposable) and [disposable templates](/doc/glossary/#disposable-template).
-In a default QubesOS Installation, you would probably use the 'whonix-ws-16-dvm' if you, as an example, want to browse the Tor network with an disposable. Every application starts a new random disposable with an ID in the name and if you close the window, it shuts down the qube. This is the feeling of an disposable template.
+In a default QubesOS Installation, you would probably use the 'whonix-ws-16-dvm' disposable template to, for example, browse the Tor network with an disposable qube. Every time you start an application using this disposable template, a new disposable qube - named `dispX` (where X is a random number) starts. If you close the application window, the `dispX` qube shuts down and vanished from your system. That is how disposable templates are used.
In named disposables every application starts in the same qube, the qube itself has a fixed name and you need to manually shutdown the qube. Except from the non-persistance, they feel like usual app qubes. Named disposables are built upon disposable templates.
### How to create disposable templates
-First you need to create an app qube. After that you need to go to the 'Qubes Settings' of the created app qube and set it as a 'Disposable template' in the 'Advanced' section and apply the change. From now on the entry in the Application menu is not named 'Qube' anymore, but splitted into 'Disposable' and 'Template (disp)'. The settings for the disposable can be changed under **'Application Menu -> Template (disp) -> Template: Qubes Settings**
+First, you need to create an app qube. You can run it normally, set up any necessary settings (like browser settings) you wish to be applied to every disposable qube ran from this template. Next, go to 'Qube Settings' of the app qube, set it as a _Disposable template_ in the _Advanced_ section and apply the change.
+
+In Qubes 4.1, from now on, the entry in the Application menu is not named 'Qube' anymore, but split into 'Disposable' and 'Template (disp)'. The settings for the disposable can be changed under **'Application Menu -> Template (disp) -> Template: Qubes Settings**
+
+In Qubes 4.2, the qube will now appear in the menu as a disposable template (in the Apps section), from which you can launch new disposable qubes. To change the settings of the template itself or run programs in it, use the menu position for this qube located in the Templates section.
### How to create named disposables
-Named disposables can be created under **Application Menu -> Create Qubes VM**, the type needs to be 'DisposableVM'.
+In Qubes 4.1: named disposables can be created under **Application Menu -> Create Qubes VM**, set the qube type to be _DisposableVM_.
+
+In Qubes 4.2: named disposables can be created by **Application Menu -> Settings -> Qubes Settings -> Create New Qube**. Set the qube type to _Named disposable_
## Security
From 86a6f12e2a882dfffbc04818458589655843514d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sol=C3=A8ne=20Rapenne?=
Date: Mon, 6 Nov 2023 09:04:16 +0100
Subject: [PATCH 049/332] doc: firewall: use iif instead of iifname for better
performance
---
user/security-in-qubes/firewall.md | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index a58f0102..b4eb1b65 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -287,13 +287,13 @@ nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority fi
Second step, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
```
-nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
+nft add rule qubes custom-dnat-qubeDEST iif == "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
```
Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
+nft add rule qubes custom-forward iif == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
```
> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
@@ -310,12 +310,12 @@ In this example, we can see 7 packets in the forward rule, and 3 packets in the
```
chain custom-forward {
- iifname "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter packets 7 bytes 448 accept
+ iif "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter packets 7 bytes 448 accept
}
chain custom-dnat-qubeDEST {
type nat hook prerouting priority filter + 1; policy accept;
- iifname "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter packets 3 bytes 192 dnat to 10.138.33.59
+ iif "ens6" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter packets 3 bytes 192 dnat to 10.138.33.59
}
```
@@ -341,10 +341,10 @@ Content of `/rw/config/qubes-firewall-user-script` in `sys-net`:
if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
then
# create the dnat rule
- nft add rule qubes custom-dnat-qubeDEST iifname == "ens6" saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
+ nft add rule qubes custom-dnat-qubeDEST iif == "ens6" saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.1.z
# allow forwarded traffic
- nft add rule qubes custom-forward iifname == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
+ nft add rule qubes custom-forward iif == "ens6" ip saddr 192.168.x.y/24 ip daddr 10.137.1.z tcp dport 443 ct state new,established,related counter accept
fi
~~~
@@ -361,13 +361,13 @@ nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority fi
Second step, code a natting firewall rule to route traffic on the outside interface for the service to the destination qube
```
-nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
+nft add rule qubes custom-dnat-qubeDEST iif == "eth0" ip saddr 192.168.x.y/24 tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
```
Third step, code the appropriate new filtering firewall rule to allow new connections for the service
```
-nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
+nft add rule qubes custom-forward iif == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
```
> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
@@ -388,10 +388,10 @@ Content of `/rw/config/qubes-firewall-user-script` in `sys-firewall`:
if nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
then
# create the dnat rule
- nft add rule qubes custom-dnat-qubeDEST iifname == "eth0" tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
+ nft add rule qubes custom-dnat-qubeDEST iif == "eth0" tcp dport 443 ct state new,established,related counter dnat 10.137.0.xx
# allow forwarded traffic
- nft add rule qubes custom-forward iifname == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
+ nft add rule qubes custom-forward iif == "eth0" ip saddr 192.168.x.y/24 ip daddr 10.137.0.xx tcp dport 443 ct state new,established,related counter accept
fi
~~~
From e95c51f58268e520c36152a3c037323889729291 Mon Sep 17 00:00:00 2001
From: deeplow <47065258+deeplow@users.noreply.github.com>
Date: Thu, 9 Nov 2023 03:20:40 -0500
Subject: [PATCH 050/332] Clean Install: change Qubes sources to 4.2
Tell users to upgrade the software sources. Otherwise they may miss
on critical integrations for 4.2 like VMExec (for the updater to work)
and most importantly, after 4.1 is EOL, it'll silently stop resolving
qubes package upgrades even though the template is not yet EOL.
---
user/downloading-installing-upgrading/upgrade/4_2.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index 84cf80ef..74e1efa5 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -31,6 +31,16 @@ in-place:
4. [Restore from your
backup](/doc/how-to-back-up-restore-and-migrate/#restoring-from-a-backup) on
your new 4.2 installation.
+5. In each old the old templates update the Qubes software sources from 4.1 to Qubes 4.2. Do this by opening a teminal in each of the imported templates and running the following commands:
+ - **Debian-based templates**:
+ ```
+ sudo sed -i 's/r4.[01]/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list`
+ ```
+ - **Fedora-based templates**:
+ ```
+ sudo sed -i 's/r4.[01]/r4.2/g' /etc/yum.repos.d/qubes-r4.repo
+ sudo sed -i 's/RPM-GPG-KEY-qubes-4\(\.1\)\{0,1\}-primary/RPM-GPG-KEY-qubes-4.2-primary/g' /etc/yum.repos.d/qubes-r4.repo
+ ```
## In-place upgrade
From d439baef30ee900f60434758c24dcc89132f94a1 Mon Sep 17 00:00:00 2001
From: deeplow
Date: Thu, 9 Nov 2023 09:39:48 +0000
Subject: [PATCH 051/332] Upgrade also GPG keyring for "-unstable" repos
---
user/downloading-installing-upgrading/upgrade/4_2.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index 74e1efa5..0f94671e 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -39,7 +39,7 @@ in-place:
- **Fedora-based templates**:
```
sudo sed -i 's/r4.[01]/r4.2/g' /etc/yum.repos.d/qubes-r4.repo
- sudo sed -i 's/RPM-GPG-KEY-qubes-4\(\.1\)\{0,1\}-primary/RPM-GPG-KEY-qubes-4.2-primary/g' /etc/yum.repos.d/qubes-r4.repo
+ sudo sed -i 's/RPM-GPG-KEY-qubes-4\(\.1\)\{0,1\}-/RPM-GPG-KEY-qubes-4.2-/g' /etc/yum.repos.d/qubes-r4.repo
```
## In-place upgrade
From 2b3fa9b1146765181c8722b00a6719c870a9c39e Mon Sep 17 00:00:00 2001
From: deeplow
Date: Thu, 9 Nov 2023 10:32:31 +0000
Subject: [PATCH 052/332] Add new keyring to Debian templates
---
user/downloading-installing-upgrading/upgrade/4_2.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index 0f94671e..a80ff90d 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -34,7 +34,8 @@ in-place:
5. In each old the old templates update the Qubes software sources from 4.1 to Qubes 4.2. Do this by opening a teminal in each of the imported templates and running the following commands:
- **Debian-based templates**:
```
- sudo sed -i 's/r4.[01]/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list`
+ sudo sed -i 's/r4.[01]/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list
+ sudo sed -i 's|\[arch=amd64\]|\[arch=amd64 signed-by=/usr/share/keyrings/qubes-archive-keyring-4.2.gpg \]|g' /etc/apt/sources.list.d/qubes-r4.list
```
- **Fedora-based templates**:
```
From 207b5e501958b7c121a8f02860e2f3f73134f9b4 Mon Sep 17 00:00:00 2001
From: deeplow
Date: Thu, 9 Nov 2023 10:44:19 +0000
Subject: [PATCH 053/332] Note that upgrades repo upgrades apply only to 4.1+
At noted by Marek [1] GPG keyrings for verifying 4.1+ packages only
started being available in 4.1 templates. Telling people to fetch
the keyrings through another method would make instructions too
complicated. For this reason it seems simpler to just tell people to
use the new templates instead.
[1]: https://github.com/QubesOS/qubes-doc/pull/1345#issuecomment-1803517947
---
.../upgrade/4_2.md | 21 ++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index a80ff90d..058d481b 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -31,16 +31,27 @@ in-place:
4. [Restore from your
backup](/doc/how-to-back-up-restore-and-migrate/#restoring-from-a-backup) on
your new 4.2 installation.
-5. In each old the old templates update the Qubes software sources from 4.1 to Qubes 4.2. Do this by opening a teminal in each of the imported templates and running the following commands:
+5. In each old the old templates update the Qubes software sources from 4.1 to Qubes 4.2.
+ > **Note**: If the templates were first installed on a version older than
+ > Qubes 4.1, you should reinstall them. For example, your first Qubes install
+ > was 4.0 and you've been upgrading to Qubes 4.2 via clean install ever since,
+ > then this affects you and you should instead use the templates that come
+ > preinstalled in 4.2.
+
+ If the above note does not apply, you should open a teminal in each of the
+ imported templates and running the following commands:
- **Debian-based templates**:
```
- sudo sed -i 's/r4.[01]/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list
+ sudo sed -i 's/r4.1/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list
sudo sed -i 's|\[arch=amd64\]|\[arch=amd64 signed-by=/usr/share/keyrings/qubes-archive-keyring-4.2.gpg \]|g' /etc/apt/sources.list.d/qubes-r4.list
+ sudo apt update
+ sudo apt upgrade
```
- - **Fedora-based templates**:
+ - **Fedora-based templates**:
```
- sudo sed -i 's/r4.[01]/r4.2/g' /etc/yum.repos.d/qubes-r4.repo
- sudo sed -i 's/RPM-GPG-KEY-qubes-4\(\.1\)\{0,1\}-/RPM-GPG-KEY-qubes-4.2-/g' /etc/yum.repos.d/qubes-r4.repo
+ sudo sed -i 's/r4.1/r4.2/g' /etc/yum.repos.d/qubes-r4.repo
+ sudo sed -i 's/RPM-GPG-KEY-qubes-4.1-/RPM-GPG-KEY-qubes-4.2-/g' /etc/yum.repos.d/qubes-r4.repo
+ sudo dnf update
```
## In-place upgrade
From 6810e4b8ffa70b51acce3bd3afe9ac25f789f58e Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Thu, 16 Nov 2023 03:15:00 -0800
Subject: [PATCH 054/332] Add Star Labs StarBook to certified hardware list
---
user/hardware/certified-hardware.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index 315de5a1..d1035497 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -61,6 +61,12 @@ The [NovaCustom NV41 Series](https://configurelaptop.eu/nv41-series/) is a 14-in
The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.X. Read our [announcement](/news/2023/09/06/nitropc-pro-qubes-certified/) for details.
+### Star Labs StarBook
+
+[](https://starlabs.systems/pages/starbook)
+
+The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X. Read our [announcement](TODO) for details.
+
## Become hardware certified
If you are a hardware vendor, you can have your hardware certified as compatible with Qubes OS. The benefits of hardware certification include:
From 1dfdd626803e5096bca2dbd7d5311daee15b8f67 Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Tue, 19 Dec 2023 23:09:37 -0700
Subject: [PATCH 055/332] Fix all bugs link
The "Issue tracking" page links to a list of all bug reports.
The referenced label `bug` seems to be obsolete.
This patch updates the link to point to the modern `T: bug` label.
Preserves sort order descending by last update.
---
introduction/issue-tracking.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 6bb52803..e550ac40 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -87,7 +87,7 @@ The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues
## Search tips
-- [Search both open and closed issues.](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue) For example, you may be experiencing a bug that was just fixed, in which case the report for that bug is probably closed. In this case, it would be useful to view [all bug reports, both open and closed, with the most recently updated sorted to the top](https://github.com/QubesOS/qubes-issues/issues?q=label%3Abug+sort%3Aupdated-desc).
+- [Search both open and closed issues.](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue) For example, you may be experiencing a bug that was just fixed, in which case the report for that bug is probably closed. In this case, it would be useful to view [all bug reports, both open and closed, with the most recently updated sorted to the top](https://github.com/QubesOS/qubes-issues/issues?q=label%3A%22T%3A+bug%22+sort%3Aupdated-desc).
- [Search with labels.](https://github.com/QubesOS/qubes-issues/labels) For example, you can search issues by priority ([blocker](https://github.com/QubesOS/qubes-issues/labels/P%3A%20blocker), [critical](https://github.com/QubesOS/qubes-issues/labels/P%3A%20critical), [major](https://github.com/QubesOS/qubes-issues/labels/P%3A%20major), etc.) and by component ([core](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+core%22), [manager/widget](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22C%3A+manager%2Fwidget%22+), [Xen](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+Xen%22), etc.).
From 8ad2d93e23dd58338ac21128db2ec3dceb224a9f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
Date: Sat, 11 Nov 2023 23:01:17 +0100
Subject: [PATCH 056/332] Change links to HTTPS
Change links that has HTTPS equivalent to HTTPS.
---
_dev/conf.py | 2 +-
developer/debugging/windows-debugging.md | 6 +++---
developer/general/devel-books.md | 4 ++--
developer/general/gsoc.md | 2 +-
introduction/support.md | 4 ++--
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/_dev/conf.py b/_dev/conf.py
index 9f311f45..c643b145 100644
--- a/_dev/conf.py
+++ b/_dev/conf.py
@@ -186,7 +186,7 @@ htmlhelp_basename = 'QubesOSdev'
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {
- 'python': ('http://docs.python.org/', None),
+ 'python': ('https://docs.python.org/', None),
# 'core-admin': ('https://dev.qubes-os.org/projects/core-admin/en/latest/', None),
}
diff --git a/developer/debugging/windows-debugging.md b/developer/debugging/windows-debugging.md
index 852d1c67..87f22b5a 100644
--- a/developer/debugging/windows-debugging.md
+++ b/developer/debugging/windows-debugging.md
@@ -47,7 +47,7 @@ socat $tty1,raw $tty2,raw
...but there is a catch. Xen seems to process the traffic that goes through serial ports and changes all **0x0a** bytes into **0x0d, 0x0a** pairs (newline conversion). I didn't find a way to turn that off (setting ptys to raw mode didn't change anything) and it's not mentioned anywhere on the Internet, so maybe it's something on my system. If the above script works for you then you don't need anything more in dom0.
- On the *target* system, run `bcdedit /set debug on` on the console to turn on kernel debugging. It defaults to the first serial port.
-- On the *host* system, install [WinDbg](http://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx) and start the kernel debug (Ctrl-K), choose **com1** as the debug port.
+- On the *host* system, install [WinDbg](https://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx) and start the kernel debug (Ctrl-K), choose **com1** as the debug port.
- Reboot the *target* VM.
- Run the above shell script in dom0.
- If everything is fine you should see the proper kernel debugging output in WinDbg. However, if you see something like that:
@@ -57,7 +57,7 @@ socat $tty1,raw $tty2,raw
Waiting to reconnect...
Connected to Windows 7 7601 x64 target at (Wed Mar 19 20:35:43.262 2014 (UTC + 1:00)), ptr64 TRUE
Kernel Debugger connection established.
- Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
+ Symbol search path is: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
Executable search path is:
... Retry sending the same data packet for 64 times.
The transport connection between host kernel debugger and target Windows seems lost.
@@ -206,7 +206,7 @@ parse:
> Waiting to reconnect...
> Connected to Windows 7 7601 x64 target at (Wed Mar 19 20:56:31.371 2014 (UTC + 1:00)), ptr64 TRUE
> Kernel Debugger connection established.
-> Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
+> Symbol search path is: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
> Executable search path is:
> Windows 7 Kernel Version 7601 MP (1 procs) Free x64
> Built by: 7601.18247.amd64fre.win7sp1_gdr.130828-1532
diff --git a/developer/general/devel-books.md b/developer/general/devel-books.md
index d7ae9ae0..361648ba 100644
--- a/developer/general/devel-books.md
+++ b/developer/general/devel-books.md
@@ -26,6 +26,6 @@ Below is a list of various books that might be useful in learning some basics ne
- _[Pro Git](https://git-scm.com/book/en/v2)_, by Scott Chacon and Ben Straub (complete book available free online)
- Useful books about Python:
- - _[Programming in Python 3](http://www.qtrac.eu/py3book.html)_, by Mark Summerfield
- - _[Rapid GUI Programming with Python and Qt](http://www.qtrac.eu/pyqtbook.html)_, by Mark Summerfield
+ - _[Programming in Python 3](https://www.qtrac.eu/py3book.html)_, by Mark Summerfield
+ - _[Rapid GUI Programming with Python and Qt](https://www.qtrac.eu/pyqtbook.html)_, by Mark Summerfield
(Although note that [Qt is being replaced by GTK](/doc/usability-ux/#gnome-kde-and-xfce) in Qubes code.)
diff --git a/developer/general/gsoc.md b/developer/general/gsoc.md
index 9e4adad3..e49d66d9 100644
--- a/developer/general/gsoc.md
+++ b/developer/general/gsoc.md
@@ -259,7 +259,7 @@ REMOVED as of January 2020: work is being done on this
**Project**: Unikernel based firewallvm with Qubes firewall settings support
-**Brief explanation**: [blog post](http://roscidus.com/blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/), [repo](https://github.com/talex5/qubes-mirage-firewall)
+**Brief explanation**: [blog post](https://roscidus.com/blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/), [repo](https://github.com/talex5/qubes-mirage-firewall)
**Expected results**: A firewall implemented as a unikernel which supports all the networking-related functionality as the default sys-firewall VM, including configuration via Qubes Manager. Other duties currently assigned to sys-firewall such as the update proxy may need to be appropriately migrated first.
diff --git a/introduction/support.md b/introduction/support.md
index 6f495938..ef073184 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -176,7 +176,7 @@ information in your message. A great way to provide your hardware details is by
[generating and submitting a Hardware Compatibility List (HCL)
report](/doc/how-to-use-the-hcl/#generating-and-submitting-new-reports), then
linking to it in your message. [Ask questions the smart
-way.](http://www.catb.org/esr/faqs/smart-questions.html)
+way.](https://www.catb.org/esr/faqs/smart-questions.html)
### Be patient
@@ -309,7 +309,7 @@ account is in no way required, expected, or encouraged. Many discussants
[mailing lists](https://en.wikipedia.org/wiki/Electronic_mailing_list),
interacting with them solely through plain text email with
[MUAs](https://en.wikipedia.org/wiki/Email_client) like
-[Thunderbird](https://www.thunderbird.net/) and [Mutt](http://www.mutt.org/).
+[Thunderbird](https://www.thunderbird.net/) and [Mutt](https://www.mutt.org/).
The Google Groups service is just free infrastructure, and we [distrust the
infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure). This
is why, for example, we encourage discussants to use [Split
From 0b342d3ed8e92c30555486d4231fe4a3fc75f94b Mon Sep 17 00:00:00 2001
From: unman
Date: Thu, 21 Dec 2023 00:48:17 +0000
Subject: [PATCH 057/332] Copy old firewall.md page to firewall_4.1.md for
continued support 4.1
---
user/security-in-qubes/firewall_4.1.md | 513 +++++++++++++++++++++++++
1 file changed, 513 insertions(+)
create mode 100644 user/security-in-qubes/firewall_4.1.md
diff --git a/user/security-in-qubes/firewall_4.1.md b/user/security-in-qubes/firewall_4.1.md
new file mode 100644
index 00000000..5c00c9f9
--- /dev/null
+++ b/user/security-in-qubes/firewall_4.1.md
@@ -0,0 +1,513 @@
+---
+lang: en
+layout: doc
+permalink: /doc/firewall_4.1/
+redirect_from:
+ref: 401
+title: Firewall 4.1
+---
+
+Introduction
+----------------------------------
+This page explains use of the firewall in Qubes 4.1, using `iptables`.
+From Qubes 4.2, all firewall components use `nftables`. For details of that usage see [here](../firewall/)
+
+
+Understanding firewalling in Qubes
+----------------------------------
+
+Every qube in Qubes is connected to the network via a FirewallVM, which is used to enforce network-level policies.
+By default there is one default FirewallVM, but the user is free to create more, if needed.
+
+For more information, see the following:
+
+- [https://groups.google.com/group/qubes-devel/browse\_thread/thread/9e231b0e14bf9d62](https://groups.google.com/group/qubes-devel/browse_thread/thread/9e231b0e14bf9d62)
+- [https://blog.invisiblethings.org/2011/09/28/playing-with-qubes-networking-for-fun.html](https://blog.invisiblethings.org/2011/09/28/playing-with-qubes-networking-for-fun.html)
+
+How to edit rules
+-----------------
+
+In order to edit rules for a given qube, select it in the Qube Manager and press the "firewall" button.
+
+
+
+If the qube is running, you can open Settings from the Qube Popup Menu.
+
+*R4.0 note:* ICMP and DNS are no longer accessible in the GUI, but can be changed via `qvm-firewall` described below.
+Connections to Updates Proxy are not made over a network so can not be allowed or blocked with firewall rules, but are controlled using the relevant policy file (see [R4.0 Updates proxy](/doc/software-update-vm/) for more detail).
+
+Note that if you specify a rule by DNS name it will be resolved to IP(s) *at the moment of applying the rules*, and not on the fly for each new connection.
+This means it will not work for servers using load balancing, and traffic to complex web sites which draw from many servers will be difficult to control.
+
+Instead of using the firewall GUI, you can use the `qvm-firewall` command in Dom0 to edit the firewall rules by hand.
+This gives you greater control than by using the GUI.
+
+The firewall rules for each qube are saved in an XML file in that qube's directory in dom0:
+
+```
+/var/lib/qubes/appvms//firewall.xml
+```
+
+Rules are implemented on the netvm.
+
+You can also manually create rules in the qube itself using standard firewalling controls.
+See [Where to put firewall rules](#where-to-put-firewall-rules).
+In complex cases, it might be appropriate to load a ruleset using `iptables-restore` called from `/rw/config/rc.local`.
+if you do this, be aware that `rc.local` is called *after* the network is up, so local rules should not be relied upon to block leaks.
+
+Reconnecting qubes after a NetVM reboot
+-------------------------------------
+
+Normally Qubes doesn't let the user stop a NetVM if there are other qubes running which use it as their own NetVM.
+But in case the NetVM stops for whatever reason (e.g. it crashes, or the user forces its shutdown via qvm-kill via terminal in Dom0), Qubes R4.0 will often automatically repair the connection.
+If it does not, then there is an easy way to restore the connection to the NetVM by issuing in dom0:
+
+` qvm-prefs netvm `
+
+Normally qubes do not connect directly to the actual NetVM which has networking devices, but rather to the default sys-firewall first, and in most cases it would be the NetVM that will crash, e.g. in response to S3 sleep/restore or other issues with WiFi drivers.
+In that case it is only necessary to issue the above command once, for the sys-firewall (this assumes default VM-naming used by the default Qubes installation):
+
+` qvm-prefs sys-firewall netvm sys-net `
+
+Network service qubes
+---------------------
+
+Qubes does not support running any networking services (e.g. VPN, local DNS server, IPS, ...) directly in a qube that is used to run the Qubes firewall service (usually sys-firewall) for good reasons.
+In particular, if you want to ensure proper functioning of the Qubes firewall, you should not tinker with iptables or nftables rules in such qubes.
+
+Instead, you should deploy a network infrastructure such as
+
+~~~
+sys-net <--> sys-firewall-1 <--> network service qube <--> sys-firewall-2 <--> [client qubes]
+~~~
+
+Thereby sys-firewall-1 is only needed if you have other client qubes connected there, or you want to manage the traffic of the local network service qube.
+The sys-firewall-2 proxy ensures that:
+
+1. Firewall changes done in the network service qube cannot render the Qubes firewall ineffective.
+2. Changes to the Qubes firewall by the Qubes maintainers cannot lead to unwanted information leakage in combination with user rules deployed in the network service qube.
+3. A compromise of the network service qube does not compromise the Qubes firewall.
+
+If you adopt this model, you should be aware that all traffic will arrive at the `network service qube` appearing to originate from the IP address of `sys-firewall-2`.
+
+For the VPN service please also look at the [VPN documentation](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md).
+
+Enabling networking between two qubes
+-------------------------------------
+
+Normally any networking traffic between qubes is prohibited for security reasons.
+However, in special situations, you might want to selectively allow specific qubes to establish networking connectivity between each other.
+For example, this might be useful in some development work, when you want to test networking code, or to allow file exchange between HVM domains (which do not have Qubes tools installed) via SMB/scp/NFS protocols.
+
+In order to allow networking between qubes A and B follow these steps:
+
+- Make sure both A and B are connected to the same firewall vm (by default all VMs use the same firewall VM).
+- Note the Qubes IP addresses assigned to both qubes.
+ This can be done using the `qvm-ls -n` command, or via the Qubes Manager preferences pane for each qube.
+- Start both qubes, and also open a terminal in the firewall VM
+- In the firewall VM's terminal enter the following iptables rule:
+
+~~~
+sudo iptables -I FORWARD 2 -s -d -j ACCEPT
+~~~
+
+- In qube B's terminal enter the following iptables rule:
+
+~~~
+sudo iptables -I INPUT -s -j ACCEPT
+~~~
+
+- Now you should be able to reach B from A -- test it using e.g. ping issued from A.
+ Note however, that this doesn't allow you to reach A from B -- for this you would need two more rules, with A and B swapped.
+- If everything works as expected, then you should write the above iptables rules into firewallVM's `qubes-firewall-user-script` script.
+ This script is run when the netvm starts up.
+ You should also write relevant rules in A and B's `rc.local` script which is run when the qube is launched.
+ Here's an example how to update the script:
+
+~~~
+[user@sys-firewall ~]$ sudo bash
+[root@sys-firewall user]# echo "iptables -I FORWARD 2 -s 10.137.2.25 -d 10.137.2.6 -j ACCEPT" >> /rw/config/qubes-firewall-user-script
+[root@sys-firewall user]# chmod +x /rw/config/qubes-firewall-user-script
+~~~
+
+- Here is an example how to update `rc.local`:
+
+~~~
+[user@B ~]$ sudo bash
+[root@B user]# echo "iptables -I INPUT -s 10.137.2.25 -j ACCEPT" >> /rw/config/rc.local
+[root@B user]# chmod +x /rw/config/rc.local
+~~~
+
+Opening a single TCP port to other network-isolated qube
+--------------------------------------------------------
+
+In the case where a specific TCP port needs to be exposed from a qubes to another one, you do not need to enable networking between them but you can use the qubes RPC service `qubes.ConnectTCP`.
+
+**1. Simple port binding**
+
+Consider the following example. `mytcp-service` qube has a TCP service running on port `444` and `untrusted` qube needs to access this service.
+
+- In dom0, add the following to `/etc/qubes/policy.d/30-user-networking.policy`: (it could be `another-other-name.policy` -- just remember to keep it consistent)
+
+ ~~~
+ qubes.ConnectTCP * untrusted @default allow target=mytcp-service
+ ~~~
+
+- In untrusted, use the Qubes tool `qvm-connect-tcp`:
+
+ ~~~
+ [user@untrusted #]$ qvm-connect-tcp 444:@default:444
+ ~~~
+
+> Note: The syntax is the same as SSH tunnel handler. The first `444` correspond to the localport destination of `untrusted`, `@default` the remote machine and the second `444` to the remote machine port.
+
+The service of `mytcp-service` running on port `444` is now accessible in `untrusted` as `localhost:444`.
+
+Here `@default` is used to hide the destination qube which is specified in the Qubes RPC policy by `target=mytcp-service`. Equivalent call is to use the tool as follow:
+
+~~~
+ [user@untrusted #]$ qvm-connect-tcp ::444
+~~~
+
+which means to use default local port of `unstrusted` as the same of the remote port and unspecified destination qube is `@default` by default in `qrexec` call.
+
+**2. Binding remote port on another local port**
+
+Consider now the case where someone prefers to specify the destination qube and use another port in untrusted, for example `10044`. Instead of previous case, add
+
+~~~
+qubes.ConnectTCP * untrusted mytcp-service allow
+~~~
+
+in `/etc/qubes/policy.d/30-user-networking.policy` and in untrusted, use the tool as follow:
+
+~~~
+ [user@untrusted #]$ qvm-connect-tcp 10444:mytcp-service:444
+~~~
+
+The service of `mytcp-service` running on port `444` is now accessible in `untrusted` as `localhost:10444`.
+
+**3. Binding to different qubes using RPC policies**
+
+One can go further than the previous examples by redirecting different ports to different qubes. For example, let assume that another qube `mytcp-service-bis` with a TCP service is running on port `445`. If someone wants `untrusted` to be able to reach this service but port `445` is reserved to `mytcp-service-bis` then, in dom0, add the following to `/etc/qubes/policy.d/30-user-networking.policy`:
+
+~~~
+qubes.ConnectTCP +445 untrusted @default allow target=mytcp-service-bis
+~~~
+
+In that case, calling `qvm-connect-tcp` like previous examples, will still bind TCP port `444` of `mytcp-service` to `untrusted` but now, calling it with port `445`
+
+~~~
+ [user@untrusted #]$ qvm-connect-tcp ::445
+~~~
+
+will restrict the binding to only the corresponding TCP port of `mytcp-service-bis`.
+
+**4. Permanent port binding**
+
+For creating a permanent port bind between two qubes, `systemd` can be used. We use the case of the first example. In `/rw/config` (or any place you find suitable) of qube `untrusted`, create `my-tcp-service.socket` with content:
+
+~~~
+[Unit]
+Description=my-tcp-service
+
+[Socket]
+ListenStream=127.0.0.1:444
+Accept=true
+
+[Install]
+WantedBy=sockets.target
+~~~
+
+and `my-tcp-service@.service` with content:
+
+~~~
+[Unit]
+Description=my-tcp-service
+
+[Service]
+ExecStart=qrexec-client-vm '' qubes.ConnectTCP+444
+StandardInput=socket
+StandardOutput=inherit
+~~~
+
+In `/rw/config/rc.local`, append the lines:
+
+~~~
+cp -r /rw/config/my-tcp-service.socket /rw/config/my-tcp-service@.service /lib/systemd/system/
+systemctl daemon-reload
+systemctl start my-tcp-service.socket
+~~~
+
+When the qube `unstrusted` has started (after a first reboot), you can directly access the service of `mytcp-service` running on port `444` as `localhost:444`.
+
+Port forwarding to a qube from the outside world
+------------------------------------------------
+
+In order to allow a service present in a qube to be exposed to the outside world in the default setup (where the qube has sys-firewall as network VM, which in turn has sys-net as network VM) the following needs to be done:
+
+- In the sys-net VM:
+ - Route packets from the outside world to the sys-firewall VM
+ - Allow packets through the sys-net VM firewall
+- In the sys-firewall VM:
+ - Route packets from the sys-net VM to the VM
+ - Allow packets through the sys-firewall VM firewall
+- In the qube:
+ - Allow packets through the qube firewall to reach the service
+
+As an example we can take the use case of a web server listening on port 443 that we want to expose on our physical interface eth0, but only to our local network 192.168.x.0/24.
+
+> Note: To have all interfaces available and configured, make sure the 3 qubes are up and running
+
+> Note: [Issue #4028](https://github.com/QubesOS/qubes-issues/issues/4028) discusses adding a command to automate exposing the port.
+
+**1. Identify the IP addresses you will need to use for sys-net, sys-firewall and the destination qube.**
+
+You can get this information from the Settings Window for the qube, or by running this command in each qube:
+`ifconfig | grep -i cast `
+Note the IP addresses you will need.
+> Note: The vifx.0 interface is the one used by qubes connected to this netvm so it is _not_ an outside world interface.
+
+**2. Route packets from the outside world to the FirewallVM**
+
+For the following example, we assume that the physical interface eth0 in sys-net has the IP address 192.168.x.y and that the IP address of sys-firewall is 10.137.1.z.
+
+In the sys-net VM's Terminal, code a natting firewall rule to route traffic on the outside interface for the service to the sys-firewall VM
+
+```
+iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 192.168.x.y -j DNAT --to-destination 10.137.1.z
+```
+
+Code the appropriate new filtering firewall rule to allow new connections for the service
+
+```
+iptables -I FORWARD 2 -i eth0 -d 10.137.1.z -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
+```
+
+> If you want to expose the service on multiple interfaces, repeat the steps described in part 1 for each interface.
+> In Qubes R4, at the moment ([QubesOS/qubes-issues#3644](https://github.com/QubesOS/qubes-issues/issues/3644)), nftables is also used which imply that additional rules need to be set in a `qubes-firewall` nft table with a forward chain.
+
+`nft add rule ip qubes-firewall forward meta iifname eth0 ip daddr 10.137.1.z tcp dport 443 ct state new counter accept`
+
+Verify you are cutting through the sys-net VM firewall by looking at its counters (column 2)
+
+```
+iptables -t nat -L -v -n
+iptables -L -v -n
+```
+
+> Note: On Qubes R4, you can also check the nft counters
+
+```
+nft list table ip qubes-firewall
+```
+
+Send a test packet by trying to connect to the service from an external device
+
+```
+telnet 192.168.x.y 443
+```
+
+Once you have confirmed that the counters increase, store these command in `/rw/config/rc.local` so they get set on sys-net start-up
+
+```
+sudo nano /rw/config/rc.local
+```
+
+~~~
+#!/bin/sh
+
+
+####################
+# My service routing
+
+# Create a new firewall natting chain for my service
+if iptables -w -t nat -N MY-HTTPS; then
+
+# Add a natting rule if it did not exist (to avoid clutter if script executed multiple times)
+ iptables -w -t nat -A MY-HTTPS -j DNAT --to-destination 10.137.1.z
+
+fi
+
+
+# If no prerouting rule exist for my service
+if ! iptables -w -t nat -n -L PREROUTING | grep --quiet MY-HTTPS; then
+
+# add a natting rule for the traffic (same reason)
+ iptables -w -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 192.168.x.y -j MY-HTTPS
+fi
+
+
+######################
+# My service filtering
+
+# Create a new firewall filtering chain for my service
+if iptables -w -N MY-HTTPS; then
+
+# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
+ iptables -w -A MY-HTTPS -s 192.168.x.0/24 -j ACCEPT
+
+fi
+
+# If no forward rule exist for my service
+if ! iptables -w -n -L FORWARD | grep --quiet MY-HTTPS; then
+
+# add a forward rule for the traffic (same reason)
+ iptables -w -I FORWARD 2 -d 10.137.1.z -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
+
+fi
+~~~
+
+> Note: Again in R4 the following needs to be added:
+
+~~~
+#############
+# In Qubes R4
+
+# If not already present
+if nft -nn list table ip qubes-firewall | grep "tcp dport 443 ct state new"; then
+
+# Add a filtering rule
+ nft add rule ip qubes-firewall forward meta iifname eth0 ip daddr 10.137.1.z tcp dport 443 ct state new counter accept
+
+fi
+~~~
+
+**3. Route packets from the FirewallVM to the VM**
+
+For the following example, we use the fact that the physical interface of sys-firewall, facing sys-net, is eth0. Furthermore, we assume that the target VM running the web server has the IP address 10.137.0.xx and that the IP address of sys-firewall is 10.137.1.z.
+
+In the sys-firewall VM's Terminal, code a natting firewall rule to route traffic on its outside interface for the service to the qube
+
+```
+iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 10.137.1.z -j DNAT --to-destination 10.137.0.xx
+```
+
+Code the appropriate new filtering firewall rule to allow new connections for the service
+
+```
+iptables -I FORWARD 2 -i eth0 -s 192.168.x.0/24 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
+```
+
+> Note: If you do not wish to limit the IP addresses connecting to the service, remove the ` -s 192.168.0.1/24 `
+
+> Note: On Qubes R4
+
+```
+nft add rule ip qubes-firewall forward meta iifname eth0 ip saddr 192.168.x.0/24 ip daddr 10.137.0.xx tcp dport 443 ct state new counter accept
+```
+
+Once you have confirmed that the counters increase, store these command in `/rw/config/qubes-firewall-user-script`
+
+```
+sudo nano /rw/config/qubes-firewall-user-script
+```
+
+~~~
+#!/bin/sh
+
+
+####################
+# My service routing
+
+# Create a new firewall natting chain for my service
+if iptables -w -t nat -N MY-HTTPS; then
+
+# Add a natting rule if it did not exist (to avoid clutter if script executed multiple times)
+ iptables -w -t nat -A MY-HTTPS -j DNAT --to-destination 10.137.0.xx
+
+fi
+
+
+# If no prerouting rule exist for my service
+if ! iptables -w -t nat -n -L PREROUTING | grep --quiet MY-HTTPS; then
+
+# add a natting rule for the traffic (same reason)
+ iptables -w -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d 10.137.1.z -j MY-HTTPS
+fi
+
+
+######################
+# My service filtering
+
+# Create a new firewall filtering chain for my service
+if iptables -w -N MY-HTTPS; then
+
+# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
+ iptables -w -A MY-HTTPS -s 192.168.x.0/24 -j ACCEPT
+
+fi
+
+# If no forward rule exist for my service
+if ! iptables -w -n -L FORWARD | grep --quiet MY-HTTPS; then
+
+# add a forward rule for the traffic (same reason)
+ iptables -w -I FORWARD 4 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
+
+fi
+
+################
+# In Qubes OS R4
+
+# If not already present
+if ! nft -nn list table ip qubes-firewall | grep "tcp dport 443 ct state new"; then
+
+# Add a filtering rule
+ nft add rule ip qubes-firewall forward meta iifname eth0 ip saddr 192.168.x.0/24 ip daddr 10.137.0.xx tcp dport 443 ct state new counter accept
+
+fi
+~~~
+
+Finally make this file executable (so it runs at every Firewall VM update)
+
+~~~
+sudo chmod +x /rw/config/qubes-firewall-user-script
+~~~
+
+If the service should be available to other VMs on the same system, do not forget to specify the additional rules described above.
+
+**4. Allow packets into the qube to reach the service**
+
+Here no routing is required, only filtering.
+Proceed in the same way as above but store the filtering rule in the `/rw/config/rc.local` script.
+For the following example, we assume that the target VM running the web server has the IP address 10.137.0.xx
+
+```
+sudo nano /rw/config/rc.local
+```
+
+~~~
+######################
+# My service filtering
+
+# Create a new firewall filtering chain for my service
+if iptables -w -N MY-HTTPS; then
+
+# Add a filtering rule if it did not exist (to avoid clutter if script executed multiple times)
+ iptables -w -A MY-HTTPS -j ACCEPT
+
+fi
+
+# If no input rule exists for my service
+if ! iptables -w -n -L INPUT | grep --quiet MY-HTTPS; then
+
+# add a forward rule for the traffic (same reason)
+ iptables -w -I INPUT 5 -d 10.137.0.xx -p tcp --dport 443 -m conntrack --ctstate NEW -j MY-HTTPS
+
+fi
+~~~
+
+This time testing should allow connectivity to the service as long as the service is up :-)
+
+Where to put firewall rules
+---------------------------
+
+Implicit in the above example [scripts](/doc/config-files/), but worth calling attention to: for all qubes *except* those supplying networking, iptables commands should be added to the `/rw/config/rc.local` script.
+For app qubes supplying networking (`sys-firewall` inclusive), iptables commands should be added to `/rw/config/qubes-firewall-user-script`.
+
+Firewall troubleshooting
+------------------------
+
+Firewall logs are stored in the systemd journal of the qube the firewall is running in (probably `sys-firewall`).
+You can view them by running `sudo journalctl -u qubes-firewall.service` in the relevant qube.
+Sometimes these logs can contain useful information about errors that are preventing the firewall from behaving as you would expect.
From a94d4f3059703a148deeee3adc8205c60e970e74 Mon Sep 17 00:00:00 2001
From: unman
Date: Thu, 21 Dec 2023 01:02:35 +0000
Subject: [PATCH 058/332] Add link back from frewall page to 4.1 version
---
user/security-in-qubes/firewall.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 8d3efdb9..3cb7c42b 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -11,6 +11,12 @@ ref: 166
title: Firewall
---
+Introduction
+----------------------------------
+This page explains use of the firewall in Qubes 4.2, using `nftables`.
+In Qubes 4.1, all firewall components used `iptables`. For details of that usage see [here](../firewall_4.1/)
+
+
Understanding firewalling in Qubes
----------------------------------
From 7c8762511ce485207c9171a5449195bd02239dde Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Wed, 20 Dec 2023 18:18:01 -0700
Subject: [PATCH 059/332] Fix reason:completed link
The "Issue tracking" page has a link to completed issues. The text
is reason:complete but the query is reason:completed.
This patch updates the text to align with the query.
---
introduction/issue-tracking.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index e550ac40..64db9112 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -91,7 +91,7 @@ The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues
- [Search with labels.](https://github.com/QubesOS/qubes-issues/labels) For example, you can search issues by priority ([blocker](https://github.com/QubesOS/qubes-issues/labels/P%3A%20blocker), [critical](https://github.com/QubesOS/qubes-issues/labels/P%3A%20critical), [major](https://github.com/QubesOS/qubes-issues/labels/P%3A%20major), etc.) and by component ([core](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+core%22), [manager/widget](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22C%3A+manager%2Fwidget%22+), [Xen](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+Xen%22), etc.).
-- Search by closure reason: [`reason:complete`](https://github.com/QubesOS/qubes-issues/issues?q=reason%3Acompleted) and [`reason:"not planned"`](https://github.com/QubesOS/qubes-issues/issues?q=reason%3A%22not+planned%22).
+- Search by closure reason: [`reason:completed`](https://github.com/QubesOS/qubes-issues/issues?q=reason%3Acompleted) and [`reason:"not planned"`](https://github.com/QubesOS/qubes-issues/issues?q=reason%3A%22not+planned%22).
- [Search by project](https://github.com/QubesOS/qubes-issues/projects).
From 607f66daeecc3304323225bf996186a4bc0fd5ba Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Thu, 21 Dec 2023 17:17:46 -0700
Subject: [PATCH 060/332] Remove extraneous word
---
introduction/issue-tracking.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 64db9112..f711dd9d 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -188,7 +188,7 @@ We close issues at step 3. Then, as updates are released, the issue automaticall
Therefore, if you see that an issue is closed, but the fix is not yet available to you, be aware that it may be at an intermediate stage of this process between issue closure and the update being available in whichever repos you have enabled in whichever version of Qubes you're using.
-In order to assist with this, we have a label called [backport pending](https://github.com/QubesOS/qubes-issues/labels/backport%20pending), which means, "The fix has been released for the testing release but is pending backport to the stable release." Our infrastructure will attempt to apply this label automatically, when appropriate, but it is not perfect, and the developers may be need to adjust it manually.
+In order to assist with this, we have a label called [backport pending](https://github.com/QubesOS/qubes-issues/labels/backport%20pending), which means, "The fix has been released for the testing release but is pending backport to the stable release." Our infrastructure will attempt to apply this label automatically, when appropriate, but it is not perfect, and the developers may need to adjust it manually.
### Understanding open and closed issues
From ee3479c1699202da20d913c651f352da29702c61 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Thu, 21 Dec 2023 19:47:26 -0800
Subject: [PATCH 061/332] Remove announcement links
These announcements contain outdated information, and they mostly just
duplicate information that is already on each vendor's website. By
removing these links, we refrain from directing users to read
out-of-date information when they can instead get the latest information
from each vendor. Moreover, we don't have to worry about our duplicate
information becoming desynchronized from each vendor, which would create
confusion for users.
---
user/hardware/certified-hardware.md | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index d06be86e..1338c9fb 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -29,37 +29,37 @@ The current Qubes-certified models are listed below in chronological order of ce
[](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/)
-The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X. Read our [announcement](/news/2019/07/18/insurgo-privacybeast-qubes-certification/) for details.
+The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
### NitroPad X230
[](https://shop.nitrokey.com/shop/product/nitropad-x230-67)
-The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X. Read our [announcement](/news/2020/03/04/nitropad-x230-qubes-certification/) for details.
+The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
### NitroPad T430
[](https://shop.nitrokey.com/shop/product/nitropad-t430-119)
-The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.X. Read our [announcement](/news/2021/06/01/nitropad-t430-qubes-certification/) for details.
+The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.X.
### Dasharo FidelisGuard Z690
[](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/)
-The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.X. Read our [announcement](/news/2023/03/15/dasharo-fidelisguard-z690-first-qubes-certified-desktop/) for details.
+The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.X.
### NovaCustom NV41 Series
[](https://novacustom.com/product/nv41-series/)
-The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.X. Read our [announcement](/news/2023/05/03/novacustom-nv41-series-qubes-certified/) for details.
+The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.X.
### NitroPC Pro
[](https://shop.nitrokey.com/shop/product/nitropc-pro-523)
-The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.X. Read our [announcement](/news/2023/09/06/nitropc-pro-qubes-certified/) for details.
+The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.X.
## Become hardware certified
From babb1b00f11236eb13033fe56d00470dd0d90734 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Fri, 22 Dec 2023 14:18:37 -0800
Subject: [PATCH 062/332] Remove Whonix from table
Whonix 16 will reach EOL before Qubes 4.1 reaches EOL, at which point
the table will be inaccurate. Since the Whonix support cycle does not
match the Qubes support cycle, and since whonix templates are not
official templates, it is better to remove from them from the table and
direct users to the Whonix website for official information about
support status.
---
.../supported-releases.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 3d7d1b7d..8d6d567b 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -91,10 +91,10 @@ upstream release on the upstream distribution's website (see [Fedora
EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian
Releases](https://wiki.debian.org/DebianReleases)).
-| Qubes OS | Fedora | Debian | Whonix |
-| ----------- | ------ | ------ | ------ |
-| Release 4.1 | 38 | 11, 12 | 16 |
-| Release 4.2 | 38 | 12 | 17 |
+| Qubes OS | Fedora | Debian |
+| ----------- | ------ | ------ |
+| Release 4.1 | 38 | 11, 12 |
+| Release 4.2 | 38 | 12 |
### Note on Debian support
From e1987db9a40055e8a1f52cf1fc2f88408dba1450 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Fri, 22 Dec 2023 14:31:43 -0800
Subject: [PATCH 063/332] Unwrap text
---
.../supported-releases.md | 60 +++----------------
1 file changed, 8 insertions(+), 52 deletions(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 8d6d567b..65565e1a 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -8,16 +8,11 @@ ref: 154
title: Supported releases
---
-This page details the level and period of support for releases of operating
-systems in the Qubes ecosystem.
+This page details the level and period of support for releases of operating systems in the Qubes ecosystem.
## Qubes OS
-Qubes OS releases are supported for **six months** after each subsequent major
-or minor release (see [Version Scheme](/doc/version-scheme/)). The current
-release and past major releases are always available on the
-[Downloads](/downloads/) page, while all ISOs, including past minor releases,
-are available from our [download mirrors](/downloads/#mirrors).
+Qubes OS releases are supported for **six months** after each subsequent major or minor release (see [Version Scheme](/doc/version-scheme/)). The current release and past major releases are always available on the [Downloads](/downloads/) page, while all ISOs, including past minor releases, are available from our [download mirrors](/downloads/#mirrors).
| Qubes OS | Start Date | End Date | Status |
| ----------- | ---------- | ---------- | -------------- |
@@ -33,13 +28,7 @@ are available from our [download mirrors](/downloads/#mirrors).
### Note on patch releases
-Please note that patch releases, such as 3.2.1 and 4.0.1, do not designate
-separate, new major or minor releases of Qubes OS. Rather, they designate their
-respective major or minor releases, such as 3.2 and 4.0, inclusive of all
-package updates up to a certain point. For example, installing Release 4.0 and
-fully updating it results in the same system as installing Release 4.0.1.
-Therefore, patch releases are not displayed as separate rows on any of the
-tables on this page.
+Please note that patch releases, such as 3.2.1 and 4.0.1, do not designate separate, new major or minor releases of Qubes OS. Rather, they designate their respective major or minor releases, such as 3.2 and 4.0, inclusive of all package updates up to a certain point. For example, installing Release 4.0 and fully updating it results in the same system as installing Release 4.0.1. Therefore, patch releases are not displayed as separate rows on any of the tables on this page.
## Dom0
@@ -58,38 +47,13 @@ The table below shows the OS used for dom0 in each Qubes OS release.
### Note on dom0 and EOL
-Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as
-Xen, device backends (in the dom0 kernel and in other VMs, such as the NetVM),
-and Qubes tools (gui-daemon, qrexec-daemon, etc.). These components are
-[security-critical](/doc/security-critical-code/), and we provide updates for
-all of them (when necessary), regardless of the support status of the base
-distribution. For this reason, we consider it safe to continue using a given
-base distribution in dom0 even after it has reached end-of-life (EOL).
+Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as Xen, device backends (in the dom0 kernel and in other VMs, such as the NetVM), and Qubes tools (gui-daemon, qrexec-daemon, etc.). These components are [security-critical](/doc/security-critical-code/), and we provide updates for all of them (when necessary), regardless of the support status of the base distribution. For this reason, we consider it safe to continue using a given base distribution in dom0 even after it has reached end-of-life (EOL).
## Templates
-The following table shows select [template](/doc/templates/) releases that are
-currently supported. Currently, only [Fedora](/doc/templates/fedora/) and
-[Debian](/doc/templates/debian/) templates are officially supported by the
-Qubes OS Project. [Whonix](https://www.whonix.org/wiki/Qubes) templates are
-supported by our partner, the [Whonix Project](https://www.whonix.org/). Qubes
-support for each template ends when that upstream release reaches end-of-life
-(EOL), even if that release is included in the table below. Please see below for
-distribution-specific notes.
+The following table shows select [template](/doc/templates/) releases that are currently supported. Currently, only [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/) templates are officially supported by the Qubes OS Project. [Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our partner, the [Whonix Project](https://www.whonix.org/). Qubes support for each template ends when that upstream release reaches end-of-life (EOL), even if that release is included in the table below. Please see below for distribution-specific notes.
-It is the responsibility of each distribution to clearly notify its users in
-advance of its own EOL dates, and it is users' responsibility to heed these
-notices by upgrading to supported releases. As a courtesy to Qubes users, we
-attempt to pass along any upstream EOL notices we receive for
-officially-supported templates, but our ability to do this reliably is
-dependent on the upstream distribution's practices. If a distribution provides
-a mailing list similar to [qubes-announce](/support/#qubes-announce), which
-allows us to receive only very important, infrequent messages, including EOL
-announcements, we are much more likely to be able to pass along EOL notices to
-Qubes users reliably. Qubes users can always check the EOL status of an
-upstream release on the upstream distribution's website (see [Fedora
-EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian
-Releases](https://wiki.debian.org/DebianReleases)).
+It is the responsibility of each distribution to clearly notify its users in advance of its own EOL dates, and it is users' responsibility to heed these notices by upgrading to supported releases. As a courtesy to Qubes users, we attempt to pass along any upstream EOL notices we receive for officially-supported templates, but our ability to do this reliably is dependent on the upstream distribution's practices. If a distribution provides a mailing list similar to [qubes-announce](/support/#qubes-announce), which allows us to receive only very important, infrequent messages, including EOL announcements, we are much more likely to be able to pass along EOL notices to Qubes users reliably. Qubes users can always check the EOL status of an upstream release on the upstream distribution's website (see [Fedora EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian Releases](https://wiki.debian.org/DebianReleases)).
| Qubes OS | Fedora | Debian |
| ----------- | ------ | ------ |
@@ -98,16 +62,8 @@ Releases](https://wiki.debian.org/DebianReleases)).
### Note on Debian support
-Debian releases have two EOL dates: regular and [long-term support
-(LTS)](https://wiki.debian.org/LTS). See [Debian Production
-Releases](https://wiki.debian.org/DebianReleases#Production_Releases) for a
-chart that illustrates this. Qubes support ends at the *regular* EOL date,
-*not* the LTS EOL date, unless a specific exception has been made.
+Debian releases have two EOL dates: regular and [long-term support (LTS)](https://wiki.debian.org/LTS). See [Debian Production Releases](https://wiki.debian.org/DebianReleases#Production_Releases) for a chart that illustrates this. Qubes support ends at the *regular* EOL date, *not* the LTS EOL date, unless a specific exception has been made.
### Note on Whonix support
-[Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our
-partner, the [Whonix Project](https://www.whonix.org/). The Whonix Project has
-set its own support policy for Whonix templates in Qubes. Please see the
-[Qubes-Whonix version support policy](https://www.whonix.org/wiki/About#Qubes_Hosts)
-for details.
+[Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our partner, the [Whonix Project](https://www.whonix.org/). The Whonix Project has set its own support policy for Whonix templates in Qubes. Please see the [Qubes-Whonix version support policy](https://www.whonix.org/wiki/About#Qubes_Hosts) for details.
From 7c7c0382d66f2a0cbfce6a44c3f04b8184b2a2cf Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Fri, 22 Dec 2023 14:33:33 -0800
Subject: [PATCH 064/332] Add minor clarification
---
user/downloading-installing-upgrading/supported-releases.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 65565e1a..18416a26 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -51,7 +51,7 @@ Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as Xen
## Templates
-The following table shows select [template](/doc/templates/) releases that are currently supported. Currently, only [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/) templates are officially supported by the Qubes OS Project. [Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our partner, the [Whonix Project](https://www.whonix.org/). Qubes support for each template ends when that upstream release reaches end-of-life (EOL), even if that release is included in the table below. Please see below for distribution-specific notes.
+The following table shows select [template](/doc/templates/) (and [standalone](/doc/standalones-and-hvms/)) releases that are currently supported. Currently, only [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/) templates are officially supported by the Qubes OS Project. [Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our partner, the [Whonix Project](https://www.whonix.org/). Qubes support for each template ends when that upstream release reaches end-of-life (EOL), even if that release is included in the table below. Please see below for distribution-specific notes.
It is the responsibility of each distribution to clearly notify its users in advance of its own EOL dates, and it is users' responsibility to heed these notices by upgrading to supported releases. As a courtesy to Qubes users, we attempt to pass along any upstream EOL notices we receive for officially-supported templates, but our ability to do this reliably is dependent on the upstream distribution's practices. If a distribution provides a mailing list similar to [qubes-announce](/support/#qubes-announce), which allows us to receive only very important, infrequent messages, including EOL announcements, we are much more likely to be able to pass along EOL notices to Qubes users reliably. Qubes users can always check the EOL status of an upstream release on the upstream distribution's website (see [Fedora EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian Releases](https://wiki.debian.org/DebianReleases)).
From c25b832d597bf9da21a62e93bb12ea9b4f0399a8 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Fri, 22 Dec 2023 14:36:13 -0800
Subject: [PATCH 065/332] Make wording more accurate
---
user/downloading-installing-upgrading/supported-releases.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 18416a26..977806e0 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -53,7 +53,7 @@ Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as Xen
The following table shows select [template](/doc/templates/) (and [standalone](/doc/standalones-and-hvms/)) releases that are currently supported. Currently, only [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/) templates are officially supported by the Qubes OS Project. [Whonix](https://www.whonix.org/wiki/Qubes) templates are supported by our partner, the [Whonix Project](https://www.whonix.org/). Qubes support for each template ends when that upstream release reaches end-of-life (EOL), even if that release is included in the table below. Please see below for distribution-specific notes.
-It is the responsibility of each distribution to clearly notify its users in advance of its own EOL dates, and it is users' responsibility to heed these notices by upgrading to supported releases. As a courtesy to Qubes users, we attempt to pass along any upstream EOL notices we receive for officially-supported templates, but our ability to do this reliably is dependent on the upstream distribution's practices. If a distribution provides a mailing list similar to [qubes-announce](/support/#qubes-announce), which allows us to receive only very important, infrequent messages, including EOL announcements, we are much more likely to be able to pass along EOL notices to Qubes users reliably. Qubes users can always check the EOL status of an upstream release on the upstream distribution's website (see [Fedora EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian Releases](https://wiki.debian.org/DebianReleases)).
+It is the responsibility of each distribution to clearly notify its users in advance of its own EOL dates, and it is users' responsibility to heed these notices by upgrading to supported releases. As a courtesy to Qubes users, we attempt to pass along upstream EOL notices we receive for select distributions, but our ability to do this reliably is dependent on the upstream distribution's practices. For example, if a distribution provides a mailing list similar to [qubes-announce](/support/#qubes-announce), which allows us to receive only very important, infrequent messages, including EOL announcements, we are much more likely to be able to pass along EOL notices to Qubes users reliably. Qubes users can always check the EOL status of an upstream release on the upstream distribution's website (see [Fedora EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian Releases](https://wiki.debian.org/DebianReleases)).
| Qubes OS | Fedora | Debian |
| ----------- | ------ | ------ |
From c43c67e10a9bb211451d403a67360db3346e4f61 Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Fri, 22 Dec 2023 19:53:53 -0700
Subject: [PATCH 066/332] Pluralize word
---
introduction/issue-tracking.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index f711dd9d..1085625b 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -105,7 +105,7 @@ This guideline is important for keeping issues focused on *actionable informatio
### Do not submit questions
-[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is not the place to ask questions. This includes, but is not limited to, troubleshooting questions and questions about how to do things with Qubes. Instead, see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate place to ask questions. By contrast, [qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is meant for tracking more general bugs, enhancements, and tasks that affect a broad range of Qubes users.
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is not the place to ask questions. This includes, but is not limited to, troubleshooting questions and questions about how to do things with Qubes. Instead, see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate places to ask questions. By contrast, [qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is meant for tracking more general bugs, enhancements, and tasks that affect a broad range of Qubes users.
### Use the issue template
From 3dd6a34f2a08eff745e9a3eb80f1c9b8ccc2719d Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Sat, 23 Dec 2023 22:11:42 -0700
Subject: [PATCH 067/332] Add missing word
---
introduction/support.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/support.md b/introduction/support.md
index ef073184..9d8b7512 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -39,7 +39,7 @@ No worries! Here's how we recommend proceeding:
3. Try [searching the issue tracker](/doc/issue-tracking/#search-tips). There
may already be an open **or closed** issue about your problem. The issue
tracker is constantly being updated with known bugs and may contain
- workarounds for problems you're experiencing. If there any pinned issues at
+ workarounds for problems you're experiencing. If there are any pinned issues at
the top, make sure to check them first!
4. Try [searching the Qubes Forum](https://forum.qubes-os.org/). There may
From 444b04ddfb4747f2cb8a0e458979bba3b1be9ef9 Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Sun, 24 Dec 2023 16:21:45 -0700
Subject: [PATCH 068/332] Remove duplicate word
---
introduction/support.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/support.md b/introduction/support.md
index 9d8b7512..03b51e46 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -226,7 +226,7 @@ The moderation team aims to enforce our [Code of Conduct](/code-of-conduct/).
Beyond this, users should not expect any specific action from the moderation
team. Specifically, users should not request that posts or messages be deleted
or edited by a moderator. Users are reminded that, in most venues, anything
-posted will be sent out as an email to other others, and these emails cannot be
+posted will be sent out as an email to others, and these emails cannot be
deleted from others' inboxes.
### Specific mailing list rules and notes
From 9f1a698032c39067ec671f37eee2f6e6914c05a3 Mon Sep 17 00:00:00 2001
From: EntomoSci <70287304+EntomoSci@users.noreply.github.com>
Date: Tue, 2 Jan 2024 20:41:57 -0300
Subject: [PATCH 069/332] Update standalones-and-hvms.md
Add cmd option to command alternative of standalone creation to reflect better the "alternative" part of the GUI version given its option msg "Standalone qube copied from a template".
---
user/advanced-topics/standalones-and-hvms.md | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/user/advanced-topics/standalones-and-hvms.md b/user/advanced-topics/standalones-and-hvms.md
index 038f4f71..e1b0e7a3 100644
--- a/user/advanced-topics/standalones-and-hvms.md
+++ b/user/advanced-topics/standalones-and-hvms.md
@@ -59,11 +59,13 @@ your own OS)."
Alternatively, from the dom0 command line:
```
-qvm-create --class StandaloneVM --label --property virt_mode=hvm
+qvm-create --class StandaloneVM --label --property virt_mode=hvm --template
```
-(Note: Technically, `virt_mode=hvm` is not necessary for every standalone.
-However, it makes sense if you want to use a kernel from within the qube.)
+Notes:
+- Technically, `virt_mode=hvm` is not necessary for every standalone.
+However, it makes sense if you want to use a kernel from within the qube.
+- If you want to make available the software installed in a template qube in your standalone, pass its name to `--template` option.
## Updating standalones
From 108fb1e106a65e0d5c0a7f13913be8fd288a62d0 Mon Sep 17 00:00:00 2001
From: chomiczosc <155738605+chomiczosc@users.noreply.github.com>
Date: Fri, 5 Jan 2024 15:26:36 +0100
Subject: [PATCH 070/332] Update getting-started.md
- simplifying "Getting started section" to make it more comprehensible
- updating the section to match Qubes 4.2
---
introduction/getting-started.md | 135 +++++++++++++++-----------------
1 file changed, 64 insertions(+), 71 deletions(-)
diff --git a/introduction/getting-started.md b/introduction/getting-started.md
index 1ac922d5..92409e27 100644
--- a/introduction/getting-started.md
+++ b/introduction/getting-started.md
@@ -18,14 +18,13 @@ Dive right in to [organizing your qubes](/doc/how-to-organize-your-qubes/).)
## The Basics
-Qubes OS is an operating system built out of securely-isolated compartments
-called [qubes](/doc/glossary/#qube). For example, you might have a work qube, a
-personal qube, a banking qube, a web browsing qube, and so on. You can have as
-many qubes as you want! Most of the time, you'll be using an [app
-qube](/doc/glossary/#app-qube), which is a qube intended for running software
+Qubes OS is an operating system built out of securely-isolated compartments, or [qubes](/doc/glossary/#qube).
+You can have a work qube, a personal qube, a banking qube, a web browsing qube, a standalone Windows qube and so on.
+You can have as many qubes as you want! Most of the time, you'll be using an [app
+qube](/doc/glossary/#app-qube), a qube for running software
programs like web browsers, email clients, and word processors. Each app qube
is based on another type of qube called a [template](/doc/glossary/#template).
-More than one qube can be based on the same template. Importantly, a qube
+The same template can be a base for various cubes. Importantly, a qube
cannot modify its template in any way. This means that, if a qube is ever
compromised, its template and any other qubes based on that template will
remain safe. This is what makes Qubes OS so secure. Even if an attack is
@@ -35,9 +34,8 @@ Suppose you want to use your favorite web browser in several different qubes.
You'd install the web browser in a template, then every qube based on that
template would be able to run the web browser software (while still being
forbidden from modifying the template and any other qubes). This way, you only
-have to install the web browser a single time, and updating the template serves
-to update all the qubes based on it. This elegant design saves time and space
-while enhancing security.
+have to install the web browser a single time, and updating the template updates all the qubes based on it.
+This elegant design saves time and space while enhancing security.
There are also some "helper" qubes in your system. Each qube that connects to
the Internet does so through a network-providing [service
@@ -54,27 +52,24 @@ corresponding version number. There are many ready-to-use
many as you like.
Last but not least, there's a very special [admin
-qube](/doc/glossary/#admin-qube) which, as the name suggests, is used to
-administer your entire system. There's only one admin qube, and it's called
-[dom0](/doc/glossary/#dom0). You can think of it as the master qube, holding
-ultimate power over everything that happens in Qubes OS. Dom0 is more trusted
-than any other qube. If dom0 were ever compromised, it would be "game over."
-The entire system would effectively be compromised. That's why everything in
-Qubes OS is specifically designed to protect dom0 and ensure that doesn't
+qube](/doc/glossary/#admin-qube) used to administer your entire system.
+There's only one admin qube, and it's called [dom0](/doc/glossary/#dom0).
+You can think of it as the master qube, holding ultimate power over everything that happens in Qubes OS.
+Dom0 is the most trusted one of all qubes. If dom0 were ever to be compromised, it would be "game over"- an effective compromise of the entire system.
+That's why everything in Qubes OS is specifically designed to protect dom0 and ensure that doesn't
happen. Due to its overarching importance, dom0 has no network connectivity and
is used only for running the [desktop
environment](https://en.wikipedia.org/wiki/Desktop_environment) and [window
manager](https://en.wikipedia.org/wiki/Window_manager). Dom0 should never be
used for anything else. In particular, you should never run user applications
-in dom0. (That's what your app qubes are for!)
+in dom0. (That's what your app qubes are for!) In short, do not interact directly with dom0 in any way, shape or form.
### Color & Security
You'll choose a **color** for each of your qubes out of a predefined set of
-colors. Each window on your desktop will have its frame colored according to
-the color of that qube. These colored frames help you keep track of which qube
-each window belongs to and how trustworthy it is. This is especially helpful
-when you have the same app running in multiple qubes at the same time. For
+colors. The color of the frame of each window on your desktop will correspond to the color of that cube.
+These colored frames help you keep track of which qube you're currently using and how trustworthy it is. This is especially helpful
+when you have the same program running in multiple qubes at the same time. For
example, if you're logged in to your bank account in one qube while doing some
random web surfing in a different qube, you wouldn't want to accidentally enter
your banking password in the latter! The colored frames help to avoid such
@@ -83,16 +78,16 @@ mistakes.
[](/attachment/doc/r4.0-snapshot_40.png)
Most Qubes users associate red with what's untrusted and dangerous (like a red
-light: stop! danger!), green with what's safe and trusted, and yellow and
-orange with things in the middle. This color scheme also extends to include
-blue and black, which are usually interpreted as indicating progressively more
-trusted domains than green, with black being ultimately trusted. Color and
-associated meanings are ultimately up to you, however. The system itself does
-not treat the colors differently. If you create two identical qubes --- black
+stop light signalling danger), green with what's safe and trusted, and yellow and
+orange with things in-between. This color scheme also includes
+blue and black, commonly interpreted as indicating progressively more
+trusted domains than green, with black being ultimately trusted. However, color and
+associated meanings are entirely up to you. The system itself does
+not treat the colors differently - they're all equally safe on their own. If you create two identical qubes --- black
and red, say --- they'll be the same until you start using them differently.
-Feel free to use the colors in whatever way is most useful to you. For example,
+Feel free to use the colors in the way that best meets your needs. For example,
you might decide to use three or four qubes for work activities and give them
-all the same color --- or all different colors. It's entirely up to you.
+all the same color --- or all different colors depending on the nature of the task they are used for.
### User Interface
@@ -104,27 +99,24 @@ the window managers [i3](/doc/i3/) and [AwesomeWM](/doc/awesomewm/).
[](/attachment/doc/r4.0-taskbar.png)
-The bar at the top of your screen in Qubes 4.0 includes the following XFCE
+The bar at the top of your screen in Qubes 4.2 includes the following XFCE
component areas:
-- The **Tray**, where many functional widgets live.
+- The **App Menu**, where you go to open an application within a qube, to open
+ a dom0 terminal, to access administrative UI tools such as the Qube Manager,
+ or to access settings panels for your desktop environment.
+- The **Task Bar** where buttons for open and hidden windows live.
- **Spaces**, an interface for [virtual
desktops](https://en.wikipedia.org/wiki/Virtual_desktop). Virtual desktops do
not have any inherent security isolation properties, but some users find them
useful for organizing things.
-- The **Task Bar** where buttons for open and hidden windows live.
-- The **App Menu**, where you go to open an application within a qube, to open
- a dom0 terminal, to access administrative UI tools such as the Qube Manager,
- or to access settings panels for your desktop environment.
-
-To learn more about how to customize your desktop environment, we recommend you
-spend some time going through [XFCE's documentation](https://docs.xfce.org/).
+- The **Tray**, where many functional widgets live.
There are several tray widgets that are unique to Qubes OS:
- The **Whonix SDWDate** allows you to control the Tor connection in your
[`sys-whonix`](https://www.whonix.org/wiki/Qubes) qube.
-- The **Qubes Clipboard** lets you easily copy text from dom0.
+- The **Qubes Clipboard** lets you easily [copy text](https://wwwpreview.qubes-os.org/doc/how-to-copy-and-paste-text/) between various qubes and from dom0.
- The **Qubes Devices** widget allows you to attach and detach devices --- such
as USB drives and cameras --- to qubes.
- The **Qubes Disk Space** widget shows you how much storage you're using.
@@ -136,50 +128,57 @@ There are several tray widgets that are unique to Qubes OS:
[](/attachment/doc/r4.1-widgets.png)
+To learn more about how to customize your desktop environment, we recommend you
+go through [XFCE's documentation](https://docs.xfce.org/).
+
#### Qube Manager
-To see all of your qubes at the same time, you can use the **Qube Manager** (go
-to the App Menu → Qubes Tools → Qube Manager), which displays the states of
-all the qubes in your system, even the ones that aren't running.
+To see all of your qubes at the same time, you can use the **Qube Manager**.
+It displays the states of all the qubes in your system, even the ones that aren’t running.
+
+To access Qube Manager go to:
+Qubes Icon (App Menu) → Settings Icon → Qubes Tools → **Qube Manager**
[](/attachment/doc/r4.0-qubes-manager.png)
#### Command-line interface
-All aspects of Qubes OS can be controlled using command-line tools. Opening a
-terminal emulator in dom0 can be done in several ways:
+All aspects of Qubes OS can be controlled using command-line tools such as the terminal emulator.
+The default terminal emulator in Qubes is Xfce Terminal.
+Opening a terminal emulator in dom0 can be done in several ways:
-- Go to the App Menu and select **Terminal Emulator** at the top.
+- Go to the App Menu, click on the Settings icon, choose Other from the drop-down menu, and select **Xfce Terminal Emulator** at the bottom.
- Press `Alt`+`F3` and search for `xfce terminal`.
- Right-click on the desktop and select **Open Terminal Here**.
-Terminal emulators can also be run in other qubes as normal programs. Various
-command-line tools are described as part of this guide, and the whole reference
-can be found [here](/doc/tools/).
+Various command-line tools are described as part of this guide, and the whole reference can be found [here](/doc/tools/).
+Terminal emulators can also be run in other qubes as normal programs.
## First boot
When you install Qubes OS, a number of qubes are pre-configured for you:
-- **Templates:** `fedora-XX` (`XX` being the version number)
+- **App qubes** such as `work`, `personal`, `untrusted`, and `vault` are your "starter pack" qubes to compartmentalize tasks
+ and types of data to suit most basic needs. (There is nothing special about these pre-configured qubes - they are identical in nature to more specific ones you might wish to create later.)
+- **Templates:** `fedora-XX`, `debian-XX` (`XX` being the version number)
+- **Service qubes:** `sys-usb`, `sys-net`, `sys-firewall`, and `sys-whonix`)
- **Admin qube:** `dom0`
-- **Service qubes:** `sys-usb`, `sys-net`, `sys-firewall`, and `sys-whonix`
-- **App qubes** configured to prioritize security by compartmentalizing tasks
- and types of data: `work`, `personal`, `untrusted`, and `vault`. (There is
- nothing special about these qubes. If you were to create a black qube and
- name it `vault`, it would be the same as the pre-configured `vault` qube.
- They're just suggestions to get you started. )
-A variety of open-source applications such as file managers, command-line
-terminals, printer managers, text editors, and "applets" used to configure
-different things like audio or parts of the user interface are also installed
-by default—most within the templates. Most are bundled with each template.
+Other software installed in Qubes OS by default includes open-source applications such as file managers,
+command-line terminals, printer managers, text editors, and applets for configuring audio and user interface settings.
+Most of these applications are incorporated within each template.
### Adding, removing, and listing qubes
-You can easily create a new qube with the **Create Qubes VM** option in the App
-Menu. If you need to add or remove qubes, simply use the Qube Manager's **Add**
-and **Remove** buttons. You can also add, remove, and list qubes from the
+To create a new qube or remove one, use **Create Qubes VM** option in the App Menu.
+
+Creating a New Qube:
+Qubes Icon → Settings → Qubes Tools → Qube Manager → Create Qubes VM → **New Qube**
+
+Removing a qube:
+To remove a qube, use the **Delete qube button** as the final step instead.
+
+You can also add, remove, and list qubes from the
command line using the following tools:
- `qvm-create`
@@ -188,14 +187,8 @@ command line using the following tools:
### How many qubes do I need?
-That's a great question, but there's no one-size-fits-all answer. It depends on
-the structure of your digital life, and this is at least a little different for
-everyone. If you plan on using your system for work, then it also depends on
-what kind of job you do.
-
-It's a good idea to start out with the qubes created automatically by the
-installer: `work`, `personal`, `untrusted`, and `vault`. If and when you start
-to feel that some activity just doesn't fit into any of your existing qubes, or
+It's a good idea to start out with the pre-installed app qubes: `work`, `personal`, `untrusted`, and `vault`.
+If you start to feel that some activity just doesn't fit into any of your existing qubes, or
you want to partition some part of your life, you can easily create a new qube
for it. You'll also be able to easily [copy any
files](/doc/how-to-copy-and-move-files) you need to the newly-created qube.
@@ -252,5 +245,5 @@ GitHub](https://github.com/QubesOS).
## Documentation
-Peruse our extensive library of [documentation](/doc/) for users and developers
+Browse our extensive library of [documentation](/doc/) for users and developers
of Qubes OS. You can even [help us improve it](/doc/how-to-edit-the-documentation/)!
From 4a9ab9fac587590027d8330dcc25e6a825d93182 Mon Sep 17 00:00:00 2001
From: chomiczosc <155738605+chomiczosc@users.noreply.github.com>
Date: Fri, 5 Jan 2024 15:45:08 +0100
Subject: [PATCH 071/332] Update getting-started.md
Fixes from review
---
introduction/getting-started.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/introduction/getting-started.md b/introduction/getting-started.md
index 92409e27..4a02083c 100644
--- a/introduction/getting-started.md
+++ b/introduction/getting-started.md
@@ -24,7 +24,7 @@ You can have as many qubes as you want! Most of the time, you'll be using an [ap
qube](/doc/glossary/#app-qube), a qube for running software
programs like web browsers, email clients, and word processors. Each app qube
is based on another type of qube called a [template](/doc/glossary/#template).
-The same template can be a base for various cubes. Importantly, a qube
+The same template can be a base for various qubes. Importantly, a qube
cannot modify its template in any way. This means that, if a qube is ever
compromised, its template and any other qubes based on that template will
remain safe. This is what makes Qubes OS so secure. Even if an attack is
@@ -62,7 +62,7 @@ is used only for running the [desktop
environment](https://en.wikipedia.org/wiki/Desktop_environment) and [window
manager](https://en.wikipedia.org/wiki/Window_manager). Dom0 should never be
used for anything else. In particular, you should never run user applications
-in dom0. (That's what your app qubes are for!) In short, do not interact directly with dom0 in any way, shape or form.
+in dom0. (That's what your app qubes are for!) In short, be very careful when interacting with dom0.
### Color & Security
From 4971daeec4ffd017c9d2525d7335641aa19859c5 Mon Sep 17 00:00:00 2001
From: Pierre Alain <65669679+palainp@users.noreply.github.com>
Date: Fri, 5 Jan 2024 18:36:42 +0100
Subject: [PATCH 072/332] Update managing-vm-kernels.md
The presence of initramfs is checked with Qubes 4.2 in the current head of qubes-core-admin (https://github.com/QubesOS/qubes-core-admin/blob/49c9fc95a26fbc866efe731b94cef543de67cb07/qubes/storage/kernels.py#L140).
---
user/advanced-topics/managing-vm-kernels.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/advanced-topics/managing-vm-kernels.md b/user/advanced-topics/managing-vm-kernels.md
index 903151ad..fd073123 100644
--- a/user/advanced-topics/managing-vm-kernels.md
+++ b/user/advanced-topics/managing-vm-kernels.md
@@ -224,7 +224,7 @@ Kernel for a VM is stored in `/var/lib/qubes/vm-kernels/KERNEL_VERSION` director
* `modules.img` - ext4 filesystem image containing Linux kernel modules (to be mounted at `/lib/modules`); additionally it should contain a copy of `vmlinuz` and `initramfs` in its root directory (for loading by qemu inside stubdomain)
* `default-kernelopts-common.txt` - default kernel options, in addition to those specified with `kernelopts` qube property (can be disabled with `no-default-kernelopts` feature)
-All the files besides `vmlinuz` are optional in Qubes R4.1 or newer. In Qubes R4.0, `vmlinuz` and `initramfs` are both required to be present.
+All the files besides `vmlinuz` and `initramfs` are optional in Qubes R4.0 or newer.
## Using kernel installed in the VM
From 206f7f20865ede1af6ae80495831128bcee6d04d Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Fri, 5 Jan 2024 19:58:32 -0800
Subject: [PATCH 073/332] Further clarify spaces in fingerprint
https://forum.qubes-os.org/t/23503
---
project-security/verifying-signatures.md | 29 +++++++++++++++---------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/project-security/verifying-signatures.md b/project-security/verifying-signatures.md
index 5be0d0b3..5a474674 100644
--- a/project-security/verifying-signatures.md
+++ b/project-security/verifying-signatures.md
@@ -190,8 +190,9 @@ you see here may not be genuine. That's why we strongly suggest obtaining the
fingerprint from *multiple independent sources in several different ways*, then
comparing the strings of letters and numbers to make sure they match.
-When it comes to PGP fingerprints, spaces and capitalization don't matter. In
-other words, all of these fingerprints are considered the same:
+For the purpose of convincing yourself that you know the authentic QMSK
+fingerprint, spaces and capitalization don't matter. In other words, all of
+these fingerprints are considered the same:
```
427F 11FD 0FAA 4B08 0123 F01C DDFA 1A3E 3687 9494
@@ -201,12 +202,16 @@ other words, all of these fingerprints are considered the same:
```
Instead, what matters is that *all* the characters are present in *exactly* the
-same order. If even one character is different, the fingerprints do not match.
-Even if two fingerprints have all the same characters, if any of those
-characters are in a different order, sequence, or position, then the
-fingerprints do not match.
+same order. If even one character is different, the fingerprints should not be
+considered the same. Even if two fingerprints have all the same characters, if
+any of those characters are in a different order, sequence, or position, then
+the fingerprints should not be considered the same.
-You may also sometimes see the entire fingerprint prefixed with `0x`, as in:
+However, for the purpose of *searching for*, *looking up*, or *entering* keys,
+spaces and capitalization can matter, depending on the software or tool you're
+using. You may need to try different variations (e.g., with and without
+spaces). You may also sometimes see (or need to enter) the entire fingerprint
+prefixed with `0x`, as in:
```
0x427F11FD0FAA4B080123F01CDDFA1A3E36879494
@@ -214,10 +219,12 @@ You may also sometimes see the entire fingerprint prefixed with `0x`, as in:
```
The `0x` prefix is sometimes used to indicate that the string following it is a
-hexadecimal value, and some PGP-related tools may require this prefix. For the
-purpose of comparing fingerprints as described here, you may safely ignore the
-`0x` prefix, as it is not part of the fingerprint. As long as the 40-character
-string after the `0x` matches exactly, the fingerprint is the same.
+hexadecimal value, and some PGP-related tools may require this prefix. Again,
+for the purpose of convincing yourself that you know the authentic QMSK
+fingerprint, you may safely ignore the `0x` prefix, as it is not part of the
+fingerprint. As long as the 40-character string after the `0x` matches exactly,
+the fingerprint is considered the same. The `0x` prefix only matters if the
+software or tool you're using cares about it.
The general idea of "comparing fingerprints" is to go out into the world
(whether digitally, physically, or both) and find other 40-character strings
From ee570dee48952fd17483cf681157ffe8676ccb31 Mon Sep 17 00:00:00 2001
From: cinderflash <154299375+cinderflash@users.noreply.github.com>
Date: Mon, 8 Jan 2024 22:59:01 -0700
Subject: [PATCH 074/332] Pluralize word
---
introduction/support.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/introduction/support.md b/introduction/support.md
index 03b51e46..4fc0185e 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -403,7 +403,7 @@ interface](https://groups.google.com/group/qubes-devel).
This list is for non-technical discussion and coordination around the Qubes OS
project.
-Examples of topics or question suitable for this list include:
+Examples of topics or questions suitable for this list include:
* Participation (talks, workshops, etc.) at upcoming events
* Project funding applications and strategies
@@ -430,7 +430,7 @@ interface](https://groups.google.com/group/qubes-project).
This list is for discussion around the localization and translation of Qubes
OS, its documentation, and the website.
-Examples of topics or question suitable for this list include:
+Examples of topics or questions suitable for this list include:
* Questions about or issues with [Transifex](https://www.transifex.com/), the
translation platform we use
From 7a2f875a330ab69f47756080c94e859a8e586907 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Wed, 10 Jan 2024 03:56:19 -0800
Subject: [PATCH 075/332] Remove outdated sentence
---
user/hardware/certified-hardware.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index 942bbe37..42afb236 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -65,7 +65,7 @@ The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a d
[](https://starlabs.systems/pages/starbook)
-The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X. Read our [announcement](TODO) for details.
+The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X.
## Become hardware certified
From b7a000ad061c082cd47cc0be3b65247fc2f6daba Mon Sep 17 00:00:00 2001
From: Rune Philosof <57357936+runephilosof-abtion@users.noreply.github.com>
Date: Mon, 22 Jan 2024 07:54:23 +0100
Subject: [PATCH 076/332] fedora-upgrade.md: Update template-name
The qubes-updater has started using the qvm-features template-name to check whether the template is supported.
So the template name needs to be updated.
https://github.com/QubesOS/qubes-desktop-linux-manager/blob/main/qui/utils.py#L83-L95
Partly fixes: https://github.com/QubesOS/qubes-issues/issues/8725
Still missing the other in-place template upgrade instructions.
---
user/templates/fedora/fedora-upgrade.md | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/user/templates/fedora/fedora-upgrade.md b/user/templates/fedora/fedora-upgrade.md
index 2529e1de..2d5dad90 100644
--- a/user/templates/fedora/fedora-upgrade.md
+++ b/user/templates/fedora/fedora-upgrade.md
@@ -51,6 +51,7 @@ If you wish to install a new, unmodified Fedora template instead of upgrading a
[user@dom0 ~]$ qvm-shutdown fedora-
[user@dom0 ~]$ sudo losetup -d $dev
[user@dom0 ~]$ rm /var/tmp/template-upgrade-cache.img
+[user@dom0 ~]$ qvm-features fedora- template-name fedora-
```
**Recommended:** [Switch everything that was set to the old template to the new template.](/doc/templates/#switching)
@@ -159,15 +160,21 @@ The same general procedure may be used to upgrade any template based on the stan
[user@dom0 ~]$ rm /var/tmp/template-upgrade-cache.img
```
-8. (Recommended) [Switch everything that was set to the old template to the new template.](/doc/templates/#switching)
+8. Set the template-name, which is used by the Qubes updater.
-9. (Optional) Make the new template the global default.
+ ```
+ [user@dom0 ~]$ qvm-features fedora- template-name fedora-
+ ```
+
+9. (Recommended) [Switch everything that was set to the old template to the new template.](/doc/templates/#switching)
+
+10. (Optional) Make the new template the global default.
```
[user@dom0 ~]$ qubes-prefs --set default_template fedora-
```
-10. (Optional) [Uninstall the old template.](/doc/templates/#uninstalling)
+11. (Optional) [Uninstall the old template.](/doc/templates/#uninstalling)
Make sure that the template you're uninstalling is the old one, not the new one!
## Summary instructions for Fedora Minimal templates
@@ -180,6 +187,7 @@ The same general procedure may be used to upgrade any template based on the stan
[root@fedora--minimal ~]# dnf clean all
[user@fedora--minimal ~]# dnf --releasever= --best --allowerasing distro-sync
[user@fedora--minimal ~]# fstrim -v /
+[user@dom0 ~]$ qvm-features fedora--minimal template-name fedora-
```
(Shut down template by any normal means.)
From 164bc8289cdff01588d6ff21159f0a6740b7f07a Mon Sep 17 00:00:00 2001
From: deeplow
Date: Fri, 2 Feb 2024 10:38:29 +0000
Subject: [PATCH 077/332] Generalize YubiKey guide by adding TOTP MFA
Not every user will have a hardware token. This adds instructions
for setting up multi-factor with TOTP. This was inspired / based on
work by @kennethrrosen [1].
Everything about the YubiKey guide is kept but moved to a lower
heading level to acommodate for the two MFA options: YubiKey or TOTP.
[1]: https://forum.qubes-os.org/t/otp-for-xscreensaver-guide/23988
---
.../security-in-qubes/{yubi-key.md => mfa.md} | 130 +++++++++++++++---
1 file changed, 112 insertions(+), 18 deletions(-)
rename user/security-in-qubes/{yubi-key.md => mfa.md} (60%)
diff --git a/user/security-in-qubes/yubi-key.md b/user/security-in-qubes/mfa.md
similarity index 60%
rename from user/security-in-qubes/yubi-key.md
rename to user/security-in-qubes/mfa.md
index a4cdfc68..b1f6938f 100644
--- a/user/security-in-qubes/yubi-key.md
+++ b/user/security-in-qubes/mfa.md
@@ -1,32 +1,126 @@
---
lang: en
layout: doc
-permalink: /doc/yubikey/
+permalink: /doc/mfa/
redirect_from:
- /doc/yubi-key/
- /en/doc/yubi-key/
- /doc/YubiKey/
+- /doc/yubikey/
ref: 169
-title: YubiKey
+title: Multi-factor Login
---
+
+## Multi-factor authentication within in particular qubes
+
+Most use cases for the hardware tokens can be achieved exactly as described by the
+manufacturer or other instructions found online. One usually just needs to
+attach the token (e.g. YubiKey) to the corresponding app qube to get the same
+result (see the documentation on how to use [USB devices](/doc/how-to-use-usb-devices/)
+in Qubes OS accordingly). The recommended way for using CTAP in Qubes is described
+[here](https://www.qubes-os.org/doc/ctap-proxy/).
+
+## Multi-factor login for Qubes OS
+
+By default Qubes has two protection mechanisms against attackers. The first is full disk encryption and the second the user login screen / lockscreen. This article section concerns only adding multi-factor authentication to the second one.
+
+### Time-based One-time Password (TOTP)
+
+As the name implies, this generates authentication code that is time-dependent. You can save the TOTP secret in a mobile app like [FreeOTP](https://en.wikipedia.org/wiki/FreeOTP)
+and then use it as an additional factor to login to your Qubes system.
+
+> **Warning**: remember to keep backup access codes.
+
+1. Download `google-authenticator` in dom0:
+
+ ```
+ sudo qubes-dom0-update google-authenticator
+ ```
+
+2. Run google authenticator:
+
+ ```
+ google-authenticator
+ ```
+
+3. Walk through the setup instructions 2 which will also generate your QR code for your auth app of choice:
+
+ ```
+ Do you want me to update your “/home/user/.google_authenticator” file (y/n) y
+
+ Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)
+
+ By default, tokens are good for 30 seconds, and to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)
+
+ If the computer that you are logging into isn’t hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)
+ ```
+
+> **Warning**: in the next session if incorrectly performed, there is the risk of locking yourself out. Before procedding ensure that you have an up-to-date backup.
+>
+> For advanced users, to make sure you can quickly recover, you can also open another loging session in a tty. To do this, you do ctrl+alt+F2 and login normally. Should anything go wrong, as long as you don't shut the computer down, you can still access this tty by entering the same key combination and reverting the changes. After you've opened this "backup" login, you can get to your graphical desktop with ctrl+alt+F1.
+
+Now we are going to add the authenticator as a login requirement:
+
+1. `sudo authselect create-profile mfa --base-on sssd`
+
+2. Edit the custom system authentication template with `sudo nanois encouraged /etc/authselect/custom/mfa/system-auth`.
+
+ Add the following line right after `auth required pam_faildelay.so delay=2000000`:
+
+ ```
+ auth required pam_google_authenticator.so
+ ```
+
+ After the change, the top of the file should look like this:
+
+ ```
+ {imply "with-smartcard" if "with-smartcard-required"}
+ auth required pam_env.so
+ auth required pam_faildelay.so delay=2000000
+ auth required pam_google_authenticator.so
+ ```
+
+3. Lastly, activate this authentication method with:
+
+ ```
+ sudo authselect select custom/mfa
+ ```
+
+Now you can test by locking the screen with ctrl+alt+l. If it was successful and you are pleased with the results, restart your computer.
+
+**Note**: When logging in. the first thing you put is the TOTP secret and then the password. This is true in the screen locker and as well as the session manager (the login window that shows right after you put the disk encryption passphrase).
+
+After this is done, its recommended to do a backup. This is because as long as you incude dom0 in the backup, your authentication code will be backed up as well.
+
+#### Troubleshooting
+
+The following assumes you haven't restarted your computer since setting up TOTP secret.
+
+1. Switch to TTY2 with ctrl+alt+F2.
+2. Revert to the original policy with:
+ ```
+ sudo authselect select sssd
+ ```
+3. Switch back to the graphical desktop with ctrl+alt+F1. You should be able to login normally (without multi-factor authentication).
+4. Change the mfa custom policy and apply it again.
+
+#### Lost TOTP / authentication device?
+
+In case you've lost your TOTP authentication device, you have two options.
+
+The first option is backup codes. When generating the TOTP secret you must have saved some recovery codes. Those can be used in place of the TOTP code, but they're discarded after use. So make sure you redo the multi-factor authentications intructions.
+
+The second option is recovery from a backup. It will work as long as you included dom0 in said backup. After restoring the dom0 backup, open a terminal in dom0 and the file should be located in `/home//home-restore-/dom0-home//.google_authenticator`.
+
+### Login with a YubiKey
+
"The YubiKey is a hardware authentication device manufactured by Yubico to
protect access to computers, networks, and online services that supports
one-time passwords (OTP), public-key cryptography, and authentication, and the
Universal 2nd Factor (U2F) and FIDO2 protocols[1] developed by the FIDO
Alliance." ([Wikipedia](https://en.wikipedia.org/wiki/YubiKey))
-## General usage in Qubes OS
-
-Most use cases for the YubiKey can be achieved exactly as described by the
-manufacturer or other instructions found online. One usually just needs to
-attach the YubiKey to the corresponding app qube to get the same result (see the
-documentation on how to use [USB devices](/doc/how-to-use-usb-devices/) in Qubes
-OS accordingly). The recommended way for using CTAP in Qubes is described
-[here](https://www.qubes-os.org/doc/ctap-proxy/).
-
-## Multi-factor login for Qubes OS
-
You can use a YubiKey to enhance the user authentication in Qubes. The following
instructions explain how to setup the YubiKey as an *additional* way to login.
@@ -45,7 +139,7 @@ during setup and b) you do not need to fear [shoulder
surfing](https://en.wikipedia.org/wiki/Shoulder_surfing_(computer_security)) so
much (i.e. by not using your standard login password in public).
-### Setup login with YubiKey
+#### Setup login with YubiKey
To use the YubiKey for multi-factor authentication you need to
@@ -90,7 +184,7 @@ All these requirements are described below, step by step.
YubiKey](https://www.qubes-os.org/doc/how-to-use-usb-devices/) to this app qube
though) or directly on the sys-usb vm.
- You need to (temporarily) install the package "yubikey-personalization-gui" and
+ You need to (temporarily) install the package "yubikey-personalization-gui" and
run it by typing `yubikey-personalization-gui` in the command line.
- In the program go to `Challenge-Response`,
@@ -154,7 +248,7 @@ these files, otherwise it will most likely not work.
7. Adjust the USB VM name in case you are using something other than the default
`sys-usb` by editing `/etc/qubes/yk-keys/yk-vm` in dom0.
-### Usage
+#### Usage
When you want to authenticate
@@ -169,7 +263,7 @@ When everything is ok, your screen will be unlocked.
In any case you can still use your normal login password, but do it in a secure
location where no one can snoop your password.
-### Optional: Enforce YubiKey Login
+#### Optional: Enforce YubiKey Login
Edit `/etc/pam.d/yubikey` (or appropriate file if you are using other screen locker program) and remove `default=ignore` so the line looks like this.
@@ -177,7 +271,7 @@ Edit `/etc/pam.d/yubikey` (or appropriate file if you are using other screen loc
auth [success=done] pam_exec.so expose_authtok quiet /usr/bin/yk-auth
```
-### Optional: Locking the screen when YubiKey is removed
+#### Optional: Locking the screen when YubiKey is removed
Look into it
You can setup your system to automatically lock the screen when you unplug your YubiKey.
From 8d0e6ed68c32f33cf878f126fc29aa9db5baf831 Mon Sep 17 00:00:00 2001
From: ABIbreak <158116564+ABIbreak@users.noreply.github.com>
Date: Sat, 3 Feb 2024 23:11:15 -0500
Subject: [PATCH 078/332] Remove mentions of wireless-tools
Fedora removed the package back in 2021 (see https://fedoraproject.org/wiki/Changes/RemoveWirelessExtensions), and a query on pkgs.org reports that CentOS does not have any packages by that name
---
user/templates/minimal-templates.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 6fd7aa9f..2da511ff 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -144,7 +144,7 @@ list of packages to be installed):
(which is normally `sys-firewall`).
- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
`qubes-core-agent-network-manager` `NetworkManager-wifi`
- `network-manager-applet` `wireless-tools` `notification-daemon`
+ `network-manager-applet` `notification-daemon`
`gnome-keyring` `polkit` `@hardware-support`. If your network devices need
extra packages for the template to work as a network VM, use the `lspci`
command to identify the devices, then run `dnf search firmware` (replace
@@ -324,7 +324,7 @@ list of packages to be installed):
if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
`qubes-core-agent-network-manager` `NetworkManager-wifi`
- `network-manager-applet` `wireless-tools` `notification-daemon`
+ `network-manager-applet` `notification-daemon`
`gnome-keyring`. If your network devices need extra packages for a network
VM, use the `lspci` command to identify the devices, then find the package
that provides necessary firnware and install it. If you need utilities for
From 3ada8f6f0c41beda65357897059e6e48e1c02ec5 Mon Sep 17 00:00:00 2001
From: Sylwester Arabas
Date: Wed, 7 Feb 2024 00:42:28 +0100
Subject: [PATCH 079/332] fix hex digit number in the key upload instruction
---
developer/code/code-signing.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/code/code-signing.md b/developer/code/code-signing.md
index d22c3cf8..b92b258a 100644
--- a/developer/code/code-signing.md
+++ b/developer/code/code-signing.md
@@ -65,7 +65,7 @@ Currently, [these](https://github.com/marmarek/signature-checker/blob/master/che
In the example below, we will use `keyserver.ubuntu.com`.
-Replace 6E2F4E7AF50A5827 with your key ID, which is the last 8 hex digits of the long number in the second line of the output above:
+Replace 6E2F4E7AF50A5827 with your key ID, which is the last 16 hex digits of the long number in the second line of the output above:
```
pub rsa3072 2021-12-30 [SC] [expires: 2023-12-30]
87975838063F97A968D503266E2F4E7AF50A5827
From 60969a1610f6152075c8ab5efadf6c9a3417a67f Mon Sep 17 00:00:00 2001
From: Sylwester Arabas
Date: Wed, 7 Feb 2024 00:46:11 +0100
Subject: [PATCH 080/332] remove repeated code (shell session) snippet
---
developer/code/code-signing.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/developer/code/code-signing.md b/developer/code/code-signing.md
index d22c3cf8..b14da08f 100644
--- a/developer/code/code-signing.md
+++ b/developer/code/code-signing.md
@@ -76,11 +76,6 @@ $ gpg --send-keys --keyserver hkps://keyserver.ubuntu.com 6E2F4E7AF50A5827
gpg: sending key 6E2F4E7AF50A5827 to hkps://keyserver.ubuntu.com
```
-```
-$ gpg --send-keys --keyserver hkps://keyserver.ubuntu.com 6E2F4E7AF50A5827
-gpg: sending key 6E2F4E7AF50A5827 to hkps://keyserver.ubuntu.com
-```
-
## Using PGP with Git
If you're submitting a patch via GitHub (or a similar Git server), please sign
From 5e2c457b9bfc32aebb0c7f41b676ebc13b7b49a9 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 13 Feb 2024 03:59:36 -0800
Subject: [PATCH 081/332] Add Fedora 39 to supported templates
QubesOS/qubes-issues#8499
---
user/downloading-installing-upgrading/supported-releases.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 977806e0..5bbcf993 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -57,8 +57,8 @@ It is the responsibility of each distribution to clearly notify its users in adv
| Qubes OS | Fedora | Debian |
| ----------- | ------ | ------ |
-| Release 4.1 | 38 | 11, 12 |
-| Release 4.2 | 38 | 12 |
+| Release 4.1 | 38, 39 | 11, 12 |
+| Release 4.2 | 38, 39 | 12 |
### Note on Debian support
From 7eaacf0b21d259eadeb06f643ce27faf6103b4a7 Mon Sep 17 00:00:00 2001
From: deeplow
Date: Sat, 17 Feb 2024 14:36:07 +0000
Subject: [PATCH 082/332] FIXUP: use instead qubes-dist-upgrade tool
---
.../upgrade/4_2.md | 41 +++++++------------
1 file changed, 15 insertions(+), 26 deletions(-)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index 058d481b..ba088be1 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -22,37 +22,26 @@ data.
If you would prefer to perform a clean installation rather than upgrading
in-place:
-1. Create a
+1. (optional) Run the updater to ensure all of your templates are in their latest version.
+2. Install the `qubes-dist-upgrade` tool. This is the inplace upgrade tool, which is not what we're doing. However it will needed in order to prepare the templates for the 4.2 version. You install it with the following command in the dom0 terminal:
+
+ sudo qubes-dom0-update -y qubes-dist-upgrade
+
+3. Change your templates to use the 4.2 repositories instead of the 4.1 ones. You do this with the following command in the dom0 terminal:
+
+ qubes-dist-upgrade --template-standalone-upgrade
+
+ **Note**: This step is critical to ensure the templates will receive updates once Qubes 4.1 reaches end-of-life (EOL) and was missing in previous clean installation instructions.
+
+4. Create a
[backup](/doc/how-to-back-up-restore-and-migrate/#creating-a-backup) of your
current installation.
-2. [Download](/downloads/) the latest 4.2 release.
-3. Follow the [installation guide](/doc/installation-guide/) to install Qubes
+5. [Download](/downloads/) the latest 4.2 release.
+6. Follow the [installation guide](/doc/installation-guide/) to install Qubes
4.1.
-4. [Restore from your
+7. [Restore from your
backup](/doc/how-to-back-up-restore-and-migrate/#restoring-from-a-backup) on
your new 4.2 installation.
-5. In each old the old templates update the Qubes software sources from 4.1 to Qubes 4.2.
- > **Note**: If the templates were first installed on a version older than
- > Qubes 4.1, you should reinstall them. For example, your first Qubes install
- > was 4.0 and you've been upgrading to Qubes 4.2 via clean install ever since,
- > then this affects you and you should instead use the templates that come
- > preinstalled in 4.2.
-
- If the above note does not apply, you should open a teminal in each of the
- imported templates and running the following commands:
- - **Debian-based templates**:
- ```
- sudo sed -i 's/r4.1/r4.2/g' /etc/apt/sources.list.d/qubes-r4.list
- sudo sed -i 's|\[arch=amd64\]|\[arch=amd64 signed-by=/usr/share/keyrings/qubes-archive-keyring-4.2.gpg \]|g' /etc/apt/sources.list.d/qubes-r4.list
- sudo apt update
- sudo apt upgrade
- ```
- - **Fedora-based templates**:
- ```
- sudo sed -i 's/r4.1/r4.2/g' /etc/yum.repos.d/qubes-r4.repo
- sudo sed -i 's/RPM-GPG-KEY-qubes-4.1-/RPM-GPG-KEY-qubes-4.2-/g' /etc/yum.repos.d/qubes-r4.repo
- sudo dnf update
- ```
## In-place upgrade
From 1d540888fe1e84d1deef10e413545f3ec9a5fb60 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Sat, 17 Feb 2024 09:38:23 -0800
Subject: [PATCH 083/332] Add template upgrade problem to list of known issues
References QubesOS/qubes-doc#1345 and QubesOS/qubes-issues#8701
---
developer/releases/4_2/release-notes.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 7b4dbc58..649f5571 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -42,9 +42,13 @@ The new Qubes OS Policy Editor tool:
## Known issues
-- DomU firewalls have completely switched to nftables. Users should add their custom rules to the `custom-input` and `custom-forward` chains. ([#5031](https://github.com/QubesOS/qubes-issues/issues/5031), [#6062](https://github.com/QubesOS/qubes-issues/issues/6062))
+- DomU firewalls have completely switched to nftables. Users should add their custom rules to the `custom-input` and `custom-forward` chains. (For more information, see issues [#5031](https://github.com/QubesOS/qubes-issues/issues/5031) and [#6062](https://github.com/QubesOS/qubes-issues/issues/6062).)
-For a full list of open bug reports affecting 4.2, please see [here](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aissue+label%3Aaffects-4.2+label%3A%22T%3A+bug%22+is%3Aopen). We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after installation in order to apply any and all available bug fixes.
+- Templates continue to target their original Qubes OS release repos even after both the templates and Qubes OS itself have been upgraded to newer releases. If you are using fresh templates, this does not affect you. However, if you are migrating existing templates from a pre-4.2.0 installation, then please see [qubes-doc PR #1345](https://github.com/QubesOS/qubes-doc/pull/1345) and issue [#8701](https://github.com/QubesOS/qubes-issues/issues/8701).
+
+Also see the [full list of open bug reports affecting Qubes 4.2](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aissue+label%3Aaffects-4.2+label%3A%22T%3A+bug%22+is%3Aopen).
+
+We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after installation in order to apply all available bug fixes.
## Download
From df40f5eacfa93820e4050274672707d30f6eabc6 Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 18 Feb 2024 00:42:52 +0000
Subject: [PATCH 084/332] Add note on policies to glossary
---
user/reference/glossary.md | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/user/reference/glossary.md b/user/reference/glossary.md
index 3e2c010d..98649dd4 100644
--- a/user/reference/glossary.md
+++ b/user/reference/glossary.md
@@ -128,10 +128,22 @@ example, it is common for the net qube of an [app qube](#app-qube) to be the
[service qube](#service-qube) `sys-firewall`, which in turn uses `sys-net` as
its net qube.
+* If a qube does not have a net qube (i.e., its `netvm` is set to `None`), then
+ that qube is offline. It is disconnected from all networking.
+
* The name `netvm` derives from "Networking Virtual Machine." Before Qubes 4.0,
there was a type of [service qube](#service-qube) called a "NetVM." The name
of the `netvm` property is a holdover from that era.
+## policies
+
+In Qubes OS, "policies" govern interactions between qubes, powered by [Qubes' qrexec system](https://www.qubes-os.org/doc/qrexec/).
+A single policy is a rule applied to a qube or set of qubes, that governs how and when information or assets may be shared with other qubes.
+An example is the rules governing how files can be copied between qubes.
+Policy rules are grouped together in files under `/etc/qubes/policy.d`
+Policies are an important part of what makes Qubes OS special.
+
+
## qube
A secure compartment in Qubes OS. Currently, qubes are implemented as Xen
@@ -145,8 +157,7 @@ still be called "qubes."
* Note that starting a sentence with the plural of "qube" (i.e., "Qubes...")
can be ambiguous, since it may not be clear whether the referent is a
- plurality of qubes or [Qubes OS](#qubes-os). You may wish to rephrase
- sentences in order to avoid this ambiguity.
+ plurality of qubes or [Qubes OS](#qubes-os).
* Example usage: "In Qubes OS, you do your banking in your 'banking' qube and
your web surfing in your 'untrusted' qube. That way, if your 'untrusted' qube
@@ -210,5 +221,5 @@ See [Templates](/doc/templates/).
## VM
-An abbreviation for "virtual machine." A software implementation of a machine
-(for example, a computer) that executes programs like a physical machine.
+An abbreviation for "virtual machine." A software implementation of a computer
+that provides the functionality of a physical machine.
From 75102ad8ad13115ab4b30edaebf1b372f150dd18 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Sun, 18 Feb 2024 13:56:07 -0800
Subject: [PATCH 085/332] Update description of known template upgrade issue
For more information, see:
- https://github.com/QubesOSqubes-doc/commit/1d540888fe1e84d1deef10e413545f3ec9a5fb60#r138763242
- https://github.com/QubesOS/qubes-issues/issues/8701
- https://github.com/QubesOS/qubes-doc/pull/1345
---
developer/releases/4_2/release-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 649f5571..109becca 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -44,7 +44,7 @@ The new Qubes OS Policy Editor tool:
- DomU firewalls have completely switched to nftables. Users should add their custom rules to the `custom-input` and `custom-forward` chains. (For more information, see issues [#5031](https://github.com/QubesOS/qubes-issues/issues/5031) and [#6062](https://github.com/QubesOS/qubes-issues/issues/6062).)
-- Templates continue to target their original Qubes OS release repos even after both the templates and Qubes OS itself have been upgraded to newer releases. If you are using fresh templates, this does not affect you. However, if you are migrating existing templates from a pre-4.2.0 installation, then please see [qubes-doc PR #1345](https://github.com/QubesOS/qubes-doc/pull/1345) and issue [#8701](https://github.com/QubesOS/qubes-issues/issues/8701).
+- Templates restored in 4.2 from a pre-4.2 backup continue to target their original Qubes OS release repos. If you are using fresh templates on a clean 4.2 installation, or if you performed an [in-place upgrade from 4.1 to 4.2](/doc/upgrade/4.2/#in-place-upgrade), then this does not affect you. (For more information, see issue [#8701](https://github.com/QubesOS/qubes-issues/issues/8701).)
Also see the [full list of open bug reports affecting Qubes 4.2](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aissue+label%3Aaffects-4.2+label%3A%22T%3A+bug%22+is%3Aopen).
From 0d34d104d90a33eb986d7c05b49d42e0087354c1 Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 18 Feb 2024 23:45:47 +0000
Subject: [PATCH 086/332] Move specifics of passwordless root implementation to
developer docs. Closes PR #1296
---
developer/system/vm-sudo.md | 50 +++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 developer/system/vm-sudo.md
diff --git a/developer/system/vm-sudo.md b/developer/system/vm-sudo.md
new file mode 100644
index 00000000..2ed578d0
--- /dev/null
+++ b/developer/system/vm-sudo.md
@@ -0,0 +1,50 @@
+---
+lang: en
+layout: doc
+permalink: /doc/vm-sudo-implementation/
+redirect_from:
+- /en/doc/vm-sudo-implementation/
+- /doc/VMSudo-implementation/
+ref: 341
+title: Passwordless root access in qubes
+---
+
+The rationale behind passwordless root in qubes is set out [here](/doc/vm-sudo). Implementation is by the qubes-core-agent-passwordless-root package.
+
+This page sets out the configuration changes made, with (not necessary complete) list of mechanisms depending on each of them:
+
+1. sudo (`/etc/sudoers.d/qubes`):
+
+ ```
+ Defaults !requiretty
+ %qubes ALL=(ALL) ROLE=unconfined_r TYPE=unconfined_t NOPASSWD: ALL
+
+ (...)
+ ```
+
+ - Easy user -> root access (main option for the user).
+ - `qvm-usb` (not really working, as of R2).
+
+2. PolicyKit (`/etc/polkit-1/rules.d/00-qubes-allow-all.rules`):
+
+ ```
+ //allow any action, detailed reasoning in sudoers.d/qubes
+ polkit.addRule(function(action,subject) { if (subject.isInGroup("qubes")) return polkit.Result.YES; });
+
+ ```
+
+ PAM (`/etc/pam.d/su.qubes` or `/usr/share/pam-configs/su.qubes`)
+ ```
+ auth sufficient pam_succeed_if.so use_uid user ingroup qubes
+ ```
+
+ - NetworkManager configuration from normal user (`nm-applet`).
+ - Updates installation (`gpk-update-viewer`).
+ - User can use pkexec just like sudo Note: above is needed mostly because Qubes user GUI session isn't treated by PolicyKit/logind as "local" session because of the way in which X server and session is started.
+ Perhaps we will address this issue in the future, but this is really low priority.
+ Patches welcomed anyway.
+
+3. Empty root password:
+ - Used for access to 'root' account from text console (`qvm-console-dispvm`) - the only way to access the VM when GUI isn't working.
+ - Can be used for easy 'su -' from user to root.
+
From fdcb21e1786a8e89b31568ad4eec60bcf844b1e0 Mon Sep 17 00:00:00 2001
From: unman
Date: Mon, 19 Feb 2024 00:32:00 +0000
Subject: [PATCH 087/332] Update page on passwordless root. Confirm that
Joanna's statement continues to reflect the views of the developers. Provide
details on replacing passwordless root. Implementation details are moved to
developer docs.
---
user/security-in-qubes/vm-sudo.md | 56 ++++++++-----------------------
1 file changed, 14 insertions(+), 42 deletions(-)
diff --git a/user/security-in-qubes/vm-sudo.md b/user/security-in-qubes/vm-sudo.md
index 7141102d..08606534 100644
--- a/user/security-in-qubes/vm-sudo.md
+++ b/user/security-in-qubes/vm-sudo.md
@@ -10,7 +10,7 @@ ref: 165
title: Passwordless root access in qubes
---
-Background (`/etc/sudoers.d/qubes` in VM):
+The background to passswordless root access is summarised in this statement, that used to be found at `/etc/sudoers.d/qubes` in each qube:
```
user ALL=(ALL) NOPASSWD: ALL
@@ -59,59 +59,31 @@ user ALL=(ALL) NOPASSWD: ALL
#
# joanna.
```
+The core of this statement continues to reflect the views of the Qubes developers.
-Below is a complete list of configuration made according to the above statement, with (not necessary complete) list of mechanisms depending on each of them:
+Passwordless root is provided by the `qubes-core-agent-passwordless-root package`.
+Details of the implementation are [here](/doc/vm-sudo-implementation)
-1. sudo (`/etc/sudoers.d/qubes`):
+[Minimal templates](/doc/templates/minimal/), which are intended for use by advanced users, do not have this package installed by default.
- ```
- user ALL=(ALL) NOPASSWD: ALL
- (...)
- ```
+Replacing passwordless root access
+----------------------------------
- - Easy user -> root access (main option for the user).
- - `qvm-usb` (not really working, as of R2).
+Some users may wish to modify their system by enabling user/root isolation in qubes.
+We do not support this in any packages, but users are free to remove the qubes-core-agent-passwordless-root package if they wish, using standard packaging tools.
-2. PolicyKit (`/etc/polkit-1/rules.d/00-qubes-allow-all.rules`):
-
- ```
- //allow any action, detailed reasoning in sudoers.d/qubes
- polkit.addRule(function(action,subject) { return polkit.Result.YES; });
- ```
-
- and `/etc/polkit-1/localauthority/50-local.d/qubes-allow-all.pkla`:
-
- ```
- [Qubes allow all]
- Identity=*
- Action=*
- ResultAny=yes
- ResultInactive=yes
- ResultActive=yes
- ```
-
- - NetworkManager configuration from normal user (`nm-applet`).
- - Updates installation (`gpk-update-viewer`).
- - User can use pkexec just like sudo Note: above is needed mostly because Qubes user GUI session isn't treated by PolicyKit/logind as "local" session because of the way in which X server and session is started.
- Perhaps we will address this issue in the future, but this is really low priority.
- Patches welcomed anyway.
-
-3. Empty root password:
- - Used for access to 'root' account from text console (`qvm-console-dispvm`) - the only way to access the VM when GUI isn't working.
- - Can be used for easy 'su -' from user to root.
+Root access can then be gained from dom0 by (e.g) `qvm-run -u root QUBE qubes-run-terminal`, or `qvm-console-dispvm QUBE`.
Replacing passwordless root access with Dom0 user prompt
--------------------------------------------------------
-While the Qubes developers support the statement above, some Qubes users may wish to enable user/root isolation in VMs anyway.
-We do not support this in any of our packages, but of course nothing is preventing a user from modifying his or her own system.
-A list of steps to do so is provided in the [Qubes community guide, Replacing passwordless root with a dom0 prompt
-](https://forum.qubes-os.org/t/replacing-passwordless-root-with-a-dom0-prompt/19074) **without any guarantee of safety, accuracy, or completeness.
+An alternative approach is to enable user/root isolation by using a dom0 generated prompt.
+A list of steps to do so is provided in the [Qubes community guide, Replacing passwordless root with a dom0 prompt](https://forum.qubes-os.org/t/replacing-passwordless-root-with-a-dom0-prompt/19074) **without any guarantee of safety, accuracy, or completeness.
Proceed at your own risk.
Do not rely on this for extra security.**
Dom0 passwordless root access
-----------------------------
-There is also passwordless user->root access in dom0.
-As stated in the comment in sudo configuration there (which is different from the one in individual qubes), there is really no point in user/root isolation, because all the user data (and VM management interface) is already accessible from dom0 user level, so there is nothing more to get from dom0 root account.
+There is also passwordless user->root access in dom0.
+As stated in the comment in `/etc/sudoers.d/qubes` there is really no point in user/root isolation in dom0, because all user data (and the whole Qubes management interface) is already accessible to the user, so there is nothing more to be gained from the dom0 root account.
From 565d801d24dff91e6eab5a2c2197dded689d5993 Mon Sep 17 00:00:00 2001
From: Patrick Schleizer
Date: Mon, 19 Feb 2024 05:56:40 -0500
Subject: [PATCH 088/332] minor vm-sudo.md formatting improvements
---
user/security-in-qubes/vm-sudo.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/security-in-qubes/vm-sudo.md b/user/security-in-qubes/vm-sudo.md
index 08606534..b2bba946 100644
--- a/user/security-in-qubes/vm-sudo.md
+++ b/user/security-in-qubes/vm-sudo.md
@@ -61,8 +61,8 @@ user ALL=(ALL) NOPASSWD: ALL
```
The core of this statement continues to reflect the views of the Qubes developers.
-Passwordless root is provided by the `qubes-core-agent-passwordless-root package`.
-Details of the implementation are [here](/doc/vm-sudo-implementation)
+Passwordless root is provided by the `qubes-core-agent-passwordless-root` package.
+Details of the implementation are [here](/doc/vm-sudo-implementation).
[Minimal templates](/doc/templates/minimal/), which are intended for use by advanced users, do not have this package installed by default.
From a2c7ae70bb7322463ebadc01e19a97c01bbdf58b Mon Sep 17 00:00:00 2001
From: unman
Date: Wed, 21 Feb 2024 14:03:24 +0000
Subject: [PATCH 089/332] Reinstate new line in vm-sudo.md
---
user/security-in-qubes/vm-sudo.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/security-in-qubes/vm-sudo.md b/user/security-in-qubes/vm-sudo.md
index b2bba946..3001c367 100644
--- a/user/security-in-qubes/vm-sudo.md
+++ b/user/security-in-qubes/vm-sudo.md
@@ -61,7 +61,7 @@ user ALL=(ALL) NOPASSWD: ALL
```
The core of this statement continues to reflect the views of the Qubes developers.
-Passwordless root is provided by the `qubes-core-agent-passwordless-root` package.
+Passwordless root is provided by the `qubes-core-agent-passwordless-root` package.
Details of the implementation are [here](/doc/vm-sudo-implementation).
[Minimal templates](/doc/templates/minimal/), which are intended for use by advanced users, do not have this package installed by default.
From da276b305da33c275f54eea9b52c608a68bc2f78 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Mon, 26 Feb 2024 15:33:24 -0800
Subject: [PATCH 090/332] Sort Qubes-certified computers in reverse
chronological order
---
user/hardware/certified-hardware.md | 62 ++++++++++++++---------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index 42afb236..9be78b53 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -23,37 +23,13 @@ You may also be interested in the [community-recommended hardware](https://forum
Qubes-certified computers are certified for a [major release](/doc/version-scheme/) and regularly tested by the Qubes developers to ensure compatibility with all of Qubes' features within that major release. The developers test all new updates within that major release to ensure that no regressions are introduced.
-The current Qubes-certified models are listed below in chronological order of certification.
+The current Qubes-certified models are listed below in reverse chronological order of certification.
-### Insurgo PrivacyBeast X230
+### Star Labs StarBook
-[](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/)
+[](https://starlabs.systems/pages/starbook)
-The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
-
-### NitroPad X230
-
-[](https://shop.nitrokey.com/shop/product/nitropad-x230-67)
-
-The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
-
-### NitroPad T430
-
-[](https://shop.nitrokey.com/shop/product/nitropad-t430-119)
-
-The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.X.
-
-### Dasharo FidelisGuard Z690
-
-[](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/)
-
-The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.X.
-
-### NovaCustom NV41 Series
-
-[](https://novacustom.com/product/nv41-series/)
-
-The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.X.
+The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X.
### NitroPC Pro
@@ -61,11 +37,35 @@ The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 1
The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.X.
-### Star Labs StarBook
+### NovaCustom NV41 Series
-[](https://starlabs.systems/pages/starbook)
+[](https://novacustom.com/product/nv41-series/)
-The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X.
+The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.X.
+
+### Dasharo FidelisGuard Z690
+
+[](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/)
+
+The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.X.
+
+### NitroPad T430
+
+[](https://shop.nitrokey.com/shop/product/nitropad-t430-119)
+
+The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.X.
+
+### NitroPad X230
+
+[](https://shop.nitrokey.com/shop/product/nitropad-x230-67)
+
+The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
+
+### Insurgo PrivacyBeast X230
+
+[](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/)
+
+The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
## Become hardware certified
From 0c60408a5534b4a633e4cc08b0988c35c52f5519 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Mon, 26 Feb 2024 15:37:33 -0800
Subject: [PATCH 091/332] Drop ".X" in release numbers
---
user/hardware/certified-hardware.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index 9be78b53..d6096c18 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -29,43 +29,43 @@ The current Qubes-certified models are listed below in reverse chronological ord
[](https://starlabs.systems/pages/starbook)
-The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.X.
+The [Star Labs StarBook](https://starlabs.systems/pages/starbook) is a 14-inch laptop. It is certified for Qubes OS 4.
### NitroPC Pro
[](https://shop.nitrokey.com/shop/product/nitropc-pro-523)
-The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.X.
+The [NitroPC Pro](https://shop.nitrokey.com/shop/product/nitropc-pro-523) is a desktop based on the MSI PRO Z690-A DDR5 motherboard. It is certified for Qubes OS 4.
### NovaCustom NV41 Series
[](https://novacustom.com/product/nv41-series/)
-The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.X.
+The [NovaCustom NV41 Series](https://novacustom.com/product/nv41-series/) is a 14-inch custom laptop. It is certified for Qubes OS 4.
### Dasharo FidelisGuard Z690
[](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/)
-The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.X.
+The [Dasharo FidelisGuard Z690](https://3mdeb.com/shop/open-source-hardware/dasharo-fidelisguard-z690-qubes-os-certified/) is a desktop based on the MSI PRO Z690-A DDR4 motherboard. It is certified for Qubes OS 4.
### NitroPad T430
[](https://shop.nitrokey.com/shop/product/nitropad-t430-119)
-The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.X.
+The [NitroPad T430](https://shop.nitrokey.com/shop/product/nitropad-t430-119) is a laptop based on the ThinkPad T430. It is certified for Qubes OS 4.
### NitroPad X230
[](https://shop.nitrokey.com/shop/product/nitropad-x230-67)
-The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
+The [NitroPad X230](https://shop.nitrokey.com/shop/product/nitropad-x230-67) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.
### Insurgo PrivacyBeast X230
[](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/)
-The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.X.
+The [Insurgo PrivacyBeast X230](https://insurgo.ca/produit/qubesos-certified-privacybeast_x230-reasonably-secured-laptop/) is a laptop based on the ThinkPad X230. It is certified for Qubes OS 4.
## Become hardware certified
From 8c3db1074ebe671c47b094f702e2d7953d529abd Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Wed, 28 Feb 2024 11:32:37 -0800
Subject: [PATCH 092/332] Add NitroPC Pro 2 to list of Qubes-certified
computers
See QubesOS/qubes-posts#128
---
user/hardware/certified-hardware.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index d6096c18..dbe50dd3 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -25,6 +25,12 @@ Qubes-certified computers are certified for a [major release](/doc/version-schem
The current Qubes-certified models are listed below in reverse chronological order of certification.
+### NitroPC Pro 2
+
+[](https://shop.nitrokey.com/shop/nitropc-pro-2-523)
+
+The [NitroPC Pro 2](https://shop.nitrokey.com/shop/nitropc-pro-2-523) is a desktop based on the MSI PRO Z790-P DDR5 motherboard. It is certified for Qubes OS 4.
+
### Star Labs StarBook
[](https://starlabs.systems/pages/starbook)
From 896aaf5681c69a9bb3c80e867dd2a6319f699cae Mon Sep 17 00:00:00 2001
From: ooops
Date: Sat, 2 Mar 2024 02:11:33 +0100
Subject: [PATCH 093/332] Edit for grammar and clarity qrexec.md
---
developer/services/qrexec.md | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/developer/services/qrexec.md b/developer/services/qrexec.md
index dc8039da..fbdc7327 100644
--- a/developer/services/qrexec.md
+++ b/developer/services/qrexec.md
@@ -22,14 +22,14 @@ However, the OS needs a mechanism to allow the administrative domain (dom0) to f
For instance, when a user selects an application from the KDE menu, it should start in the selected VM.
Also, it is often useful to be able to pass stdin/stdout/stderr from an application running in a VM to dom0 (and the other way around).
(For example, so that a VM can notify dom0 that there are updates available for it).
-By default, Qubes allows VMs initiate such communications in specific circumstances.
-The qrexec framework generalizes this process by providing a remote procedure call (RPC) protocol for the Qubes architecture.
+By default, Qubes allows VMs to initiate such communications in specific circumstances.
+The qrexec framework generalizes this process by providing a remote procedure call (RPC) for the Qubes architecture.
It allows users and developers to use and design secure inter-VM tools.
## Qrexec basics: architecture and examples
Qrexec is built on top of *vchan*, a Xen library providing data links between VMs.
-During domain startup , a process named `qrexec-daemon` is started in dom0, and a process named `qrexec-agent` is started in the VM.
+During domain startup, a process named `qrexec-daemon` is started in dom0, and a process named `qrexec-agent` is started in the VM.
They are connected over a **vchan** channel.
`qrexec-daemon` listens for connections from a dom0 utility named `qrexec-client`.
Let's say we want to start a process (call it `VMprocess`) in a VM (`someVM`).
@@ -47,18 +47,18 @@ For example, the following command creates an empty file called `hello-world.txt
$ qrexec-client -e -d someVM user:'touch hello-world.txt'
```
-The string before the colon specifies what user to run the command as.
-The `-e` flag tells `qrexec-client` to exit immediately after sending the execution request and receiving a status code from `qrexec-agent` (whether the process creation succeeded).
+The string before the colon specifies which user will run the command.
+The `-e` flag tells `qrexec-client` to exit immediately after sending the execution request and receiving a status code from `qrexec-agent` (if the process creation succeeded).
With this option, no further data is passed between the domains.
-By contrast, the following command demonstrates an open channel between dom0 and someVM (in this case, a remote shell):
+The following command demonstrates an open channel between dom0 and someVM (in this case, a remote shell):
```
$ qrexec-client -d someVM user:bash
```
The `qvm-run` command is heavily based on `qrexec-client`.
-It also takes care of additional activities, e.g. starting the domain if it is not up yet and starting the GUI daemon.
-Thus, it is usually more convenient to use `qvm-run`.
+It also handles additional activities, e.g. starting the domain if the domain is not up yet and starting the GUI daemon.
+It is usually more convenient to use `qvm-run`.
There can be an almost arbitrary number of `qrexec-client` processes for a given domain.
The limiting factor is the number of available vchan channels, which depends on the underlying hypervisor, as well the domain's OS.
@@ -70,17 +70,17 @@ For more details on the qrexec framework and protocol, see "[Qubes RPC internals
Some common tasks (like copying files between VMs) have an RPC-like structure: a process in one VM (say, the file sender) needs to invoke and send/receive data to some process in other VM (say, the file receiver).
The Qubes RPC framework was created to securely facilitate a range of such actions.
-Obviously, inter-VM communication must be tightly controlled to prevent one VM from taking control of another, possibly more privileged, VM.
-Therefore the design decision was made to pass all control communication via dom0, that can enforce proper authorization.
-Then, it is natural to reuse the already-existing qrexec framework.
+Inter-VM communication must be tightly controlled to prevent one VM from taking control of another, possibly more privileged, VM.
+The design decision was made to pass all control communication via dom0 which can enforce proper authorization.
+It is therefore natural to reuse the already-existing qrexec framework.
-Also, note that bare qrexec provides `VM <-> dom0` connectivity, but the command execution is always initiated by dom0.
-There are cases when VM needs to invoke and send data to a command in dom0 (e.g. to pass information on newly installed `.desktop` files).
-Thus, the framework allows dom0 to be the RPC target as well.
+Note that bare qrexec provides `VM <-> dom0` connectivity, but the command execution is always initiated by dom0.
+There are cases when a VM needs to invoke and send data to a command in dom0 (e.g. to pass information on newly installed `.desktop` files).
+This framework allows dom0 to be the RPC target as well.
Thanks to the framework, RPC programs are very simple -- both RPC client and server just use their stdin/stdout to pass data.
-The framework does all the inner work to connect these processes to each other via `qrexec-daemon` and `qrexec-agent`.
-Additionally, disposable VMs are tightly integrated -- RPC to a DisposableVM is identical to RPC to a normal domain, all one needs is to pass `@dispvm` as the remote domain name.
+The framework does all the inner work to connect the processes to eachother via `qrexec-daemon` and `qrexec-agent`.
+Disposable VMs are tightly integrated -- RPC to a DisposableVM is identical to RPC to an AppVM or StandaloneVM: all one needs is to pass `@dispvm` as the remote domain name.
## Qubes RPC administration
From e3dd9bc6a5c03e4efa19114179a4060560085636 Mon Sep 17 00:00:00 2001
From: Christian Foerster
Date: Sat, 2 Mar 2024 22:58:43 +0100
Subject: [PATCH 094/332] include NitroKey 3, MFA PR header
---
.../security-in-qubes/{yubi-key.md => mfa.md} | 161 ++++++++++++------
1 file changed, 108 insertions(+), 53 deletions(-)
rename user/security-in-qubes/{yubi-key.md => mfa.md} (51%)
diff --git a/user/security-in-qubes/yubi-key.md b/user/security-in-qubes/mfa.md
similarity index 51%
rename from user/security-in-qubes/yubi-key.md
rename to user/security-in-qubes/mfa.md
index a4cdfc68..2a8a73a2 100644
--- a/user/security-in-qubes/yubi-key.md
+++ b/user/security-in-qubes/mfa.md
@@ -1,66 +1,75 @@
---
lang: en
layout: doc
-permalink: /doc/yubikey/
+permalink: /doc/mfa/
redirect_from:
- /doc/yubi-key/
- /en/doc/yubi-key/
- /doc/YubiKey/
+- /doc/yubikey/
ref: 169
-title: YubiKey
+title: Multi-factor Login
---
-"The YubiKey is a hardware authentication device manufactured by Yubico to
-protect access to computers, networks, and online services that supports
-one-time passwords (OTP), public-key cryptography, and authentication, and the
-Universal 2nd Factor (U2F) and FIDO2 protocols[1] developed by the FIDO
-Alliance." ([Wikipedia](https://en.wikipedia.org/wiki/YubiKey))
-## General usage in Qubes OS
+## Multi-factor authentication within particular qubes
-Most use cases for the YubiKey can be achieved exactly as described by the
+Most use cases for the hardware tokens can be achieved exactly as described by the
manufacturer or other instructions found online. One usually just needs to
-attach the YubiKey to the corresponding app qube to get the same result (see the
-documentation on how to use [USB devices](/doc/how-to-use-usb-devices/) in Qubes
-OS accordingly). The recommended way for using CTAP in Qubes is described
+attach the token (e.g. YubiKey) to the corresponding app qube to get the same
+result (see the documentation on how to use [USB devices](/doc/how-to-use-usb-devices/)
+in Qubes OS accordingly). The recommended way for using CTAP in Qubes is described
[here](https://www.qubes-os.org/doc/ctap-proxy/).
## Multi-factor login for Qubes OS
-You can use a YubiKey to enhance the user authentication in Qubes. The following
-instructions explain how to setup the YubiKey as an *additional* way to login.
+By default Qubes has two protection mechanisms against attackers.
+The first is full disk encryption and the second the user login screen / lockscreen.
+This article section concerns only adding multi-factor authentication to the second one.
+
+### Login with a YubiKey / NitroKey3
+
+The YubiKey / NitroKey3 is a hardware authentication device manufactured by Yubico / NitroKey
+to protect access to computers, networks, and online services that supports
+one-time passwords (OTP), public-key cryptography, and authentication, and the
+Universal 2nd Factor (U2F) and FIDO2 protocols[1] developed by the FIDO Alliance.
+
+You can use a YubiKey / NitroKey3 to enhance the user authentication in Qubes. The following
+instructions explain how to setup the YubiKey / NitroKey3 as an *additional* way to login.
After setting it up, you can login by providing both - a password typed in via
-keyboard *and* the YubiKey plugged in. Someone eavesdropping your login attempt
+keyboard *and* the YubiKey / NitroKey3 plugged in. Someone eavesdropping your login attempt
would not be able to login by only observing and remembering your password.
-Stealing your YubiKey would not suffice to login either. Only if an attacker has
-both, the password and the Yubikey, it would be possible to login (it is thus
-called [Multi-factor
-authentication](https://en.wikipedia.org/wiki/Multi-factor_authentication)).
+Stealing your YubiKey / NitroKey3 would not suffice to login either. Only if an attacker has
+both, the password and the Yubikey / NitroKey3, it would be possible to login (it is thus
+called [Multi-factor authentication](https://en.wikipedia.org/wiki/Multi-factor_authentication)).
The following instructions keep your current login password untouched and
recommends to define a new, additional password that is used in combination with
-the YubiKey only. This ensures that you a) do not accidentally lock yourself out
+the YubiKey / NitroKey3 only. This ensures that you a) do not accidentally lock yourself out
during setup and b) you do not need to fear [shoulder
surfing](https://en.wikipedia.org/wiki/Shoulder_surfing_(computer_security)) so
much (i.e. by not using your standard login password in public).
-### Setup login with YubiKey
+#### Setup login with YubiKey / NitroKey3
-To use the YubiKey for multi-factor authentication you need to
+To use the YubiKey / NitroKey3 for multi-factor authentication you need to
-* install software for the YubiKey,
+* install software for the YubiKey / NitroKey3,
* configure the YubiKey for the
[Challenge-Response](https://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication)
-mode,
-* store the password for YubiKey Login and the Challenge-Response secret in
+mode or the NitroKey3 for [HOTP](https://en.wikipedia.org/wiki/HMAC-based_one-time_password) mode,
+* store the password for YubiKey / NitroKey3 Login and the Challenge-Response / HOTP secret in
dom0,
-* enable YubiKey authentication for every service you want to use it for.
+* enable YubiKey / NitroKey3 authentication for every service you want to use it for.
-All these requirements are described below, step by step.
+All these requirements are described below, step by step, for the YubiKey and NitroKey3.
+Note that setting up both a YubiKey and a NitroKey3 is not supported.
-1. Install YubiKey software in the template on which your USB VM is based.
- Without this software the challenge-response mechanism is not working.
+1. Install YubiKey / NitroKey3 software in the template on which your USB VM is based.
+ Without this software the challenge-response / HOTP mechanism won't work.
+
+ **YubiKey**
For Fedora.
@@ -73,24 +82,44 @@ All these requirements are described below, step by step.
```
sudo apt-get install yubikey-personalization
```
+
+ **NitroKey3**
+
+ Follow the installation instructions on the official [NitroKey
+website](https://docs.nitrokey.com/software/nitropy/all-platforms/installation).
+
+ **WARNING**: *as of February 2024 the official instructions involve using pipx to
+ install the pynitrokey package and its dependencies without any GPG
+ verification! This is not a recommended practice, but will soon be
+ fixed by NitroKey when they start providing release artifacts with
+ detached signatures on [their GitHub](https://github.com/Nitrokey/pynitrokey/releases).
+ Proper packaging and distribution for Debian and perhaps Fedora is
+ also planned for the mid-long term.*
+ **Installing packages using pip or pipx is not recommended!**
+
+ **both**
Shut down your template. Then, either reboot your USB VM (so changes inside
the template take effect in your USB app qube) or install the packages inside
your USB VM as well if you would like to avoid rebooting it.
2. Install [qubes-app-yubikey](https://github.com/QubesOS/qubes-app-yubikey) in
- dom0. This provides the program to authenticate with password and YubiKey.
+ dom0. This provides the program to authenticate with password and YubiKey / NitroKey3.
```
sudo qubes-dom0-update qubes-yubikey-dom0
```
-3. Configure your YubiKey for challenge-response `HMAC-SHA1` mode. This can be
+3. Configure your YubiKey / NitroKey3:
+
+ **YubiKey**
+
+ Configure your YubiKey for challenge-response `HMAC-SHA1` mode. This can be
done on any qube, e.g. a disposable (you need to [attach the
YubiKey](https://www.qubes-os.org/doc/how-to-use-usb-devices/) to this app qube
though) or directly on the sys-usb vm.
- You need to (temporarily) install the package "yubikey-personalization-gui" and
+ You need to (temporarily) install the package "yubikey-personalization-gui" and
run it by typing `yubikey-personalization-gui` in the command line.
- In the program go to `Challenge-Response`,
@@ -102,24 +131,51 @@ though) or directly on the sys-usb vm.
to the vm,
- press `Write Configuration` once you are ready.
- We will refer the `Secret Key (20 bytes hex)` as `AESKEY`.
+ **NitroKey3**
+
+ Set up a new NK3 Secrets App HOTP secret by attaching the NitroKey to your
+ USB qube and running the following commands in it:
+ ```
+ AESKEY=$(echo -n "your-20-digit-secret" | base32)
+ nitropy nk3 secrets register --kind hotp --hash sha256 --digits-str 8 --counter-start 1 --touch-button loginxs $AESKEY
+ ```
+ Note that the 20 digit sequence can contain any printable ASCII character,
+ e.g. letters, numbers, punctuation marks. The actual `Secret Key (base 32)`
+ is the base32 encoded form of that sequence.
+
+ **both**
+
+ We will call the `Secret Key (20 bytes hex)` (YubiKey) or `Secret Key (base 32)` `AESKEY`.
- It is recommended to keep a backup of your `AESKEY` in an offline VM used as a vault.
- Consider keeping a backup of your `AESKEY` on paper and storing it in a safe place.
- - If you have multiple YubiKeys for backup purposes (in case a yubikey gets
+ - If you have multiple YubiKeys for backup purposes (in case one gets
lost, stolen or breaks) you can write the same settings into other
-YubiKeys. You can choose "Program multiple YubiKeys" in the program, make sure
-to select `Same secret for all keys` in this case.
+YubiKeys. For YubiKeys you can choose "Program multiple YubiKeys" in the program;
+ make sure to select `Same secret for all keys` in this case. For NitroKeys you can set up
+the secret for multiple of them, but you must always use the same NitroKey, because the
+HOTP counter will be incremented in dom0 as well as the used NitroKey whenever you make use
+of this method. If you want to switch to a different NitroKey later, delete the file
+`/etc/qubes/yk-keys/nk-hotp-counter` in dom0 first to make it work with a fresh NitroKey 3.
-4. Paste your `AESKEY` into `/etc/qubes/yk-keys/yk-secret-key.hex` in dom0.
+4. **YubiKey**
+
+ Paste your `AESKEY` into `/etc/qubes/yk-keys/yk-secret-key.hex` in dom0.
+ Note that if you had previously used a NitroKey3 with this package, you *must* delete
+ the file `/etc/qubes/yk-keys/nk-hotp-secret` or its content!
+
+ **NitroKey3**
+
+ Create the file `/etc/qubes/yk-keys/nk-hotp-secret` in dom0 and paste your `AESKEY`
+ (in base 32 format) into it.
5. As mentioned before, you need to define a new password that is only used in
- combination with the YubiKey. You can write this password in plain text into
-`/etc/qubes/yk-keys/yk-login-pass` in dom0. This is considered safe as dom0 is
+ combination with the YubiKey / NitroKey3. You can write this password in plain text into
+`/etc/qubes/yk-keys/login-pass` in dom0. This is considered safe as dom0 is
ultimately trusted anyway.
However, if you prefer you can paste a hashed password instead into
-`/etc/qubes/yk-keys/yk-login-pass-hashed.hex` in dom0.
+`/etc/qubes/yk-keys/login-pass-hashed.hex` in dom0.
You can calculate your hashed password using the following two commands.
First run the following command to store your password in a temporary variable `password`.
@@ -141,9 +197,9 @@ ultimately trusted anyway.
auth include yubikey
```
- to the corresponding service file in `/etc/pam.d/` in dom0. This means, if
-you want to enable the login via YubiKey for xscreensaver (the default screen
-lock program), you add the line at the beginning of `/etc/pam.d/xscreensaver`.
+ (same for YubiKey and NitroKey3) to the corresponding service file in `/etc/pam.d/` in dom0.
+This means, if you want to enable the login via YubiKey / NitroKey3 for xscreensaver
+(the default screen lock program), you add the line at the beginning of `/etc/pam.d/xscreensaver`.
If you want to use the login for a tty shell, add it to `/etc/pam.d/login`. Add
it to `/etc/pam.d/lightdm` if you want to enable the login for the default
display manager and so on.
@@ -152,24 +208,24 @@ display manager and so on.
these files, otherwise it will most likely not work.
7. Adjust the USB VM name in case you are using something other than the default
- `sys-usb` by editing `/etc/qubes/yk-keys/yk-vm` in dom0.
+ `sys-usb` by editing `/etc/qubes/yk-keys/vm` in dom0.
-### Usage
+#### Usage
When you want to authenticate
-1. plug your YubiKey into an USB slot,
-2. enter the password associated with the YubiKey,
+1. plug your YubiKey / NitroKey3 into an USB slot,
+2. enter the password associated with the YubiKey / NitroKey3,
3. press Enter and
-4. press the button of the YubiKey, if you configured the confirmation (it will
- blink).
+4. press the button of the YubiKey / NitroKey3, if you configured the confirmation
+ (it will light up or blink).
When everything is ok, your screen will be unlocked.
In any case you can still use your normal login password, but do it in a secure
location where no one can snoop your password.
-### Optional: Enforce YubiKey Login
+#### Optional: Enforce YubiKey / NitroKey3 Login
Edit `/etc/pam.d/yubikey` (or appropriate file if you are using other screen locker program) and remove `default=ignore` so the line looks like this.
@@ -177,10 +233,9 @@ Edit `/etc/pam.d/yubikey` (or appropriate file if you are using other screen loc
auth [success=done] pam_exec.so expose_authtok quiet /usr/bin/yk-auth
```
-### Optional: Locking the screen when YubiKey is removed
+#### Optional: Locking the screen when YubiKey / NitroKey3 is removed
-Look into it
-You can setup your system to automatically lock the screen when you unplug your YubiKey.
+You can setup your system to automatically lock the screen when you unplug your YubiKey / NitroKey3.
This will require creating a simple qrexec service which will expose the ability to lock the screen to your USB VM, and then adding a udev hook to actually call that service.
In dom0:
From 1890f09056477a37fd7f6daffb69b1b5add46eb7 Mon Sep 17 00:00:00 2001
From: deeplow
Date: Sun, 3 Mar 2024 10:19:40 +0000
Subject: [PATCH 095/332] Mention existence of Qubes Builder V2
Qubes Builder V1 is still supported at least until Qubes 4.1
reaches EOL. However the docs don't mention at all the existance of
version 2 of the builder. The ideal solution would be to
document builder v2, while that doesn't happen, at least having a
warning is better than nothing.
---
developer/building/qubes-builder-details.md | 8 ++++++++
developer/building/qubes-builder.md | 7 +++++++
developer/building/qubes-iso-building.md | 7 +++++++
3 files changed, 22 insertions(+)
diff --git a/developer/building/qubes-builder-details.md b/developer/building/qubes-builder-details.md
index f3582284..4e01c689 100644
--- a/developer/building/qubes-builder-details.md
+++ b/developer/building/qubes-builder-details.md
@@ -10,6 +10,14 @@ ref: 65
title: Qubes builder details
---
+
+
+
+ Note: This information concern the older Qubes builder (v1). It supports
+ only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
+ components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
+
+
+ Note: These instructions concern the older Qubes builder (v1). It supports
+ only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
+ components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
+
+
**Note: See [ISO building instructions](/doc/qubes-iso-building/) for a streamlined overview on how to use the build system.**
diff --git a/developer/building/qubes-iso-building.md b/developer/building/qubes-iso-building.md
index fe9fb452..987a5d54 100644
--- a/developer/building/qubes-iso-building.md
+++ b/developer/building/qubes-iso-building.md
@@ -12,6 +12,13 @@ ref: 63
title: Qubes ISO building
---
+
+
+ Note: These instructions concern the older Qubes builder (v1). It supports
+ only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
+ components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
+
+
Build Environment
-----------------
From c4d2e2f5869007c8b4080494707e2c315eede654 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Wed, 6 Mar 2024 18:43:46 -0800
Subject: [PATCH 096/332] Add section on meta-issues
---
introduction/issue-tracking.md | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 1085625b..200dbc74 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -83,7 +83,25 @@ A label of the form `affects-` indicates that an issue affects t
### Projects
-The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues/projects). A project is a way to create a group of multiple related issues. This is the preferred method of grouping issues, whereas trying to use normal issues as "meta-issues" or "epics" is discouraged.
+According to GitHub, a [project](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects) is "an adaptable spreadsheet, task-board, and road map that integrates with your issues and pull requests on GitHub to help you plan and track your work effectively." The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues/projects).
+
+### Meta-issues
+
+A meta-issue is an issue that serves to collect and organize a group of other issues. We use meta-issues when we need a way to track work on specific features. We cannot use [projects](#projects) for this, because we already use a project for tracking the work of the Qubes team as a whole, and projects cannot contain milestones or other projects.
+
+Meta-issues must abide by the following rules:
+
+- Only members of the core team may create meta-issues (or convert existing issues into meta-issues).
+
+ Rationale: The purpose of meta-issues is to track the development of certain features that fit into the overall goals of the Qubes OS Project, which requires making informed project-management decisions with the approval of the project lead.
+
+- Meta-issues must be [locked](https://docs.github.com/en/communities/moderating-comments-and-conversations/locking-conversations).
+
+ Rationale: One of the historical problems we've experienced with meta-issues (and one of the reasons they were discouraged for a long time) is that each meta-issue tends to turn into a discussion thread that becomes hopelessly long to the point where the person who is supposed to work on it has no idea what is supposed to be done or where to start, and it eventually just gets closed. Locking is intended to prevent that from happening again.
+
+- Meta-issues must have informative descriptions, not just lists of issues. In particular, each meta-issue should explain its goal, what is in scope, and what the relevant categories and priorities are.
+
+- Meta-issues must have clear, concrete, and actionable criteria for when they will be closed. Meta-issues should never be "open-ended" or expected to stay open indefinitely. If this ever becomes unclear, the meta-issue should be closed until it becomes clear.
## Search tips
From 875fc70ebf5a95fb5b1270066be710ea15856ff8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?=
Date: Sun, 10 Mar 2024 19:38:22 +0100
Subject: [PATCH 097/332] Update windows debugging instructions
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Rafał Wojdyła
---
developer/debugging/windows-debugging.md | 291 +++++------------------
1 file changed, 59 insertions(+), 232 deletions(-)
diff --git a/developer/debugging/windows-debugging.md b/developer/debugging/windows-debugging.md
index 87f22b5a..aec81298 100644
--- a/developer/debugging/windows-debugging.md
+++ b/developer/debugging/windows-debugging.md
@@ -10,253 +10,80 @@ ref: 50
title: Windows debugging
---
-Debugging Windows code can be tricky in a virtualized environment. The guide below assumes Xen hypervisor and Windows 7 VMs.
+Debugging Windows code can be tricky in a virtualized environment. The guide below assumes Qubes 4.1 and Windows 7 or later VMs.
User-mode debugging is usually straightforward if it can be done on one machine. Just duplicate your normal debugging environment in the VM.
-Things get complicated if you need to perform kernel debugging or troubleshoot problems that only manifest on system boot, user logoff or similar. For that you need two Windows VMs: the *host* and the *target*. The *host* will contain [WinDbg](https://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx) installation, your source code and private symbols. The *target* will run the code being debugged. Both will be linked by virtual serial ports.
+Things get complicated if you need to perform kernel debugging or troubleshoot problems that only manifest on system boot, user logoff or similar. For that you need two Windows VMs: the *host* and the *target*. The *host* will contain the debugger, your source code and private symbols. The *target* will run the code being debugged. We will use kernel debugging over network which is supported from Windows 7 onwards. The main caveat is that Windows kernel supports only specific network adapters for this, and the default one in Qubes won't work.
-- First, you need to prepare separate copies of both *target* and *host* VM configuration files with some changes. Copy the files from **/var/lib/qubes/appvms/vmname/vmname.conf** to some convenient location, let's call them **host.conf** and **target.conf**.
-- In both copied files add the following line at the end: `serial = 'pty'`. This will make Xen connect VM's serial ports to dom0's ptys.
-- From now on you need to start both VMs like this: `qvm-start --custom-config=/your/edited/host.conf host`
-- To connect both VM serial ports together you will either need [socat](http://www.dest-unreach.org/socat/) or a custom utility described later.
-- To determine which dom0 pty corresponds to VM's serial port you need to read xenstore, example script below:
+## Important note
-```bash
-#!/bin/sh
+- Do not install Xen network PV drivers in the target VM. Network kernel debugging needs a specific type of NIC or it won't work, the network PV drivers interfere with that.
-id1=$(xl domid "$1-dm")
-tty1=$(xenstore-read /local/domain/${id1}/device/console/3/tty)
-echo $tty1
-```
+- If you have kernel debugging active when the Xen PV drivers are being installed, make sure to disable it before rebooting (`bcdedit /set debug off`). You can re-enable debugging after the reboot. The OS won't boot otherwise. I'm not sure what's the exact cause. I know that busparams for the debugging NIC change when PV drivers are installed (see later), but even changing that accordingly in the debug settings doesn't help -- so it's best to disable debug for this one reboot.
-Pass it a running VM name and it will output the corresponding pty name.
+## Modifying the NIC of the target VM
-- To connect both ptys you can use [socat](http://www.dest-unreach.org/socat/) like that:
+You will need to create a custom libvirt config for the target VM. See [the documentation](https://dev.qubes-os.org/projects/core-admin/en/latest/libvirt.html) for overview of how libvirt templates work in Qubes. The following assumes the target VM is named `target-vm`.
-```bash
-#!/bin/sh
+- Edit `/usr/share/qubes/templates/libvirt/xen.xml` to prepare our custom config to override just the NIC part of the global template:
+ - add `{{ '{% block network %}' }}` before `{{ '{% if vm.netvm %}' }}`
+ - add `{{ '{% endblock %}' }}` after the matching `{{ '{% endif %}' }}`
+- Copy `/usr/share/qubes/templates/libvirt/devices/net.xml` to `/etc/qubes/templates/libvirt/xen/by-name/target-vm.xml`.
+- Add `` to the `` section.
+- Enclose everything within `{{ '{% block network %}' }}` + `{{ '{% endblock %}' }}`.
+- Add `{{ "{% extends 'libvirt/xen.xml' %}" }}` at the start.
+- The final `target-vm.xml` should look something like this:
-id1=$(xl domid "$1-dm")
-id2=$(xl domid "$2-dm")
-tty1=$(xenstore-read /local/domain/${id1}/device/console/3/tty)
-tty2=$(xenstore-read /local/domain/${id2}/device/console/3/tty)
-socat $tty1,raw $tty2,raw
-```
+~~~
+{% raw %}
+{% extends 'libvirt/xen.xml' %}
+{% block network %}
+
+
+
+
+
+
+
+{% endblock %}
+{% endraw %}
+~~~
-...but there is a catch. Xen seems to process the traffic that goes through serial ports and changes all **0x0a** bytes into **0x0d, 0x0a** pairs (newline conversion). I didn't find a way to turn that off (setting ptys to raw mode didn't change anything) and it's not mentioned anywhere on the Internet, so maybe it's something on my system. If the above script works for you then you don't need anything more in dom0.
+- Start `target-vm` and verify in the device manager that a "Intel PRO/1000 MT" adapter is present.
-- On the *target* system, run `bcdedit /set debug on` on the console to turn on kernel debugging. It defaults to the first serial port.
-- On the *host* system, install [WinDbg](https://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx) and start the kernel debug (Ctrl-K), choose **com1** as the debug port.
-- Reboot the *target* VM.
-- Run the above shell script in dom0.
-- If everything is fine you should see the proper kernel debugging output in WinDbg. However, if you see something like that:
+## Host and target preparation
+
+- On `host-vm` you will need WinDbg, which is a part of the [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/).
+- Copy the `Debuggers` directory from Windows SDK to `target-vm`.
+- In both `host-vm` and `target-vm` switch the windows network to private (it tends to be public by default).
+- Either turn off the windows firewall or enable all ICMP-in rules in both VMs.
+- In `firewall-vm` edit `/rw/config/qubes-firewall-user-script` to connect both Windows VMs, add:
+ - `iptables -I FORWARD 2 -s -d -j ACCEPT`
+ - `iptables -I FORWARD 2 -s -d -j ACCEPT`
+ - run `/rw/config/qubes-firewall-user-script` so the changes take effect immediately
+- Make sure both VMs can ping each other.
+- In `target-vm`:
+ - start elevated `cmd` session
+ - `cd sdk\Debuggers\x64`
+ - `kdnet` should show that the NIC is supported, note the busparams:
+
+ ~~~
+ Network debugging is supported on the following NICs:
+ busparams=0.6.0, Intel(R) PRO/1000 MT Network Connection, KDNET is running on this NIC.
+ ~~~
+
+ - `bcdedit /debug on`
+ - `bcdedit /dbgsettings net hostip: port:50000 key:1.1.1.1` (you can customize the key)
+ - `bcdedit /set "{dbgsettings}" busparams x.y.z` (use the busparams `kdnet` has shown earlier)
+- In `host-vm` start WinDbg: `windbg -k net:port=50000,key=1.1.1.1`. It will listen for target's connection.
+- Reboot `target-vm`, debugging should start:
~~~
- Opened \\.\com1
Waiting to reconnect...
- Connected to Windows 7 7601 x64 target at (Wed Mar 19 20:35:43.262 2014 (UTC + 1:00)), ptr64 TRUE
- Kernel Debugger connection established.
- Symbol search path is: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
- Executable search path is:
- ... Retry sending the same data packet for 64 times.
- The transport connection between host kernel debugger and target Windows seems lost.
- please try resync with target, recycle the host debugger, or reboot the target Windows.
- Unable to read KTHREAD address fffff8000281ccc0
- **************************************************************************
- Unable to read debugger data block header
- **************************************************************************
- Unable to read KTHREAD address fffff8000281ccc0
- Unable to read PsLoadedModuleList
- Unable to read KTHREAD address fffff8000281ccc0
- **************************************************************************
- Unable to read debugger data block header
- **************************************************************************
+ Connected to target 10.137.0.19 on port 50000 on local IP 10.137.0.20.
+ You can get the target MAC address by running .kdtargetmac command.
+ Connected to Windows 10 19041 x64 target at (Thu Aug 3 14:05:48.069 2023 (UTC + 2:00)), ptr64 TRUE
~~~
- ...then you're most likely a victim of the CRLF issue mentioned above. To get around it I wrote a small utility that basically does what socat would do and additionally corrects those replaced bytes in the stream. It's not pretty but it works:
-
-```c
-#include
-#include
-#include
-#include
-
-int fd1, fd2;
-char mark = ' ';
-
-void out(unsigned char c)
-{
- static int count = 0;
- static unsigned char buf[17] = {0};
-
- // relay to ouptput port
- write(fd2, &c, 1);
- fprintf(stderr, "%c", mark);
-
- /* dump all data going over the line
- if (count == 0)
- fprintf(stderr, "%c", mark);
- fprintf(stderr, "%02x ", c);
- if (c >= 0x20 && c < 0x80)
- buf[count] = c;
- else
- buf[count] = '.';
- count++;
- if (count == 0x10)
- {
- count = 0;
- fprintf(stderr, " %s\n", buf);
- }
- */
-}
-
-int main(int argc, char* argv[])
-{
- unsigned char c = 0;
- struct termios tio;
- ssize_t size;
-
- if (argc < 3)
- {
- fprintf(stderr, "Usage: %s pty1 pty2 [mark character]\n", argv[0]);
- return EINVAL;
- }
-
- fd1 = open(argv[1], O_RDONLY | O_NOCTTY);
- if (fd1 <= 0)
- {
- perror("open fd1");
- return errno;
- }
- fd2 = open(argv[2], O_WRONLY | O_NOCTTY);
- if (fd2 <= 0)
- {
- perror("open fd2");
- return errno;
- }
-/*
- // This doesn't make any difference which supports the theory
- // that it's Xen who corrupts the byte stream.
- cfmakeraw(&tio);
- if (tcsetattr(fd1, TCSANOW, &tio) < 0)
- {
- perror("tcsetattr 1");
- return errno;
- }
- if (tcsetattr(fd2, TCSANOW, &tio) < 0)
- {
- perror("tcsetattr 2");
- return errno;
- }
-*/
- if (argc == 4)
- mark = argv[3][0];
-
- while (1)
- {
- size = read(fd1, &c, 1);
- if (size <= 0)
- break;
-
-parse:
- if (c == 0x0d)
- {
- size = read(fd1, &c, 1);
- if (size <= 0)
- {
- out(0x0d);
- break;
- }
- if (c == 0x0a)
- {
- out(0x0a);
- }
- else
- {
- out(0x0d);
- goto parse;
- }
- }
- else
- out(c);
- }
-
- close(fd1);
- close(fd2);
- return 0;
-}
-```
-
-> This utility is a unidirectional relay so you need to run two instances to get duplex communication, like:
->
-> #!/bin/sh
->
-> id1=$(xl domid "$1-dm")
-> id2=$(xl domid "$2-dm")
-> tty1=$(xenstore-read /local/domain/${id1}/device/console/3/tty)
-> tty2=$(xenstore-read /local/domain/${id2}/device/console/3/tty)
-> ./ptycrlf ${tty1} ${tty2} - &
-> ./ptycrlf ${tty2} ${tty1} + &
-
-> With this everything should be good:
->
-> ~~~
-> Opened \\.\com1
-> Waiting to reconnect...
-> Connected to Windows 7 7601 x64 target at (Wed Mar 19 20:56:31.371 2014 (UTC + 1:00)), ptr64 TRUE
-> Kernel Debugger connection established.
-> Symbol search path is: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
-> Executable search path is:
-> Windows 7 Kernel Version 7601 MP (1 procs) Free x64
-> Built by: 7601.18247.amd64fre.win7sp1_gdr.130828-1532
-> Machine Name:
-> Kernel base = 0xfffff800`0261a000 PsLoadedModuleList = 0xfffff800`0285d6d0
-> System Uptime: not available
-> ~~~
-
-# Debugging HVMs in the Qubes R4.0
-
-There are two main issues to be adopted to get all things to work in the R4.0.
-
-## Add a virtual serial port
-
-Qemu in the stub domain with virtual serial port added in a recommended way (``````) fails to start (Could not open '/dev/hvc1': No such device). It seems like a lack of multiple xen consoles support/configuration. The only way that I have found is to attach serial port explicitly to the available console.
-
-1. Unpack stub domain in dom0:
-
-```shell_session
-$ mkdir stubroot
-$ cp /usr/lib/xen/boot/stubdom-linux-rootfs stubroot/stubdom-linux-rootfs.gz
-$ cd stubroot
-$ gunzip stubdom-linux-rootfs.gz
-$ cpio -i -d -H newc --no-absolute-filenames < stubdom-linux-rootfs
-$ rm stubdom-linux-rootfs
-```
-
-2. Edit Init script to remove last loop and to add "-serial /dev/hvc0" to the qemu command line.
-
-3. Apply changes:
-
-```shell_session
-$ find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../stubdom-linux-rootfs
-$ sudo mv ../stubdom-linux-rootfs /usr/lib/xen/boot
-```
-
-## Connect two consoles
-
-Run the following script:
-
-```shell
-debugname1=win7new
-debugname2=win7dbg
-id1=$(xl domid "$debugname1-dm")
-id2=$(xl domid "$debugname2-dm")
-
-tty1=$(xenstore-read /local/domain/${id1}/console/tty)
-tty2=$(xenstore-read /local/domain/${id1}/console/tty)
-
-socat $tty1,raw $tty2,raw
-```
-
Happy debugging!
From e284f64909b8ee5e39c767341fde81f17b0279fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?=
Date: Sun, 10 Mar 2024 19:53:09 +0100
Subject: [PATCH 098/332] Fix typo
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Rafał Wojdyła
---
developer/debugging/windows-debugging.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/debugging/windows-debugging.md b/developer/debugging/windows-debugging.md
index aec81298..844273d5 100644
--- a/developer/debugging/windows-debugging.md
+++ b/developer/debugging/windows-debugging.md
@@ -10,7 +10,7 @@ ref: 50
title: Windows debugging
---
-Debugging Windows code can be tricky in a virtualized environment. The guide below assumes Qubes 4.1 and Windows 7 or later VMs.
+Debugging Windows code can be tricky in a virtualized environment. The guide below assumes Qubes 4.2 and Windows 7 or later VMs.
User-mode debugging is usually straightforward if it can be done on one machine. Just duplicate your normal debugging environment in the VM.
From 9da0acc630d604905e6552aba3e8668222473ef6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?=
Date: Sun, 10 Mar 2024 19:53:18 +0100
Subject: [PATCH 099/332] Fix jinja escaping
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Rafał Wojdyła
---
developer/debugging/windows-debugging.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/developer/debugging/windows-debugging.md b/developer/debugging/windows-debugging.md
index 844273d5..089dfecd 100644
--- a/developer/debugging/windows-debugging.md
+++ b/developer/debugging/windows-debugging.md
@@ -27,12 +27,12 @@ Things get complicated if you need to perform kernel debugging or troubleshoot p
You will need to create a custom libvirt config for the target VM. See [the documentation](https://dev.qubes-os.org/projects/core-admin/en/latest/libvirt.html) for overview of how libvirt templates work in Qubes. The following assumes the target VM is named `target-vm`.
- Edit `/usr/share/qubes/templates/libvirt/xen.xml` to prepare our custom config to override just the NIC part of the global template:
- - add `{{ '{% block network %}' }}` before `{{ '{% if vm.netvm %}' }}`
- - add `{{ '{% endblock %}' }}` after the matching `{{ '{% endif %}' }}`
+ - add `{% raw %}{% block network %}{% endraw %}` before `{% raw %}{% if vm.netvm %}{% endraw %}`
+ - add `{% raw %}{% endblock %}{% endraw %}` after the matching `{% raw %}{% endif %}{% endraw %}`
- Copy `/usr/share/qubes/templates/libvirt/devices/net.xml` to `/etc/qubes/templates/libvirt/xen/by-name/target-vm.xml`.
- Add `` to the `` section.
-- Enclose everything within `{{ '{% block network %}' }}` + `{{ '{% endblock %}' }}`.
-- Add `{{ "{% extends 'libvirt/xen.xml' %}" }}` at the start.
+- Enclose everything within `{% raw %}{% block network %}{% endraw %}` + `{% raw %}{% endblock %}{% endraw %}`.
+- Add `{% raw %}{% extends 'libvirt/xen.xml' %}{% endraw %}` at the start.
- The final `target-vm.xml` should look something like this:
~~~
From 65444ee38f6a424b9d26113d10c93defb532ed43 Mon Sep 17 00:00:00 2001
From: unman
Date: Tue, 12 Mar 2024 17:22:50 +0000
Subject: [PATCH 100/332] Fix formatting in warning notes
---
developer/building/qubes-builder-details.md | 6 ++----
developer/building/qubes-builder.md | 3 +--
developer/building/qubes-iso-building.md | 3 +--
3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/developer/building/qubes-builder-details.md b/developer/building/qubes-builder-details.md
index 4e01c689..ad2b79f8 100644
--- a/developer/building/qubes-builder-details.md
+++ b/developer/building/qubes-builder-details.md
@@ -13,10 +13,8 @@ title: Qubes builder details
- Note: This information concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
- components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
-
+ Note: This information concerns the old Qubes builder (v1). It supports
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
Note: These instructions concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
- components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
**Note: See [ISO building instructions](/doc/qubes-iso-building/) for a streamlined overview on how to use the build system.**
diff --git a/developer/building/qubes-iso-building.md b/developer/building/qubes-iso-building.md
index 987a5d54..ac075443 100644
--- a/developer/building/qubes-iso-building.md
+++ b/developer/building/qubes-iso-building.md
@@ -15,8 +15,7 @@ title: Qubes ISO building
Note: These instructions concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. For building Qubes R4.2 or later and related
- components, please see instead [qubes-builderv2](https://github.com/QubesOS/qubes-builderv2/).
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
Build Environment
From 10bbeb1d80b40aba81dd12425ec246014ac10505 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire?=
<96051754+gregoire-mullvad@users.noreply.github.com>
Date: Thu, 14 Mar 2024 13:15:07 +0100
Subject: [PATCH 101/332] Fix formatting in firewall.md
Some code blocks that aren't rendering correctly in the website.
---
user/security-in-qubes/firewall.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 3cb7c42b..95b28673 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -66,12 +66,16 @@ Normally Qubes doesn't let the user stop a NetVM if there are other qubes runnin
But in case the NetVM stops for whatever reason (e.g. it crashes, or the user forces its shutdown via qvm-kill via terminal in Dom0), Qubes R4.x will often automatically repair the connection.
If it does not, then there is an easy way to restore the connection to the NetVM by issuing in dom0:
-` qvm-prefs netvm `
+```
+qvm-prefs netvm
+```
Normally qubes do not connect directly to the actual NetVM (sys-net by default) which has networking devices, but rather to the default sys-firewall first, and in most cases it would be the NetVM that will crash, e.g. in response to S3 sleep/restore or other issues with WiFi drivers.
In that case it is only necessary to issue the above command once, for the sys-firewall (this assumes default VM-naming used by the default Qubes installation):
-` qvm-prefs sys-firewall netvm sys-net `
+```
+qvm-prefs sys-firewall netvm sys-net
+```
Network service qubes
---------------------
From adc3e9a14565234693bf58739a10b006a4ac4450 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marta=20Marczykowska-G=C3=B3recka?=
Date: Thu, 14 Mar 2024 21:13:12 +0100
Subject: [PATCH 102/332] New issue management guidelines
Added new issue guidelines.
---
introduction/issue-tracking.md | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 200dbc74..80d6dd08 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -83,7 +83,9 @@ A label of the form `affects-` indicates that an issue affects t
### Projects
-According to GitHub, a [project](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects) is "an adaptable spreadsheet, task-board, and road map that integrates with your issues and pull requests on GitHub to help you plan and track your work effectively." The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues/projects).
+According to GitHub, a [project](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects) is "an adaptable spreadsheet, task-board, and road map that integrates with your issues and pull requests on GitHub to help you plan and track your work effectively." The issue tracker has several [projects](https://github.com/QubesOS/qubes-issues/projects). Github projects allows more detailed issue states, and also attaching more metadata to issues. They also allow more focused view.
+
+There is a special project in Qubes OS project: the [Current team tasks project](https://github.com/orgs/QubesOS/projects/19/views/1) which represents current work of the core team. Issues in this project's **backlog** section are not yet ready for work - they might be waiting for clarifications, blockers, decisions on priorities etc. Issues that are **ready** can be picked up by any team member. There should not be too many issues in **ready** column to decrease confusion and decision paralysis - good number is around 20. The **in review** state means that the developer is finished with the work (the completion state has been reached) - if something has to be postponed or abandoned, a justification should be posted in issue discussion.
### Meta-issues
@@ -211,3 +213,21 @@ In order to assist with this, we have a label called [backport pending](https://
### Understanding open and closed issues
Every issue is always in one of two states: open or closed, with open being the default. The **open** and **closed** states mean that, according to our available information at present, the issue in question either **is** or **is not** (respectively) actionable for the Qubes team. The open and closed states do not mean anything more than this, and it's important not to read anything else into them. It's also important to understand that closing an issue is, in effect, nothing more than changing a virtual tag on an issue. Closing an issue is never "final" in any sense, and it does not affect the issue itself in any other way. Issues can be opened and closed instantly with a single button press an unlimited number of times at no cost. In fact, since the open and closed states reflect our available information at present, one should expect these states to change back and forth as new information becomes available. Closed issues are fully searchable, just like open issues, and we explicitly instruct all users of the issue tracker to search *both* open *and* closed issues, which GitHub makes easy.
+
+## Workflow and what do issue states mean
+
+There are some rules we use when assigning issues and tagging them.
+
+### Assigning issues
+
+To avoid a situation where an issue is "dead" - assigned to someone who is not actively working on it - and to help the team organize their work, an issue should be assigned to a person who currently works on it, or will start working on it in a very near future (about a week or two). One person can have several issues assigned at the same time (for example they may be working on one another issue while waiting for review), but if an issue is no longer actively being worked on (for example when it's blocked by something else), it should be unassigned. At that point, if there is some partial work already done, there should be a comment about that, including link to the code (some WIP commit in some branch?) if applicable.
+
+Issues should not be assigned as a todo-list several months in the future, or assigned to someone without their explicit confirmation that they are currently working on that issue or will start doing it shortly.
+
+### Working on an issue
+
+Every issue should involve a clear statement of success: when is the issue finished? It might not be clear to the person making the issue, especially if it's an enhancement request, but before work starts, the person working on the issue should make sure that it includes clear completion criteria in the description (via editing the description, if necessary). The completion criteria would ideally be a checklist, and consist of a list of pull requests/features, each preferably no more than two weeks of work. It's also important to remember tests and documentation should also be part of the issue, if applicable.
+
+An issue should also have a rough estimate how much time it needs, if it's more than one-two days. Of course this might be updated later, if an issue turns out to be more (or maybe less) complicated than it has initially seemed.
+
+When an issue is done (that is, the completion checklist has been completed), the issue should be moved to **ready** column in the *Current team tasks* project.
From 2a20311e070151961aa7e4dd7c6d778ecbf8e239 Mon Sep 17 00:00:00 2001
From: deeplow
Date: Thu, 21 Mar 2024 19:30:09 +0000
Subject: [PATCH 103/332] Fix typo
---
user/security-in-qubes/mfa.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/security-in-qubes/mfa.md b/user/security-in-qubes/mfa.md
index b1f6938f..3d7e7ce0 100644
--- a/user/security-in-qubes/mfa.md
+++ b/user/security-in-qubes/mfa.md
@@ -12,7 +12,7 @@ title: Multi-factor Login
---
-## Multi-factor authentication within in particular qubes
+## Multi-factor authentication within particular qubes
Most use cases for the hardware tokens can be achieved exactly as described by the
manufacturer or other instructions found online. One usually just needs to
From 3042d62e55a20d181b8e9ed2fc982d3176a17029 Mon Sep 17 00:00:00 2001
From: deeplow <47065258+deeplow@users.noreply.github.com>
Date: Fri, 22 Mar 2024 16:55:08 -0400
Subject: [PATCH 104/332] Fix typo
---
user/downloading-installing-upgrading/upgrade/4_2.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/upgrade/4_2.md b/user/downloading-installing-upgrading/upgrade/4_2.md
index ba088be1..cd0dce34 100644
--- a/user/downloading-installing-upgrading/upgrade/4_2.md
+++ b/user/downloading-installing-upgrading/upgrade/4_2.md
@@ -23,7 +23,7 @@ If you would prefer to perform a clean installation rather than upgrading
in-place:
1. (optional) Run the updater to ensure all of your templates are in their latest version.
-2. Install the `qubes-dist-upgrade` tool. This is the inplace upgrade tool, which is not what we're doing. However it will needed in order to prepare the templates for the 4.2 version. You install it with the following command in the dom0 terminal:
+2. Install the `qubes-dist-upgrade` tool. This is the inplace upgrade tool, which is not what we're doing. However it will be needed in order to prepare the templates for the 4.2 version. You install it with the following command in the dom0 terminal:
sudo qubes-dom0-update -y qubes-dist-upgrade
From 8aa4e8eca33dd12de0afa377fa12e3f44f0ba9df Mon Sep 17 00:00:00 2001
From: unman
Date: Sat, 23 Mar 2024 12:12:55 +0000
Subject: [PATCH 105/332] Include note on use of template tool to change
templates when switching. Explicitly refer to default-mgmt-dvm.
---
user/templates/templates.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/user/templates/templates.md b/user/templates/templates.md
index bab15cb9..2f7ac64a 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -273,6 +273,15 @@ new template:
old template by clicking on the first one, holding shift, then clicking on
the last one. With multiple qubes selected, right-click on any of them,
hover your cursor over Template, then click on the new template.
+ Or in the `System` menu select `Manage templates for qubes`, select
+ any qubes using the old template and update them to the new template
+ using the drop down menu.
+
+4. **Change the template for the default-mgmt-dvm** If the old template
+ was used for management qubes, then you should change the template.
+ This is an *internal* qube which does not appear by default in the Qube manager.
+ In the `System` menu select `Manage templates for qubes`, and you will see the *default-mgmt-dvm* qube.
+ Change the template used for this disposable template to the new template.
## Advanced
From 1cb9453b318683cf9300d73743e19c181023fcce Mon Sep 17 00:00:00 2001
From: fz72
Date: Sat, 23 Mar 2024 20:48:39 +0000
Subject: [PATCH 106/332] Update firewall.md - route from outside the world
- correct: nft list table ip qubes instead of nft list table ip qubes-firewall
- location of firewall script in sys-net
- additional note for interface
---
user/security-in-qubes/firewall.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 95b28673..d4597e39 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -308,12 +308,12 @@ nft add rule qubes custom-forward iif == "ens6" ip saddr 192.168.x.y/24 ip daddr
> Note: If you do not wish to limit the IP addresses connecting to the service, remove `ip saddr 192.168.x.y/24` from the rules
-> If you want to expose the service on multiple interfaces, repeat the steps 2 and 3 described above, for each interface.
+> If you want to expose the service on multiple interfaces, repeat the steps 2 and 3 described above, for each interface. Alternatively, you can leave out the interface completely.
Verify the rules on sys-net firewall correctly match the packets you want by looking at its counters, check for the counter lines in the chains `custom-forward` and `custom-dnat-qubeDEST`:
```
-nft list table ip qubes-firewall
+nft list table ip qubes
```
In this example, we can see 7 packets in the forward rule, and 3 packets in the dnat rule:
@@ -335,7 +335,7 @@ chain custom-dnat-qubeDEST {
telnet 192.168.x.n 443
```
-Once you have confirmed that the counters increase, store the commands used in the previous steps in `/rw/config/rc.local` so they get set on sys-net start-up:
+Once you have confirmed that the counters increase, store the commands used in the previous steps in `/rw/config/qubes-firewall-user-script` so they get set on sys-net start-up:
```
[user@sys-net user]$ sudo -i
From 5abde828d7e437dc6a88c836cdda743c7a3c543e Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 31 Mar 2024 12:31:13 +0000
Subject: [PATCH 107/332] Add note on requirements for salting
fedora-39-minimal templates
---
user/templates/minimal-templates.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 2da511ff..2e7c934e 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -165,6 +165,8 @@ list of packages to be installed):
- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
`qubes-mgmt-salt-vm-connector`.
+To manage fedora-39-minimal templates with salt, you may need to install `python3-urllib3` in older versions of the template. (This package is already installed in recent builds: see [discussion](https://github.com/QubesOS/qubes-issues/issues/8806).)
+
In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be
needed to make the customized minimal template work properly. These packages
are:
From c83e5d409c91e2abc120f14fc24f59eb26a4dc71 Mon Sep 17 00:00:00 2001
From: Michael Carbone
Date: Tue, 2 Apr 2024 15:16:13 +0200
Subject: [PATCH 108/332] Update gsod.md for 2024
still needs some content
---
developer/general/gsod.md | 80 +++++++++++++++++++++++----------------
1 file changed, 48 insertions(+), 32 deletions(-)
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index ab8c0086..091f6acb 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -6,9 +6,9 @@ ref: 242
title: Google Season of Docs (GSoD)
---
-Thank you for your interest in participating in the [2023 Google Season of Docs](https://developers.google.com/season-of-docs/) program with the [Qubes OS team](/team/). This page details our 2023 project idea as well as completed past projects. You can read more about the Google Season of Docs in the official [guides](https://developers.google.com/season-of-docs/docs/) and [FAQ](https://developers.google.com/season-of-docs/docs/faq).
+Thank you for your interest in participating in the [2024 Google Season of Docs](https://developers.google.com/season-of-docs/) program with the [Qubes OS team](/team/). This page details our 2024 project idea as well as completed past projects. You can read more about the Google Season of Docs in the official [guides](https://developers.google.com/season-of-docs/docs/) and [FAQ](https://developers.google.com/season-of-docs/docs/faq).
-## Instructional video series -- Qubes OS
+## Update and Expand How-To Guides -- Qubes OS
### About the Qubes OS Project
@@ -18,10 +18,54 @@ Qubes OS was launched in 2011 and has [received praise from security experts and
### The project's problem
-There is user demand for high-quality, up-to-date video guides that take users from zero Linux knowledge to using Qubes as a daily driver and performing specific tasks inside of Qubes, but almost no such videos exist. Although most of the required knowledge is documented, many users report that they would prefer to watch videos rather than read text or that they would find videos easier to understand and follow along with.
+to-be-written
### The project's scope
+to-be-written
+
+The project is estimated to need around six months to complete (see the timeline below). Qubes team members, including Michael Carbone, Andrew Wong, Marta Marczykowska-Górecka, and Marek Marczykowski-Górecki, will supervise and support the writer.
+
+### Measuring the project's success
+
+to-be-written
+
+### Timeline
+
+| Dates | Action items |
+| -------------- | --------------------------------------- |
+| May | Orientation |
+| June--November | |
+| December | Final project evaluation and case study |
+
+
+### Project budget
+
+| Expense | Amount |
+| --------------------------------------- | ------- |
+| writer (10 hours/week, 6 months) | $12,000 |
+| TOTAL | $12,000 |
+
+### Additional information
+
+Qubes OS regularly participates in Google Summer of Code and Google Season of Docs. This is our third time participating in Google Season of Docs. Our mentorships for GSoD 2019, 2020, and 2023 were successes, and the projects were completed within the times allotted. The past Google Season of Docs projects have given us experience in working with technical writers and have helped us to understand the benefits that technical writers can bring to our project.
+
+## Past Projects
+
+You can view the project we had in 2019 in the [2019 GSoD archive](https://developers.google.com/season-of-docs/docs/2019/participants/project-qubes) and the [2019 writer's report](https://refre.ch/report-qubesos/).
+
+You can also view the project we had in 2020 in the [2020 GSoD archive](https://developers.google.com/season-of-docs/docs/2020/participants/project-qubesos-c1e0) and the [2020 writer's report](https://gist.github.com/PROTechThor/bfe9b8b28295d88c438b6f6c754ae733).
+
+Here are some successful projects which have been implemented in the past by Google Season of Docs participants.
+
+### Instructional video series
+
+#### The project's problem
+
+There is user demand for high-quality, up-to-date video guides that take users from zero Linux knowledge to using Qubes as a daily driver and performing specific tasks inside of Qubes, but almost no such videos exist. Although most of the required knowledge is documented, many users report that they would prefer to watch videos rather than read text or that they would find videos easier to understand and follow along with.
+
+#### The project's scope
+
This project consists of creating a series of instructional videos that satisfy the following criteria:
- Prospective users who are not yet familiar with Linux or Qubes OS can easily understand and follow the videos.
@@ -68,7 +112,7 @@ Below is an example of the content (which is already [documented](/doc/)) that t
The project is estimated to need around six months to complete (see the timeline below). Qubes team members, including Michael Carbone, Andrew Wong, and Marek Marczykowski-Górecki, will supervise and support the creator.
-### Measuring the project's success
+#### Measuring the project's success
We will consider the project successful if, after publication of the video series:
@@ -76,34 +120,6 @@ We will consider the project successful if, after publication of the video serie
- The reception to the videos is generally positive and complaints about quality and accuracy are minimal.
- Appropriate analytics (e.g., YouTube metrics) are average or better for videos of this type (to be determined in consultation with the creator).
-### Timeline
-
-| Dates | Action items |
-| -------------- | --------------------------------------- |
-| March | Orientation |
-| April--October | Create Qubes OS video series |
-| November | Final project evaluation and case study |
-
-
-### Project budget
-
-| Expense | Amount |
-| --------------------------------------- | ------- |
-| Video creator (20 hours/week, 6 months) | $12,000 |
-| TOTAL | $12,000 |
-
-### Additional information
-
-Qubes OS regularly participates in Google Summer of Code and Google Season of Docs. This is our third time participating in Google Season of Docs. Our mentorships for GSoD 2019 and 2020 were successes, and both projects were completed within the times allotted. The past Google Season of Docs projects have given us experience in working with technical writers and have helped us to understand the benefits that technical writers can bring to our project. While our experience in working with video creators is more limited, we are keenly aware of the benefits of high-quality video content, as well as the significant time, resources, and talent required to create it.
-
-## Past Projects
-
-You can view the project we had in 2019 in the [2019 GSoD archive](https://developers.google.com/season-of-docs/docs/2019/participants/project-qubes) and the [2019 writer's report](https://refre.ch/report-qubesos/).
-
-You can also view the project we had in 2020 in the [2020 GSoD archive](https://developers.google.com/season-of-docs/docs/2020/participants/project-qubesos-c1e0) and the [2020 writer's report](https://gist.github.com/PROTechThor/bfe9b8b28295d88c438b6f6c754ae733).
-
-Here are some successful projects which have been implemented in the past by Google Season of Docs participants.
-
### Consolidate troubleshooting guides
**Project**: Consolidate troubleshooting guides
From 558bb2a51c527fb3319ccbee00b4c56eae78a29c Mon Sep 17 00:00:00 2001
From: Michael Carbone
Date: Tue, 2 Apr 2024 15:26:26 +0200
Subject: [PATCH 109/332] include link to 2023 gsod results
---
developer/general/gsod.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index 091f6acb..088ce505 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -54,7 +54,9 @@ Qubes OS regularly participates in Google Summer of Code and Google Season of Do
You can view the project we had in 2019 in the [2019 GSoD archive](https://developers.google.com/season-of-docs/docs/2019/participants/project-qubes) and the [2019 writer's report](https://refre.ch/report-qubesos/).
-You can also view the project we had in 2020 in the [2020 GSoD archive](https://developers.google.com/season-of-docs/docs/2020/participants/project-qubesos-c1e0) and the [2020 writer's report](https://gist.github.com/PROTechThor/bfe9b8b28295d88c438b6f6c754ae733).
+You can view the project we had in 2020 in the [2020 GSoD archive](https://developers.google.com/season-of-docs/docs/2020/participants/project-qubesos-c1e0) and the [2020 writer's report](https://gist.github.com/PROTechThor/bfe9b8b28295d88c438b6f6c754ae733).
+
+You can view the results of the project we had in 2023 [here](https://www.youtube.com/playlist?list=PLjwSYc73nX6aHcpqub-6lzJbL0vhLleTB).
Here are some successful projects which have been implemented in the past by Google Season of Docs participants.
From 1915add8534ceb64d7e4d8f00aa70bb2eaeaf8d0 Mon Sep 17 00:00:00 2001
From: Michael Carbone
Date: Tue, 2 Apr 2024 15:48:48 +0200
Subject: [PATCH 110/332] add some text
---
developer/general/gsod.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index 088ce505..cbd489da 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -32,11 +32,11 @@ to-be-written
### Timeline
-| Dates | Action items |
-| -------------- | --------------------------------------- |
-| May | Orientation |
-| June--November | |
-| December | Final project evaluation and case study |
+| Dates | Action items |
+| --------------- | --------------------------------------- |
+| May | Orientation |
+| June - November | Update & extend how-to guides |
+| December | Final project evaluation and case study |
### Project budget
From d40dfd10bbba597c877fb80bd8d3f411d736f191 Mon Sep 17 00:00:00 2001
From: xaki23
Date: Wed, 3 Apr 2024 01:10:49 +0200
Subject: [PATCH 111/332] try to improve/update chat section
---
introduction/support.md | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/introduction/support.md b/introduction/support.md
index 4fc0185e..1d818d25 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -514,8 +514,11 @@ news.
## Chat
-If you'd like to chat, join us on the `#qubes` IRC channel (or its Matrix
-bridge: `#qubes:libera.chat`).
+If you'd like to chat, join us on
+- the `#qubes` channel on `irc.libera.chat` or
+- the `#qubes:invisiblethingslab.com` matrix channel.
+
+these two should be linked/bridged, but for technical reasons currently are not.
## Unofficial venues
From 2cf63497fa23f1fc7618b56b01ebefac40e744db Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 2 Apr 2024 23:42:18 -0700
Subject: [PATCH 112/332] Fill out "the project's problem" section
---
developer/general/gsod.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index cbd489da..90ad8863 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -18,7 +18,11 @@ Qubes OS was launched in 2011 and has [received praise from security experts and
### The project's problem
-to-be-written
+- Some of the existing content is stale. It refers to previous Qubes releases and has not yet been updated to the cover the latest stable release.
+- There are important topic areas that the current guides do not completely cover, such as "understanding Qubes OS," "using Qubes OS in practice," "Qubes OS workflow for coding," "printing," and "audio."
+- The guides do not consistently address users of all skill and experience levels (beginner, intermediate, and expert).
+- Some of the guides lack relevant illustrations and screenshots.
+- When the developers update a software tool, they should update all the guides that mentions this tool. However, there is currently no way for the developers to know which guides mention which tools.
### The project's scope
From c664e19fe045a7e78d1f0c498bdb320d535cd5e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
Date: Fri, 5 Apr 2024 23:02:20 +0200
Subject: [PATCH 113/332] gsod: update 2024 information
---
developer/general/gsod.md | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index 90ad8863..0ca6b7af 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -26,13 +26,15 @@ Qubes OS was launched in 2011 and has [received praise from security experts and
### The project's scope
-to-be-written
-
The project is estimated to need around six months to complete (see the timeline below). Qubes team members, including Michael Carbone, Andrew Wong, Marta Marczykowska-Górecka, and Marek Marczykowski-Górecki, will supervise and support the writer.
### Measuring the project's success
-to-be-written
+We will consider the project successful if:
+
+- Existing guides are updated to describe currently supported Qubes OS version
+- Missing common guides are identified
+- 2-3 new guides are written
### Timeline
From b7a07d53e530d227c6534de0d27acec1d723b294 Mon Sep 17 00:00:00 2001
From: unman
Date: Fri, 12 Apr 2024 02:41:10 +0000
Subject: [PATCH 114/332] KDE-Delete reference to mailing list threads as
images removed.
---
user/advanced-topics/kde.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/user/advanced-topics/kde.md b/user/advanced-topics/kde.md
index dbffd245..c2553f7f 100644
--- a/user/advanced-topics/kde.md
+++ b/user/advanced-topics/kde.md
@@ -84,7 +84,3 @@ The safest way to remove (most of) KDE is:
sudo dnf remove kdelibs plasma-workspace
~~~
-Mailing List Threads
---------------------
-
-* [Nalu's KDE customization thread](https://groups.google.com/d/topic/qubes-users/KhfzF19NG1s/discussion)
From a2ba6dca04e6f42d686bcf63bb19b0800c6f30f5 Mon Sep 17 00:00:00 2001
From: unman
Date: Fri, 12 Apr 2024 02:49:37 +0000
Subject: [PATCH 115/332] Prepare for 4.2 installation guide
---
.../installation-guide-4.1.md | 301 ++++++++++++++++++
1 file changed, 301 insertions(+)
create mode 100644 user/downloading-installing-upgrading/installation-guide-4.1.md
diff --git a/user/downloading-installing-upgrading/installation-guide-4.1.md b/user/downloading-installing-upgrading/installation-guide-4.1.md
new file mode 100644
index 00000000..dd76685a
--- /dev/null
+++ b/user/downloading-installing-upgrading/installation-guide-4.1.md
@@ -0,0 +1,301 @@
+---
+lang: en
+layout: doc
+permalink: /doc/installation-guide-4.1/
+redirect_from:
+ref: 901
+title: Qubes 4.1 Installation guide
+---
+
+Welcome to the Qubes OS installation guide! This guide will walk you through the process of installing Qubes. Please read it carefully and thoroughly, as it contains important information for ensuring that your Qubes OS installation is functional and secure.
+
+## Pre-installation
+
+### Hardware requirements
+
+
+
+ Warning: Qubes has no control over what happens on your computer before you install it. No software can provide security if it is installed on compromised hardware. Do not install Qubes on a computer you don't trust. See installation security for more information.
+
+
+Qubes OS has very specific [system requirements](/doc/system-requirements/). To ensure compatibility, we strongly recommend using [Qubes-certified hardware](/doc/certified-hardware/). Other hardware may require you to perform significant troubleshooting. You may also find it helpful to consult the [Hardware Compatibility List](/hcl/).
+
+Even on supported hardware, you must ensure that [IOMMU-based virtualization](https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit#Virtualization) is activated in the BIOS or UEFI. Without it, Qubes OS won't be able to enforce isolation. For Intel-based boards, this setting is called Intel Virtualization for Directed I/O (**Intel VT-d**) and for AMD-based boards, it is called AMD I/O Virtualization Technology (or simply **AMD-Vi**). This parameter should be activated in your computer's BIOS or UEFI, alongside the standard Virtualization (**Intel VT-x**) and AMD Virtualization (**AMD-V**) extensions. This [external guide](https://web.archive.org/web/20200112220913/https://www.intel.in/content/www/in/en/support/articles/000007139/server-products.html) made for Intel-based boards can help you figure out how to enter your BIOS or UEFI to locate and activate those settings. If those settings are not nested under the Advanced tab, you might find them under the Security tab.
+
+
+
+ Note: Qubes OS is not meant to be installed inside a virtual machine as a guest hypervisor. In other words, nested virtualization is not supported. In order for a strict compartmentalization to be enforced, Qubes OS needs to be able to manage the hardware directly.
+
+
+### Copying the ISO onto the installation medium
+
+Pick the most secure existing computer and OS you have available for downloading and copying the Qubes ISO onto the installation medium. [Download](/downloads/) a Qubes ISO.
+
+
+
+ Warning: Any file you download from the internet could be malicious, even if it appears to come from a trustworthy source. Our philosophy is to distrust the infrastructure. Regardless of how you acquire your Qubes ISO, verify its authenticity before continuing.
+
+
+Once the ISO has been verified as authentic, you should copy it onto the installation medium of your choice, such as a USB drive, dual-layer DVD, or Blu-ray disc. The size of each Qubes ISO is available on the [downloads](/downloads/) page by hovering over the download button. The instructions below assume you've chosen a USB drive as your medium. If you've chosen a different medium, please adapt the instructions accordingly.
+
+
+
+ Warning: Be careful to choose the correct device when copying the ISO, or you may lose data. We strongly recommended making a full backup before modifying any devices.
+
+
+#### Linux ISO to USB
+
+On Linux, if you choose to use a USB drive, copy the ISO onto the USB device, e.g. using `dd`:
+
+```
+$ sudo dd if=Qubes-RX-x86_64.iso of=/dev/sdY status=progress bs=1048576 conv=fsync
+```
+
+Change `Qubes-RX-x86_64.iso` to the filename of the version you're installing, and change `/dev/sdY` to the correct target device e.g., `/dev/sdc`). Make sure to write to the entire device (e.g., `/dev/sdc`) rather than just a single partition (e.g., `/dev/sdc1`).
+
+#### Windows ISO to USB
+
+On Windows, you can use the [Rufus](https://rufus.akeo.ie/) tool to write the ISO to a USB key. Be sure to select "Write in DD Image mode" *after* selecting the Qubes ISO and pressing "START" on the Rufus main window.
+
+
+
+ Note: Using Rufus to create the installation medium means that you won't be able to choose the "Test this media and install Qubes OS" option mentioned in the example below. Instead, choose the "Install Qubes OS" option.
+
+
+[](/attachment/doc/rufus-menu.png)
+
+[](/attachment/doc/rufus-dd-image-mode.png)
+
+## Installation
+
+This section will demonstrate a simple installation using mostly default settings.
+
+### Getting to the boot screen
+
+"Booting" is the process of starting your computer. When a computer boots up, it first runs low-level software before the main operating system. Depending on the computer, this low-level software is may be called the ["BIOS"](https://en.wikipedia.org/wiki/BIOS) or ["UEFI"](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface).
+
+Since you're installing Qubes OS, you'll need to access your computer's BIOS or UEFI menu so that you can tell it to boot from the USB drive to which you just copied the Qubes installer ISO.
+
+To begin, power off your computer and plug the USB drive into a USB port, but don't press the power button yet. Right after you press the power button, you'll have to immediately press a specific key to enter the BIOS or UEFI menu. The key to press varies from brand to brand. `Esc`, `Del`, and `F10` are common ones. If you're not sure, you can search the web for ` BIOS key` or ` UEFI key` (replacing `` with your specific computer model) or look it up in your computer's manual.
+
+Once you know the key to press, press your computer's power button, then repeatedly press that key until you've entered your computer's BIOS or UEFI menu. To give you and idea of what you should be looking for, we've provided a couple of example photos below.
+
+Here's an example of what the BIOS menu looks like on a ThinkPad T430:
+
+[](/attachment/doc/Thinkpad-t430-bios-main.jpg)
+
+And here's an example of what a UEFI menu looks like:
+
+[](/attachment/doc/uefi.jpeg)
+
+Once you access your computer's BIOS or UEFI menu, you'll want to go to the "boot menu," which is where you tell your computer which devices to boot from. The goal is to tell the computer to boot from your USB drive so that you can run the Qubes installer. If your boot menu lets you select which device to boot from first, simply select your USB drive. (If you have multiple entries that all look similar to your USB drive, and you're not sure which one is correct, one option is just to try each one until it works.) If, on the other hand, your boot menu presents you with a list of boot devices in order, then you'll want to move your USB drive to the top so that the Qubes installer runs before anything else.
+
+Once you're done on the boot menu, save your changes. How you do this depends on your BIOS or UEFI, but the instructions should be displayed right there on the screen or in a nearby tab. (If you're not sure whether you've saved your changes correctly, you can always reboot your computer and go back into the boot menu to check whether it still reflects your changes.) Once your BIOS or UEFI is configured the way you want it, reboot your computer. This time, don't press any special keys. Instead, let the BIOS or UEFI load and let your computer boot from your USB drive. If you're successful in this step, after a few seconds you'll be presented with the Qubes installer screen:
+
+[](/attachment/doc/boot-screen.png)
+
+From here, you can navigate the boot screen using the arrow keys on your keyboard. Pressing the "Tab" key will reveal options. You can choose one of three options:
+
+* Install Qubes OS
+* Test this media and install Qubes OS
+* Troubleshooting
+
+Select the option to test this media and install Qubes OS.
+
+
+
+ Note: If the latest stable release is not compatible with your hardware, you may wish to consider testing a newer release.
+
+
+If the boot screen does not appear, there are several options to troubleshoot. First, try rebooting your computer. If it still loads your currently installed operating system or does not detect your installation medium, make sure the boot order is set up appropriately. The process to change the boot order varies depending on the currently installed system and the motherboard manufacturer. If **Windows 10** is installed on your machine, you may need to follow specific instructions to change the boot order. This may require an [advanced reboot](https://support.microsoft.com/en-us/help/4026206/windows-10-find-safe-mode-and-other-startup-settings).
+
+### The installer home screen
+
+On the first screen, you are asked to select the language that will be used during the installation process. When you are done, select **Continue**.
+
+[](/attachment/doc/welcome-to-qubes-os-installation-screen.png)
+
+Prior to the next screen, a compatibility test runs to check whether IOMMU-virtualization is active or not. If the test fails, a window will pop up.
+
+[](/attachment/doc/unsupported-hardware-detected.png)
+
+Do not panic. It may simply indicate that IOMMU-virtualization hasn't been activated in the BIOS or UEFI. Return to the [hardware requirements](#hardware-requirements) section to learn how to activate it. If the setting is not configured correctly, it means that your hardware won't be able to leverage some Qubes security features, such as a strict isolation of the networking and USB hardware.
+
+If the test passes, you will reach the installation summary screen. The installer loads Xen right at the beginning. If you can see the installer's graphical screen, and you pass the compatibility check that runs immediately afterward, Qubes OS is likely to work on your system!
+
+Like Fedora, Qubes OS uses the Anaconda installer. Those that are familiar with RPM-based distributions should feel at home.
+
+### Installation summary
+
+
+
+ Did you know? The Qubes OS installer is completely offline. It doesn't even load any networking drivers, so there is no possibility of internet-based data leaks or attacks during the installation process.
+
+
+The Installation summary screen allows you to change how the system will be installed and configured, including localization settings. At minimum, you are required to select the storage device on which Qubes OS will be installed.
+
+[](/attachment/doc/installation-summary-not-ready.png)
+
+### Localization
+
+Let's assume you wish to add a German keyboard layout. Go to Keyboard Layout, press the "Plus" symbol, search for "German" as indicated in the screenshot and press "Add". If you want it be your default language, select the "German" entry in the list and press the arrow button. Click on "Done" in the upper left corner, and you're ready to go!
+
+[](/attachment/doc/keyboard-layout-selection.png)
+
+The process to select a new language is similar to the process to select a new keyboard layout. Follow the same process in the "Language Support" entry.
+
+[](/attachment/doc/language-support-selection.png)
+
+You can have as many keyboard layout and languages as you want. Post-install, you will be able to switch between them and install others.
+
+Don't forget to select your time and date by clicking on the Time & Date entry.
+
+[](/attachment/doc/time-and-date.png)
+
+### Software
+
+[](/attachment/doc/add-ons.png)
+
+On the software selection tab, you can choose which software to install in Qubes OS. Two options are available:
+
+* **Debian:** Select this option if you would like to use [Debian](/doc/templates/debian/) qubes in addition to the default Fedora qubes.
+* **Whonix:** Select this option if you would like to use [Whonix](https://www.whonix.org/wiki/Qubes) qubes. Whonix allows you to use [Tor](https://www.torproject.org/) securely within Qubes.
+
+Whonix lets you route some or all of your network traffic through Tor for greater privacy. Depending on your threat model, you may need to install Whonix templates right away.
+
+Regardless of your choices on this screen, you will always be able to install these and other [templates](/doc/templates/) later. If you're short on disk space, you may wish to deselect these options.
+
+By default, Qubes OS comes preinstalled with the lightweight Xfce4 desktop environment. Other desktop environments will be available to you after the installation is completed, though they may not be officially supported (see [advanced topics](/doc/#advanced-topics)).
+
+Press **Done** to go back to the installation summary screen.
+
+### Installation destination
+
+Under the System section, you must choose the installation destination. Select the storage device on which you would like to install Qubes OS.
+
+
+
+ Warning: Be careful to choose the correct installation target, or you may lose data. We strongly recommended making a full backup before proceeding.
+
+
+Your installation destination can be an internal or external storage drive, such as an SSD, HDD, or USB drive. The installation destination must have a least 32 GiB of free space available.
+
+
+
+ Note: The installation destination cannot be the same as the installation medium. For example, if you're installing Qubes OS from a USB drive onto a USB drive, they must be two distinct USB drives, and they must both be plugged into your computer at the same time. (Note: This may not apply to advanced users who partition their devices appropriately.)
+
+
+Installing an operating system onto a USB drive can be a convenient way to try Qubes. However, USB drives are typically much slower than internal SSDs. We recommend a very fast USB 3.0 drive for decent performance. Please note that a minimum storage of 32 GiB is required. If you want to install Qubes OS onto a USB drive, just select the USB device as the target installation device. Bear in mind that the installation process is likely to take longer than it would on an internal storage device.
+
+[](/attachment/doc/select-storage-device.png)
+
+
+
+ Did you know? By default, Qubes OS uses LUKS/dm-crypt to encrypt everything except the /boot partition.
+
+
+As soon as you press **Done**, the installer will ask you to enter a passphrase for disk encryption. The passphrase should be complex. Make sure that your keyboard layout reflects what keyboard you are actually using. When you're finished, press **Done**.
+
+
+
+ Warning: If you forget your encryption passphrase, there is no way to recover it.
+
+
+[](/attachment/doc/select-storage-passphrase.png)
+
+When you're ready, press **Begin Installation**.
+
+[](/attachment/doc/installation-summary-ready.png)
+
+### Create your user account
+
+While the installation process is running, you can create your user account. This is what you'll use to log in after disk decryption and when unlocking the screen locker. This is a purely local, offline account in dom0. By design, Qubes OS is a single-user operating system, so this is just for you.
+
+Select **User Creation** to define a new user with administrator privileges and a password. Just as for the disk encryption, this password should be complex. The root account is deactivated and should remain as such.
+
+[](/attachment/doc/account-name-and-password.png)
+
+When the installation is complete, press **Reboot**. Don't forget to remove the installation medium, or else you may end up seeing the installer boot screen again.
+
+## Post-installation
+
+### First boot
+
+If the installation was successful, you should now see the GRUB menu during the boot process.
+
+[](/attachment/doc/grub-boot-menu.png)
+
+Just after this screen, you will be asked to enter your encryption passphrase.
+
+[](/attachment/doc/unlock-storage-device-screen.png)
+
+### Initial Setup
+
+You're almost done. Before you can start using Qubes OS, some configuration is needed.
+
+[](/attachment/doc/initial-setup-menu.png)
+
+By default, the installer will create a number of qubes (depending on the options you selected during the installation process). These are designed to give you a more ready-to-use environment from the get-go.
+
+[](/attachment/doc/initial-setup-menu-configuration.png)
+
+Let's briefly go over the options:
+
+* **Create default system qubes:** These are the core components of the system, required for things like internet access.
+* **Create default application qubes:** These are how you compartmentalize your digital life. There's nothing special about the ones the installer creates. They're just suggestions that apply to most people. If you decide you don't want them, you can always delete them later, and you can always create your own.
+* **Create Whonix Gateway and Workstation qubes:** If you want to use Whonix, you should select this option.
+ * **Enabling system and template updates over the Tor anonymity network using Whonix:** If you select this option, then whenever you install or update software in dom0 or a template, the internet traffic will go through Tor.
+* **Create USB qube holding all USB controllers:** Just like the network qube for the network stack, the USB qube isolates the USB controllers.
+ * **Use sys-net qube for both networking and USB devices:** You should select this option if you rely on a USB device for network access, such as a USB modem or a USB Wi-Fi adapter.
+* **Do not configure anything:** This is for very advanced users only. If you select this option, you'll have to set everything up manually afterward.
+
+When you're satisfied with you choices, press **Done**. This configuration process may take a while, depending on the speed and compatibility of your system.
+
+After the configuration is done, you will be greeted by the login screen. Enter your password and log in.
+
+[](/attachment/doc/login-screen.png)
+
+Congratulations, you are now ready to use Qubes OS!
+
+[](/attachment/doc/desktop-menu.png)
+
+## Next steps
+
+### Updating
+
+Next, [update](/doc/how-to-update/) your installation to ensure you have the latest security updates. Frequently updating is one of the best ways to remain secure against new threats.
+
+### Security
+
+The Qubes OS Project occasionally issues [Qubes Security Bulletins (QSBs)](/security/qsb/) as part of the [Qubes Security Pack (qubes-secpack)](/security/pack/). It is important to make sure that you receive all QSBs in a timely manner so that you can take action to keep your system secure. (While [updating](#updating) will handle most security needs, there may be cases in which additional action from you is required.) For this reason, we strongly recommend that every Qubes user subscribe to the [qubes-announce](/support/#qubes-announce) mailing list.
+
+In addition to QSBs, the Qubes OS Project also publishes [Canaries](/security/canary/), XSA summaries, template releases and end-of-life notices, and other items of interest to Qubes users. Since these are not essential for all Qubes users to read, they are not sent to [qubes-announce](/support/#qubes-announce) in order to keep the volume on that list low. However, we expect that most users, especially novice users, will find them helpful. If you are interested in these additional items, we encourage you to subscribe to the [Qubes News RSS feed](/feed.xml) or join one of our other [venues](/support/), where these news items are also announced.
+
+For more information about Qubes OS Project security, please see the [security center](/security/).
+
+### Backups
+
+It is extremely important to make regular backups so that you don't lose your data unexpectedly. The [Qubes backup system](/doc/how-to-back-up-restore-and-migrate/) allows you to do this securely and easily.
+
+### Submit your HCL report
+
+Consider giving back to the Qubes community and helping other users by [generating and submitting a Hardware Compatibility List (HCL) report](/doc/how-to-use-the-hcl/#generating-and-submitting-new-reports).
+
+### Get Started
+
+Find out [Getting Started](/doc/getting-started/) with Qubes, check out the other [How-To Guides](/doc/#how-to-guides), and learn about [Templates](/doc/#templates).
+
+## Getting help
+
+* We work very hard to make the [documentation](/doc/) accurate, comprehensive useful and user friendly. We urge you to read it! It may very well contain the answers to your questions. (Since the documentation is a community effort, we'd also greatly appreciate your help in [improving](/doc/how-to-edit-the-documentation/) it!)
+
+* If issues arise during installation, see the [Installation Troubleshooting](/doc/installation-troubleshooting) guide.
+
+* If you don't find your answer in the documentation, please see [Help, Support, Mailing Lists, and Forum](/support/) for places to ask.
+
+* Please do **not** email individual members of the Qubes team with questions about installation or other problems. Instead, please see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate places to ask questions.
From c88aed00ebbebdb489b25af21a749a78d290e72c Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 14 Apr 2024 01:38:06 +0000
Subject: [PATCH 116/332] Update installation guide for 4,2
---
.../installation-guide.md | 74 ++++++++-----------
1 file changed, 30 insertions(+), 44 deletions(-)
diff --git a/user/downloading-installing-upgrading/installation-guide.md b/user/downloading-installing-upgrading/installation-guide.md
index 6c9361ad..5f867684 100644
--- a/user/downloading-installing-upgrading/installation-guide.md
+++ b/user/downloading-installing-upgrading/installation-guide.md
@@ -111,19 +111,21 @@ Once you access your computer's BIOS or UEFI menu, you'll want to go to the "boo
Once you're done on the boot menu, save your changes. How you do this depends on your BIOS or UEFI, but the instructions should be displayed right there on the screen or in a nearby tab. (If you're not sure whether you've saved your changes correctly, you can always reboot your computer and go back into the boot menu to check whether it still reflects your changes.) Once your BIOS or UEFI is configured the way you want it, reboot your computer. This time, don't press any special keys. Instead, let the BIOS or UEFI load and let your computer boot from your USB drive. If you're successful in this step, after a few seconds you'll be presented with the Qubes installer screen:
-[](/attachment/doc/boot-screen.png)
+[](/attachment/doc/boot-screen-4.2.png)
-From here, you can navigate the boot screen using the arrow keys on your keyboard. Pressing the "Tab" key will reveal options. You can choose one of three options:
+From here, you can navigate the boot screen using the arrow keys on your keyboard. Pressing the "Tab" key will reveal options. You can choose one of five options:
* Install Qubes OS
* Test this media and install Qubes OS
-* Troubleshooting
+* Troubleshooting - verbose boot
+* Rescue a Qubes SO system
+* Install Qubes OS 4.2.1 using kernel-latest
Select the option to test this media and install Qubes OS.
- Note: If the latest stable release is not compatible with your hardware, you may wish to consider testing a newer release.
+ Note: If the latest stable release is not compatible with your hardware, you may wish to consider installing using the latest kernel. Be aware that this has not been as well testes as the standard kernel.
If the boot screen does not appear, there are several options to troubleshoot. First, try rebooting your computer. If it still loads your currently installed operating system or does not detect your installation medium, make sure the boot order is set up appropriately. The process to change the boot order varies depending on the currently installed system and the motherboard manufacturer. If **Windows 10** is installed on your machine, you may need to follow specific instructions to change the boot order. This may require an [advanced reboot](https://support.microsoft.com/en-us/help/4026206/windows-10-find-safe-mode-and-other-startup-settings).
@@ -132,7 +134,7 @@ If the boot screen does not appear, there are several options to troubleshoot. F
On the first screen, you are asked to select the language that will be used during the installation process. When you are done, select **Continue**.
-[](/attachment/doc/welcome-to-qubes-os-installation-screen.png)
+[](/attachment/doc/welcome-to-qubes-os-installation-screen-4.2.png)
Prior to the next screen, a compatibility test runs to check whether IOMMU-virtualization is active or not. If the test fails, a window will pop up.
@@ -153,7 +155,7 @@ Like Fedora, Qubes OS uses the Anaconda installer. Those that are familiar with
The Installation summary screen allows you to change how the system will be installed and configured, including localization settings. At minimum, you are required to select the storage device on which Qubes OS will be installed.
-[](/attachment/doc/installation-summary-not-ready.png)
+[](/attachment/doc/installation-summary-not-ready-4.2.png)
### Localization
@@ -170,24 +172,6 @@ You can have as many keyboard layout and languages as you want. Post-install, yo
Don't forget to select your time and date by clicking on the Time & Date entry.
[](/attachment/doc/time-and-date.png)
-
-### Software
-
-[](/attachment/doc/add-ons.png)
-
-On the software selection tab, you can choose which software to install in Qubes OS. Two options are available:
-
-* **Debian:** Select this option if you would like to use [Debian](/doc/templates/debian/) qubes in addition to the default Fedora qubes.
-* **Whonix:** Select this option if you would like to use [Whonix](https://www.whonix.org/wiki/Qubes) qubes. Whonix allows you to use [Tor](https://www.torproject.org/) securely within Qubes.
-
-Whonix lets you route some or all of your network traffic through Tor for greater privacy. Depending on your threat model, you may need to install Whonix templates right away.
-
-Regardless of your choices on this screen, you will always be able to install these and other [templates](/doc/templates/) later. If you're short on disk space, you may wish to deselect these options.
-
-By default, Qubes OS comes preinstalled with the lightweight Xfce4 desktop environment. Other desktop environments will be available to you after the installation is completed, though they may not be officially supported (see [advanced topics](/doc/#advanced-topics)).
-
-Press **Done** to go back to the installation summary screen.
-
### Installation destination
Under the System section, you must choose the installation destination. Select the storage device on which you would like to install Qubes OS.
@@ -206,7 +190,7 @@ Your installation destination can be an internal or external storage drive, such
Installing an operating system onto a USB drive can be a convenient way to try Qubes. However, USB drives are typically much slower than internal SSDs. We recommend a very fast USB 3.0 drive for decent performance. Please note that a minimum storage of 32 GiB is required. If you want to install Qubes OS onto a USB drive, just select the USB device as the target installation device. Bear in mind that the installation process is likely to take longer than it would on an internal storage device.
-[](/attachment/doc/select-storage-device.png)
+[](/attachment/doc/select-storage-device-4.2.png)
@@ -220,21 +204,22 @@ As soon as you press **Done**, the installer will ask you to enter a passphrase
Warning: If you forget your encryption passphrase, there is no way to recover it.
-[](/attachment/doc/select-storage-passphrase.png)
-
-When you're ready, press **Begin Installation**.
-
-[](/attachment/doc/installation-summary-ready.png)
+[](/attachment/doc/select-storage-passphrase.png)
### Create your user account
-While the installation process is running, you can create your user account. This is what you'll use to log in after disk decryption and when unlocking the screen locker. This is a purely local, offline account in dom0. By design, Qubes OS is a single-user operating system, so this is just for you.
+Select "User Creation" to create your user account. This is what you'll use to log in after disk decryption and when unlocking the screen locker. This is a purely local, offline account in dom0. By design, Qubes OS is a single-user operating system, so this is just for you.
-Select **User Creation** to define a new user with administrator privileges and a password. Just as for the disk encryption, this password should be complex. The root account is deactivated and should remain as such.
+The new user you create has full administrator privileges and is protected by a password. Just as for the disk encryption, this password should be complex. The root account is deactivated and should remain as such.
-[](/attachment/doc/account-name-and-password.png)
+[](/attachment/doc/account-name-and-password-4.2.png)
-When the installation is complete, press **Reboot**. Don't forget to remove the installation medium, or else you may end up seeing the installer boot screen again.
+### Installation
+When you have completed all the items marked with the warning icon, press **Begin Installation**.
+
+Installation can take some time.
+[](/attachment/doc/installation-complete-4.2.png)
+When the installation is complete, press **Reboot System**. Don't forget to remove the installation medium, or else you may end up seeing the installer boot screen again.
## Post-installation
@@ -252,25 +237,25 @@ Just after this screen, you will be asked to enter your encryption passphrase.
You're almost done. Before you can start using Qubes OS, some configuration is needed.
-[](/attachment/doc/initial-setup-menu.png)
+[](/attachment/doc/initial-setup-menu.png)
+[](/attachment/doc/initial-setup-menu-configuration-4.2.png)
By default, the installer will create a number of qubes (depending on the options you selected during the installation process). These are designed to give you a more ready-to-use environment from the get-go.
-[](/attachment/doc/initial-setup-menu-configuration.png)
-
Let's briefly go over the options:
-* **Create default system qubes:** These are the core components of the system, required for things like internet access.
+* **Templates Configuration:** Here you can decide which [templates](../templates/) you want to have installed, and which will be the default template.
+* **Create default system qubes:** These are the core components of the system, required for things like internet access. You can opt to have some created as [disposables](../glossary#disposable)
* **Create default application qubes:** These are how you compartmentalize your digital life. There's nothing special about the ones the installer creates. They're just suggestions that apply to most people. If you decide you don't want them, you can always delete them later, and you can always create your own.
-* **Create Whonix Gateway and Workstation qubes:** If you want to use Whonix, you should select this option.
- * **Enabling system and template updates over the Tor anonymity network using Whonix:** If you select this option, then whenever you install or update software in dom0 or a template, the internet traffic will go through Tor.
-* **Create USB qube holding all USB controllers:** Just like the network qube for the network stack, the USB qube isolates the USB controllers.
+* **Use a qube to hold all USB controllers:** Just like the network qube for the network stack, the USB qube isolates the USB controllers.
* **Use sys-net qube for both networking and USB devices:** You should select this option if you rely on a USB device for network access, such as a USB modem or a USB Wi-Fi adapter.
-* **Do not configure anything:** This is for very advanced users only. If you select this option, you'll have to set everything up manually afterward.
+* **Create Whonix Gateway and Workstation qubes:** If you want to use [Whonix](https://www.whonix.org/wiki/Qubes), you should select this option.
+ * **Enabling system and template updates over the Tor anonymity network using Whonix:** If you select this option, then whenever you install or update software in dom0 or a template, the internet traffic will go through Tor.
+* **Do not configure anything:** This is for very advanced users only. If you select this option, you will have to manually set up everything.
-When you're satisfied with you choices, press **Done**. This configuration process may take a while, depending on the speed and compatibility of your system.
+When you're satisfied with your choices, press **Done**. This configuration process may take a while, depending on the speed and compatibility of your system.
-After the configuration is done, you will be greeted by the login screen. Enter your password and log in.
+After configuration is done, you will be greeted by the login screen. Enter your password and log in.
[](/attachment/doc/login-screen.png)
@@ -313,3 +298,4 @@ Find out [Getting Started](/doc/getting-started/) with Qubes, check out the othe
* If you don't find your answer in the documentation, please see [Help, Support, Mailing Lists, and Forum](/support/) for places to ask.
* Please do **not** email individual members of the Qubes team with questions about installation or other problems. Instead, please see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate places to ask questions.
+
From ca07c192fc9f07a114fa7cee1a59d882cd968ab4 Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 14 Apr 2024 12:20:42 +0000
Subject: [PATCH 117/332] Update installation guide for 4.2 with more
screenshots
---
user/downloading-installing-upgrading/installation-guide.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/user/downloading-installing-upgrading/installation-guide.md b/user/downloading-installing-upgrading/installation-guide.md
index 5f867684..7b755c34 100644
--- a/user/downloading-installing-upgrading/installation-guide.md
+++ b/user/downloading-installing-upgrading/installation-guide.md
@@ -231,13 +231,14 @@ If the installation was successful, you should now see the GRUB menu during the
Just after this screen, you will be asked to enter your encryption passphrase.
-[](/attachment/doc/unlock-storage-device-screen.png)
+[](/attachment/doc/unlock-storage-device-screen-4.2.png)
### Initial Setup
You're almost done. Before you can start using Qubes OS, some configuration is needed.
-[](/attachment/doc/initial-setup-menu.png)
+[](/attachment/doc/initial-setup-menu-4.2.png)
+Click on the item marked with the warning triangle to enter the configuration screen.
[](/attachment/doc/initial-setup-menu-configuration-4.2.png)
By default, the installer will create a number of qubes (depending on the options you selected during the installation process). These are designed to give you a more ready-to-use environment from the get-go.
From 39a9cf22839ec630358d2fc499b7eaf22972bc0e Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 14 Apr 2024 14:06:47 +0000
Subject: [PATCH 118/332] Clarify levels of salting, and use of state.apply.
make language consistent
---
user/advanced-topics/salt.md | 126 ++++++++++++++++++++---------------
1 file changed, 72 insertions(+), 54 deletions(-)
diff --git a/user/advanced-topics/salt.md b/user/advanced-topics/salt.md
index e5495377..8ea97e9c 100644
--- a/user/advanced-topics/salt.md
+++ b/user/advanced-topics/salt.md
@@ -31,7 +31,7 @@ its clients (called *minions*).
In typical situations, it is intended that the administrator interacts only
with the master and keeps the configurations there.
In Qubes, we don't have a master.
-Instead we have one minion which resides in `dom0` and manages domains from
+Instead we have one minion which resides in `dom0` and manages qubes from
there.
This setup is also supported by Salt.
@@ -61,8 +61,26 @@ enforcing the state in a particular area.
It exposes some *imperative* functions for the administrator.
For example, there is a `system` module that has a `system.halt` function that,
when issued, will immediately halt a domain.
-There is another function called `state.apply` which will synchronize the
-state of the system with the administrator's configuration/desires.
+
+In salt, there are different levels of functionality.
+The lowest level is a single state function, called like
+this `state.single pkg.installed name=firefox-esr`
+When the system compiles data from sls formulas, it generates *chunks* -
+low chunks are at the bottom of the compiler . You can call them with
+`state.low`
+Next up is the *lowstate* level - this is the list of all low chunks in
+order. - To see them you have `state.show_lowstate`, and use `state.lowstate` to apply them.
+At the top level is *highstate* - this is an interpretation of **all** the data represented in YAML
+in sls files. You can view it with `state.show_highstate`.
+
+When you want to apply a configuration, you can use `qubesctl state.highstate.`
+This will apply all the states you have included in highstate.
+
+There is another function, `state.apply`; `state.apply` has two uses.
+When used on its own, it will apply *highstate* - all the configuration that has been enabled.
+It can also be used to apply a specific state, like this: `state.apply browser` - this will apply the state specified in `browser.sls`.
+
+For simplicity we will use `state.apply` through this page, when we want to apply all configured states.
### Configuration
@@ -126,11 +144,11 @@ The official documentation has more details on the
When configuring a system you will write one or more state files (`*.sls`) and
put (or symlink) them into the main Salt directory `/srv/salt/`.
Each state file contains multiple states and should describe some unit of
-configuration (e.g., a state file `mail.sls` could setup a VM for e-mail).
+configuration (e.g., a state file `mail.sls` could setup a qube for e-mail).
#### Top Files
-After you have several state files, you need something to assign them to a VM.
+After you have several state files, you need something to assign them to a qube.
This is done by `*.top` files ([official documentation](https://docs.saltproject.io/en/latest/ref/states/top.html)).
Their structure looks like this:
@@ -142,8 +160,8 @@ environment:
```
In most cases, the environment will be called `base`.
-The `target_matching_clause` will be used to select your minions (VMs).
-It can be either the name of a VM or a regular expression.
+The `target_matching_clause` will be used to select your minions (Templates or qubes).
+It can be either the name of a qube or a regular expression.
If you are using a regular expressions, you need to give Salt a hint you are
doing so:
@@ -212,17 +230,17 @@ However, the states that are part of the standard Qubes distribution are mostly
templates and the configuration is done in pillars from formulas.
The formulas are in `/srv/formulas`, including stock formulas for domains in
-`/srv/formulas/dom0/virtual-machines-formula/qvm`, which are used by firstboot.
+`/srv/formulas/dom0/virtual-machines-formula/qvm`, which are used by first boot.
Because we use some code that is not found in older versions of Salt, there is
a tool called `qubesctl` that should be run instead of `salt-call --local`.
It accepts all the same arguments of the vanilla tool.
-## Configuring a VM's System from Dom0
+## Configuring a qube's System from Dom0
-Salt in Qubes can be used to configure VMs from dom0.
-Simply set the VM name as the target minion name in the top file.
-You can also use the `qubes` pillar module to select VMs with a particular
+Salt can be used to configure qubes from dom0.
+Simply set the qube name as the target minion name in the top file.
+You can also use the `qubes` pillar module to select qubes with a particular
property (see below).
If you do so, then you need to pass additional arguments to the `qubesctl` tool:
@@ -250,28 +268,28 @@ To apply a state to all templates, call `qubesctl --templates state.apply`.
The actual configuration is applied using `salt-ssh` (running over `qrexec`
instead of `ssh`).
-Which means you don't need to install anything special in a VM you want to
+Which means you don't need to install anything special in a qube you want to
manage.
-Additionally, for each target VM, `salt-ssh` is started from a temporary VM.
-This way dom0 doesn't directly interact with potentially malicious target VMs;
-and in the case of a compromised Salt VM, because they are temporary, the
-compromise cannot spread from one VM to another.
+Additionally, for each target qube, `salt-ssh` is started from a temporary qube.
+This way dom0 doesn't directly interact with potentially malicious target qubes;
+and in the case of a compromised Salt qube, because they are temporary, the
+compromise cannot spread from one qube to another.
Beginning with Qubes 4.0 and after [QSB #45](/news/2018/12/03/qsb-45/), we implemented two changes:
-1. Added the `management_dispvm` VM property, which specifies the disposable
+1. Added the `management_dispvm` qube property, which specifies the disposable
Template that should be used for management, such as Salt
configuration. App qubes inherit this property from their
parent templates. If the value is not set explicitly, the default
is taken from the global `management_dispvm` property. The
- VM-specific property is set with the `qvm-prefs` command, while the
+ qube-specific property is set with the `qvm-prefs` command, while the
global property is set with the `qubes-prefs` command.
2. Created the `default-mgmt-dvm` disposable template, which is hidden from
the menu (to avoid accidental use), has networking disabled, and has
- a black label (the same as templates). This VM is set as the global
+ a black label (the same as templates). This qube is set as the global
`management_dispvm`. Keep in mind that this disposable template has full control
- over the VMs it's used to manage.
+ over the qubes it's used to manage.
## Writing Your Own Configurations
@@ -289,17 +307,17 @@ my new and shiny VM:
- proxy
```
-It uses the Qubes-specific `qvm.present` state, which ensures that the domain is
+It uses the Qubes-specific `qvm.present` state, which ensures that the qube is
present (if not, it creates it).
-- The `name` flag informs Salt that the domain should be named `salt-test` (not
+- The `name` flag informs Salt that the qube should be named `salt-test` (not
`my new and shiny VM`).
-- The `template` flag informs Salt which template should be used for the domain.
-- The `label` flag informs Salt what color the domain should be.
-- The `mem` flag informs Salt how much RAM should be allocated to the domain.
+- The `template` flag informs Salt which template should be used for the qube.
+- The `label` flag informs Salt what color the qube should be.
+- The `mem` flag informs Salt how much RAM should be allocated to the qube.
- The `vcpus` flag informs Salt how many Virtual CPUs should be allocated to the
- domain
-- The `proxy` flag informs Salt that the domain should be a ProxyVM.
+ qube
+- The `proxy` flag informs Salt that the qube should be a ProxyVM.
As you will notice, the options are the same (or very similar) to those used in
`qvm-prefs`.
@@ -328,7 +346,7 @@ To apply the state:
$ qubesctl state.apply
```
-### Example of Configuring a VM's System from Dom0
+### Example of Configuring Templates from Dom0
Lets make sure that the `mc` package is installed in all templates.
Similar to the previous example, you need to create a state file
@@ -364,11 +382,11 @@ $ qubesctl --all state.apply
### `qvm.present`
-As in the example above, it creates a domain and sets its properties.
+As in the example above, it creates a qube and sets its properties.
### `qvm.prefs`
-You can set properties of an existing domain:
+You can set properties of an existing qube:
```
my preferences:
@@ -377,13 +395,13 @@ my preferences:
- netvm: sys-firewall
```
-***Note*** The `name:` option will not change the name of a domain, it will only
-be used to match a domain to apply the configurations to it.
+***Note*** The `name:` option will not change the name of a qube, it will only
+be used to match a qube to apply the configurations to it.
### `qvm.service`
```
-services in my domain:
+services in my qube:
qvm.service:
- name: salt-test3
- enable:
@@ -400,18 +418,18 @@ This enables, disables, or sets to default, services as in `qvm-service`.
### `qvm.running`
-Ensures the specified domain is running:
+Ensures the specified qube is running:
```
-domain is running:
+qube is running:
qvm.running:
- name: salt-test4
```
## Virtual Machine Formulae
-You can use these formulae to download, install, and configure VMs in Qubes.
-These formulae use pillar data to define default VM names and configuration details.
+You can use these formulae to download, install, and configure qubes in Qubes.
+These formulae use pillar data to define default qube names and configuration details.
The default settings can be overridden in the pillar data located in:
```
@@ -419,7 +437,7 @@ The default settings can be overridden in the pillar data located in:
```
In dom0, you can apply a single state with `sudo qubesctl state.sls STATE_NAME`.
-For example, `sudo qubesctl state.sls qvm.personal` will create a `personal` VM (if it does not already exist) with all its dependencies (template, `sys-firewall`, and `sys-net`).
+For example, `sudo qubesctl state.sls qvm.personal` will create a `personal` qube (if it does not already exist) with all its dependencies (template, `sys-firewall`, and `sys-net`).
### Available states
@@ -429,16 +447,16 @@ System NetVM
#### `qvm.sys-usb`
-System USB VM
+System USB qube
#### `qvm.sys-net-as-usbvm`
-System USB VM bundled into NetVM. Do not enable together with `qvm.sys-usb`.
+System USB qube bundled into NetVM. Do not enable together with `qvm.sys-usb`.
#### `qvm.usb-keyboard`
-Enable USB keyboard together with USB VM, including for early system boot (for LUKS passhprase).
-This state implicitly creates a USB VM (`qvm.sys-usb` state), if not already done.
+Enable USB keyboard together with USB qube, including for early system boot (for LUKS passhprase).
+This state implicitly creates a USB qube (`qvm.sys-usb` state), if not already done.
#### `qvm.sys-firewall`
@@ -525,7 +543,7 @@ Useful options:
- `--max-concurrency` --- Limits how many templates are updated at the same time.
Adjust to your available RAM.
The default is 4, and the GUI updater sets it to 1.
-- `--targets=vm1,vm2,...` --- Limit to specific VMs, instead of all of them.
+- `--targets=vm1,vm2,...` --- Limit to specific qubes, instead of all of them.
(Use instead of `--templates` or `--standalones`.)
- `--show-output` --- Show an update summary instead of just OK/FAIL.
@@ -539,31 +557,31 @@ Additional pillar data is available to ease targeting configurations (for exampl
### `qubes:type`
-VM type. Possible values:
+qube type. Possible values:
-- `admin` - Administration domain (`dom0`)
+- `admin` - Administration qube (`dom0`)
- `template` - template
-- `standalone` - Standalone VM
+- `standalone` - Standalone qube
- `app` - Template based app qube
### `qubes:template`
-Template name on which a given VM is based (if any).
+Template name on which a given qube is based (if any).
### `qubes:netvm`
-VM which provides network to the given VM
+qube which provides network to the given qube
## Debugging
-The output for each VM is logged in `/var/log/qubes/mgmt-VM_NAME.log`.
+The output for each qube is logged in `/var/log/qubes/mgmt-VM_NAME.log`.
If the log does not contain useful information:
1. Run `sudo qubesctl --skip-dom0 --target=VM_NAME state.apply`
-2. When your VM is being started (yellow) press Ctrl-z on qubesctl.
-3. Open terminal in disp-mgmt-VM_NAME.
+2. When your qube is being started (yellow) press Ctrl-z on qubesctl.
+3. Open terminal in disp-mgmt-qube_NAME.
4. Look at /etc/qubes-rpc/qubes.SaltLinuxVM - this is what is
- executed in the management VM.
+ executed in the management qube.
5. Get the last two lines:
```shell_session
@@ -607,4 +625,4 @@ install template and shutdown updateVM:
- [Top files](https://docs.saltproject.io/en/latest/ref/states/top.html)
- [Jinja templates](https://palletsprojects.com/p/jinja/)
- [Qubes specific modules](https://github.com/QubesOS/qubes-mgmt-salt-dom0-qvm/blob/master/README.rst)
-- [Formulas for default Qubes VMs](https://github.com/QubesOS/qubes-mgmt-salt-dom0-virtual-machines/tree/master/qvm)
+- [Formulas for default Qubes qubes](https://github.com/QubesOS/qubes-mgmt-salt-dom0-virtual-machines/tree/master/qvm)
From be6a36f7ea6a53b9593ef5f1def9f26714303aac Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 16 Apr 2024 07:14:45 -0700
Subject: [PATCH 119/332] Note that 4.2 does not support Debian 11 templates
---
developer/releases/4_2/release-notes.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 109becca..9e41bbf0 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -50,6 +50,10 @@ Also see the [full list of open bug reports affecting Qubes 4.2](https://github.
We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after installation in order to apply all available bug fixes.
+## Notes
+
+- Qubes 4.2 does not support Debian 11 templates (see [supported template releases](/doc/supported-releases/#templates)). Please [upgrade your Debian templates](/doc/templates/debian/#upgrading) to Debian 12.
+
## Download
All Qubes ISOs and associated [verification files](/security/verifying-signatures/) are available on the [downloads](/downloads/) page.
From f8326123ca5c693d166e80e40ef8b33ac52c0b12 Mon Sep 17 00:00:00 2001
From: Christian Foerster
Date: Thu, 18 Apr 2024 00:35:20 +0200
Subject: [PATCH 120/332] make easier to resolve conflicts with PR 1372
---
user/security-in-qubes/mfa.md | 92 ++++++++++++++++++++++++++++++++++-
1 file changed, 91 insertions(+), 1 deletion(-)
diff --git a/user/security-in-qubes/mfa.md b/user/security-in-qubes/mfa.md
index 2a8a73a2..62a72e17 100644
--- a/user/security-in-qubes/mfa.md
+++ b/user/security-in-qubes/mfa.md
@@ -27,6 +27,94 @@ By default Qubes has two protection mechanisms against attackers.
The first is full disk encryption and the second the user login screen / lockscreen.
This article section concerns only adding multi-factor authentication to the second one.
+### Time-based One-time Password (TOTP)
+
+As the name implies, this generates authentication code that is time-dependent. You can save the TOTP secret in a mobile app like [FreeOTP](https://en.wikipedia.org/wiki/FreeOTP)
+and then use it as an additional factor to login to your Qubes system.
+
+> **Warning**: remember to keep backup access codes.
+
+1. Download `google-authenticator` in dom0:
+
+ ```
+ sudo qubes-dom0-update google-authenticator
+ ```
+
+2. Run google authenticator:
+
+ ```
+ google-authenticator
+ ```
+
+3. Walk through the setup instructions 2 which will also generate your QR code for your auth app of choice:
+
+ ```
+ Do you want me to update your “/home/user/.google_authenticator” file (y/n) y
+
+ Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)
+
+ By default, tokens are good for 30 seconds, and to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)
+
+ If the computer that you are logging into isn’t hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)
+ ```
+
+> **Warning**: in the next session if incorrectly performed, there is the risk of locking yourself out. Before procedding ensure that you have an up-to-date backup.
+>
+> For advanced users, to make sure you can quickly recover, you can also open another loging session in a tty. To do this, you do ctrl+alt+F2 and login normally. Should anything go wrong, as long as you don't shut the computer down, you can still access this tty by entering the same key combination and reverting the changes. After you've opened this "backup" login, you can get to your graphical desktop with ctrl+alt+F1.
+
+Now we are going to add the authenticator as a login requirement:
+
+1. `sudo authselect create-profile mfa --base-on sssd`
+
+2. Edit the custom system authentication template with `sudo nanois encouraged /etc/authselect/custom/mfa/system-auth`.
+
+ Add the following line right after `auth required pam_faildelay.so delay=2000000`:
+
+ ```
+ auth required pam_google_authenticator.so
+ ```
+
+ After the change, the top of the file should look like this:
+
+ ```
+ {imply "with-smartcard" if "with-smartcard-required"}
+ auth required pam_env.so
+ auth required pam_faildelay.so delay=2000000
+ auth required pam_google_authenticator.so
+ ```
+
+3. Lastly, activate this authentication method with:
+
+ ```
+ sudo authselect select custom/mfa
+ ```
+
+Now you can test by locking the screen with ctrl+alt+l. If it was successful and you are pleased with the results, restart your computer.
+
+**Note**: When logging in. the first thing you put is the TOTP secret and then the password. This is true in the screen locker and as well as the session manager (the login window that shows right after you put the disk encryption passphrase).
+
+After this is done, its recommended to do a backup. This is because as long as you incude dom0 in the backup, your authentication code will be backed up as well.
+
+#### Troubleshooting
+
+The following assumes you haven't restarted your computer since setting up TOTP secret.
+
+1. Switch to TTY2 with ctrl+alt+F2.
+2. Revert to the original policy with:
+ ```
+ sudo authselect select sssd
+ ```
+3. Switch back to the graphical desktop with ctrl+alt+F1. You should be able to login normally (without multi-factor authentication).
+4. Change the mfa custom policy and apply it again.
+
+#### Lost TOTP / authentication device?
+
+In case you've lost your TOTP authentication device, you have two options.
+
+The first option is backup codes. When generating the TOTP secret you must have saved some recovery codes. Those can be used in place of the TOTP code, but they're discarded after use. So make sure you redo the multi-factor authentications intructions.
+
+The second option is recovery from a backup. It will work as long as you included dom0 in said backup. After restoring the dom0 backup, open a terminal in dom0 and the file should be located in `/home//home-restore-/dom0-home//.google_authenticator`.
+
### Login with a YubiKey / NitroKey3
The YubiKey / NitroKey3 is a hardware authentication device manufactured by Yubico / NitroKey
@@ -88,7 +176,7 @@ Note that setting up both a YubiKey and a NitroKey3 is not supported.
Follow the installation instructions on the official [NitroKey
website](https://docs.nitrokey.com/software/nitropy/all-platforms/installation).
- **WARNING**: *as of February 2024 the official instructions involve using pipx to
+ **WARNING**: *as of April 2024 the official instructions involve using pipx to
install the pynitrokey package and its dependencies without any GPG
verification! This is not a recommended practice, but will soon be
fixed by NitroKey when they start providing release artifacts with
@@ -157,6 +245,8 @@ the secret for multiple of them, but you must always use the same NitroKey, beca
HOTP counter will be incremented in dom0 as well as the used NitroKey whenever you make use
of this method. If you want to switch to a different NitroKey later, delete the file
`/etc/qubes/yk-keys/nk-hotp-counter` in dom0 first to make it work with a fresh NitroKey 3.
+Do the same if for some reason your counters get desynchronized (it stops working), e.g. due
+to connectivity issues (NitroKey3A Minis are known to wear out quickly).
4. **YubiKey**
From bd464e2bfd500c347c195c3671deb312d7f22b94 Mon Sep 17 00:00:00 2001
From: unman
Date: Thu, 18 Apr 2024 13:17:22 +0000
Subject: [PATCH 121/332] Fix broken link to news post
---
user/security-in-qubes/device-handling-security.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/security-in-qubes/device-handling-security.md b/user/security-in-qubes/device-handling-security.md
index 233b1ab3..2301020f 100644
--- a/user/security-in-qubes/device-handling-security.md
+++ b/user/security-in-qubes/device-handling-security.md
@@ -71,4 +71,4 @@ Locking the screen (with a traditional password) does not solve the problem, bec
One possibility is to set up the screen locker to require an additional step to unlock (i.e., two-factor authentication).
One way to achieve this is to use a [YubiKey](/doc/YubiKey/), or some other hardware token, or even to manually enter a one-time password.
-Support for [two factor authentication](/news/2018/09/11/qubes-ctap-proxy/) was recently added, though there are [issues](https://github.com/QubesOS/qubes-issues/issues/4661).
+Support for [two factor authentication](/news/2018/09/11/qubes-u2f-proxy/) was recently added, though there are [issues](https://github.com/QubesOS/qubes-issues/issues/4661).
From 101cad161bfa303b5460f7becb1980e5cb28d7a2 Mon Sep 17 00:00:00 2001
From: unman
Date: Sat, 20 Apr 2024 13:31:58 +0000
Subject: [PATCH 122/332] Minimal templates - suggest ntpd in Debian minimal
templates
---
user/templates/minimal-templates.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 6fe840be..7940018a 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -242,8 +242,8 @@ list of packages to be installed):
- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates`
if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
-- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
- `qubes-core-agent-network-manager` `systemd-timesyncd`(or other NTP Service).
+- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`,
+ `qubes-core-agent-network-manager`, `ntpd` (or other NTP Service).
If your network devices need extra packages for a network VM, use the `lspci` command to identify the devices,
then find the package that provides necessary firmware and install it. If you
need utilities for debugging and analyzing network connections, install the
From 387619a113df3994e640934a30d8d6a318d52a28 Mon Sep 17 00:00:00 2001
From: "Dr. Gerhard Weck"
Date: Tue, 23 Apr 2024 12:20:11 +0200
Subject: [PATCH 123/332] Add information on manual download of QWT
---
user/templates/windows/qubes-windows-tools-4-1.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/user/templates/windows/qubes-windows-tools-4-1.md b/user/templates/windows/qubes-windows-tools-4-1.md
index 338af8af..59b0e58f 100644
--- a/user/templates/windows/qubes-windows-tools-4-1.md
+++ b/user/templates/windows/qubes-windows-tools-4-1.md
@@ -26,7 +26,7 @@ Qubes Windows Tools (QWT) are a set of programs and drivers that provide integra
- **Audio** - Audio support is available even without QWT installation if `qvm-features audio-model` is set as `ich6`
-**Note:** Due to the security problems described in [QSB-091](https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-091-2023.txt), installation of Qubes Windows Tools is currently blocked. Instead, a text file containing a warning is displayed. Currently, it is difficult to estimate the severity of the risks posed by the sources of the Xen drivers used in QWT possibly being compromised, so it was decided not to offer direct QWT installation until this problem could be treated properly. While Windows qubes are, in Qubes, generally not regarded as being very trustworthy, a possible compromise of the Xen drivers used in Qubes Windows Tools might create a risk for Xen or dom0 and thus be dangerous for Qubes itself. If you **understand** this risk and are **willing to take it**, you can still install the previous versions of Qubes Windows Tools, using the command
+**Note:** Due to the security problems described in [QSB-091](https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-091-2023.txt), installation of Qubes Windows Tools is currently blocked. Instead, a text file containing a warning is displayed. Currently, it is difficult to estimate the severity of the risks posed by the sources of the Xen drivers used in QWT possibly being compromised, so it was decided not to offer direct QWT installation until this problem could be treated properly. While Windows qubes are, in Qubes, generally not regarded as being very trustworthy, a possible compromise of the Xen drivers used in Qubes Windows Tools might create a risk for Xen or `dom0` and thus be dangerous for Qubes itself. This risk may be small or even non-existent, as stated in QSB-091. If you **understand** this risk and are **willing to take it**, you can still install the previous versions of Qubes Windows Tools, using the command
sudo qubes-dom0-update qubes-windows-tools-4.1.68
@@ -34,9 +34,9 @@ for Qubes R4.1.2, or
sudo qubes-dom0-update qubes-windows-tools-4.1.69
-for Qubes R4.2.0, respectively, instead of the command listed in step 1 of the installation described below. This will provide the .iso file to be presented as installation drive to the Windows qube in step 3 of the QWT installation.
+for Qubes R4.2.0, respectively, instead of the command listed in step 1 of the installation described below. This will provide the .iso file to be presented as an installation drive to the Windows qube in step 3 of the QWT installation.
-If you prefer to download the corresponding .rpm files for manual QWT installation, these are still available from the repositories (version [4.1.68-1](https://yum.qubes-os.org/r4.1/current/dom0/fc32/rpm/qubes-windows-tools-4.1.68-1.noarch.rpm) for Qubes R4.1.2 and version [4.1.69-1](https://yum.qubes-os.org/r4.2/current/dom0/fc37/rpm/qubes-windows-tools-4.1.69-1.fc37.noarch.rpm) for Qubes R4.2.0).
+If you prefer to download the corresponding .rpm files for manual QWT installation, these are still available from the repositories (version [4.1.68-1](https://yum.qubes-os.org/r4.1/current/dom0/fc32/rpm/qubes-windows-tools-4.1.68-1.noarch.rpm) for Qubes R4.1.2 and version [4.1.69-1](https://yum.qubes-os.org/r4.2/current/dom0/fc37/rpm/qubes-windows-tools-4.1.69-1.fc37.noarch.rpm) for Qubes R4.2.0). After downloading, copy the file to `dom0` as described in [How to copy from dom0](https://www.qubes-os.org/doc/how-to-copy-from-dom0/#copying-to-dom0) and install it via `sudo dnf install /path/to/rpmfile`. Now you can proceed according to step 3 of the description below.
**Warning**: These older versions of Qubes Windows Tools will be replaced during the next dom0 update by the current dummy version 4.1.70-1. This can be inhibited by appending the line `exclude=qubes-windows-tools` to the file `/etc/dnf/dnf.conf` in dom0. But this will also stop any further QWT updates - so be sure to remove this line when - hopefully - a new functional version 4.1.71-1 of Qubes Windows Tools will be made available!!!
From b6b621151c3a03ad490eb4fcfbe7a60abc9851cc Mon Sep 17 00:00:00 2001
From: "Dr. Gerhard Weck"
Date: Wed, 24 Apr 2024 14:52:14 +0200
Subject: [PATCH 124/332] Update app-menu-shortcut-troubleshooting.mdChange the
wine description for Qubes R4.2
---
.../app-menu-shortcut-troubleshooting.md | 21 ++-----------------
1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/user/troubleshooting/app-menu-shortcut-troubleshooting.md b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
index 718b5764..aafbbf63 100644
--- a/user/troubleshooting/app-menu-shortcut-troubleshooting.md
+++ b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
@@ -29,7 +29,7 @@ The above image shows that Windows HVMs are also supported (provided that Qubes
What if my application has not been automatically included in the list of available apps?
-----------------------------------------------------------------------------------------
-Some times applications may not have included a `.desktop` file and may not be detected by `qvm-sync-appmenus`.
+Sometimes applications may not have included a `.desktop` file and may not be detected by `qvm-sync-appmenus`.
Other times, you may want to make a web shortcut available from the Qubes start menu.
You can manually create new entries in the "available applications" list of shortcuts for all app qubes based on a template.
@@ -116,21 +116,4 @@ Examples: `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_M
Note that you can create a shortcut that points to a .desktop file in your app qube with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
-While this works well for standard applications, creating a menu entry for Windows application running under wine may need an additional step in order to establish the necessary environment in wine. Installing software under wine may create the needed `.desktop` file in the target Linux VM. This file is expected to be in the directory `~/.local/share/applications`, but it may be that it is stored in a subdirectory thereof, determined by the Windows menu structure, where it may not be found. The solution is to copy or move this file from its location to `~/.local/share/applications`. The name of this file has to be the name used in the `.desktop` file in dom0. So if the shortcut in dom0 points to `qvm-run -q -a --service -- personal qubes.StartApp+Excel`, the correspondig file in the AppVM has to be called `Excel.desktop`.
-
-If necessary, you can create the `.desktop` file neeeded to start the wine application manually. For Excel, e.g., it will look like this
-
-~~~
-[Desktop Entry]
-Version=1.0
-Type=Application
-Terminal=false
-X-Qubes-VmName=personal
-Icon=/usr/share/icons/hicolor/48x48/apps/Excel.png
-Name=Microsoft Excel
-Categories=X-Qubes-VM;
-Exec=env WINEPREFIX="/home/user/.wine" /usr/bin/wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/user/.wine/dosdevices/c:/users/user/Start\\ Menu/Programs/Microsoft\ Excel.lnk
-StartupWMClass=Excel.exe
-~~~
-
-The rather complicated line `Exec=...` points to an entry in the Windows menu structure calling Excel, not to the executable itself.
+While this works well for standard applications, creating a menu entry for Windows applications running under wine may need an additional step in order to establish the necessary environment in wine. Installing software under wine may create the needed `.desktop` file in the target Linux VM. If the name of this file contains spaces, it will not be found. The solution is to remove these spaces by renaming the desktop file accordingly. Refreshing the menu structure will then build working menu entries.
From 7b487c54b0680923acabc6e5f32f8098d1ae0e98 Mon Sep 17 00:00:00 2001
From: Karlo Bartha
Date: Thu, 25 Apr 2024 07:39:15 +0200
Subject: [PATCH 125/332] Update minimal-templates.md
add pipewire package name for >= QubesOS 4.2.x
---
user/templates/minimal-templates.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 7940018a..370694c8 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -135,7 +135,7 @@ list of packages to be installed):
- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc`
`gnome-keyring`.
-- Audio: `pulseaudio-qubes`.
+- Audio: `pulseaudio-qubes` (QubesOS version <= 4.1.x) `pipewire-qubes` (QubesOS >= 4.2.x).
- Networking: `qubes-core-agent-networking`, and whatever network tools
you want. N.B. minimal templates do not include any browser.
- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
From 7a15cd1a162564da3e18efc15a39291b76c57b5d Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin"
Date: Fri, 26 Apr 2024 08:00:00 +0000
Subject: [PATCH 126/332] Fix a few typos
---
developer/building/qubes-builder-details.md | 2 +-
developer/building/qubes-builder.md | 2 +-
developer/building/qubes-iso-building.md | 2 +-
developer/general/package-contributions.md | 2 +-
developer/services/qrexec-internals.md | 2 +-
developer/system/gui.md | 2 +-
introduction/issue-tracking.md | 2 +-
introduction/support.md | 2 +-
user/advanced-topics/bind-dirs.md | 2 +-
user/advanced-topics/disposable-customization.md | 2 +-
user/advanced-topics/standalones-and-hvms.md | 2 +-
user/advanced-topics/volume-backup-revert.md | 2 +-
user/hardware/certified-hardware.md | 2 +-
user/how-to-guides/how-to-use-block-storage-devices.md | 2 +-
user/security-in-qubes/firewall.md | 2 +-
user/troubleshooting/pci-troubleshooting.md | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/developer/building/qubes-builder-details.md b/developer/building/qubes-builder-details.md
index ad2b79f8..1f5e9f3f 100644
--- a/developer/building/qubes-builder-details.md
+++ b/developer/building/qubes-builder-details.md
@@ -14,7 +14,7 @@ title: Qubes builder details
Note: This information concerns the old Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be used for building Qubes R4.1 and later, and all related components.
Components Makefile.builder file
--------------------------------
diff --git a/developer/building/qubes-builder.md b/developer/building/qubes-builder.md
index 4f7b0291..31755705 100644
--- a/developer/building/qubes-builder.md
+++ b/developer/building/qubes-builder.md
@@ -13,7 +13,7 @@ title: Qubes builder
Note: These instructions concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be used for building Qubes R4.1 and later, and all related components.
**Note: See [ISO building instructions](/doc/qubes-iso-building/) for a streamlined overview on how to use the build system.**
diff --git a/developer/building/qubes-iso-building.md b/developer/building/qubes-iso-building.md
index ac075443..a8d6cd57 100644
--- a/developer/building/qubes-iso-building.md
+++ b/developer/building/qubes-iso-building.md
@@ -15,7 +15,7 @@ title: Qubes ISO building
Note: These instructions concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be be used for building Qubes R4.1 and later, and all related components.
+ only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be used for building Qubes R4.1 and later, and all related components.
Build Environment
diff --git a/developer/general/package-contributions.md b/developer/general/package-contributions.md
index f73c9bd2..f0f1af06 100644
--- a/developer/general/package-contributions.md
+++ b/developer/general/package-contributions.md
@@ -71,7 +71,7 @@ The review procedure is as follows:
1. Someone, S, wishes to make a change to a package, P.
2. S submits a fast-forwardable pull request against the fork of P's repo owned by [QubesOS-contrib](https://github.com/QubesOS-contrib).
3. The PM reviews the pull request.
- If the the pull request passes the PM's review, the PM adds a [signed](/doc/code-signing/) *comment* on the pull request stating that it has passed review.
+ If the pull request passes the PM's review, the PM adds a [signed](/doc/code-signing/) *comment* on the pull request stating that it has passed review.
(In cases in which S = PM, the PM can simply add a [signed](/doc/code-signing/) *tag* to the HEAD commit prior to submitting the pull request.)
If the pull request does not pass the PM's review, the PM leaves a comment on the pull request explaining why not.
4. The QCR reviews the pull request.
diff --git a/developer/services/qrexec-internals.md b/developer/services/qrexec-internals.md
index 72a2b8c1..8f0a10ac 100644
--- a/developer/services/qrexec-internals.md
+++ b/developer/services/qrexec-internals.md
@@ -251,6 +251,6 @@ It is a [socket-based Qubes RPC service](/doc/qrexec-socket-services/). Requests
There are two endpoints:
- `policy.Ask` - ask the user about whether to execute a given action
-- `policy.Notify` - notify the user about about an action.
+- `policy.Notify` - notify the user about an action.
See [qrexec-policy-agent.rst](https://github.com/QubesOS/qubes-core-qrexec/blob/master/Documentation/qrexec-policy-agent.rst) for protocol details.
diff --git a/developer/system/gui.md b/developer/system/gui.md
index ff2dc866..dfd04801 100644
--- a/developer/system/gui.md
+++ b/developer/system/gui.md
@@ -49,7 +49,7 @@ In the case of Qubes, `qubes-gui` does not transfer all changed pixels via vchan
and pass this to dom0 via the deprecated `MFNDUMP` message.
- New `qubes-gui` versions will rely on `qubes-drv` having allocated
memory using gntalloc, and then pass the grant table indexes gntalloc
- has chosen to the GUI daemon using using the `WINDOW_DUMP` message.
+ has chosen to the GUI daemon using the `WINDOW_DUMP` message.
Now, `qubes-guid` has to tell the dom0 Xorg server about the location of the buffer.
There is no supported way (e.g. Xorg extension) to do this zero-copy style.
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 80d6dd08..3296210e 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -67,7 +67,7 @@ There are three issue **types**: `T: bug`, `T: enhancement`, and `T: task`.
- `T: enhancement` --- Type: enhancement. A new feature that does not yet exist **or** improvement of existing functionality.
- `T: task` --- Type: task. An action item that is neither a bug nor an enhancement.
-Every open issue should have **exactly one** type. An open issue should not have more than one type, and it should not lack a type entirely. Bug reports are for problems in things that already exist. If something doesn't exist yet, but you think it ought to exist, then use `T: enhancement` instead. If something already exists, but you think it could be improved in some way, you should again use `T: enhancement`. `T: task` is for issues that fall under under neither `T: bug` nor `T: enhancement`.
+Every open issue should have **exactly one** type. An open issue should not have more than one type, and it should not lack a type entirely. Bug reports are for problems in things that already exist. If something doesn't exist yet, but you think it ought to exist, then use `T: enhancement` instead. If something already exists, but you think it could be improved in some way, you should again use `T: enhancement`. `T: task` is for issues that fall under neither `T: bug` nor `T: enhancement`.
#### Priority
diff --git a/introduction/support.md b/introduction/support.md
index 1d818d25..b12bb55f 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -419,7 +419,7 @@ account is **not** required. Any email address will work.) To post a message to
the list, address your email to `qubes-project@googlegroups.com`. If your post
does not appear immediately, please allow time for moderation to occur. To
unsubscribe, send a blank email to
-`qubes-project+unsubscribe@googlegroups.com`. This list also also has a
+`qubes-project+unsubscribe@googlegroups.com`. This list also has a
[traditional mail
archive](https://www.mail-archive.com/qubes-project@googlegroups.com/) and an
optional [Google Groups web
diff --git a/user/advanced-topics/bind-dirs.md b/user/advanced-topics/bind-dirs.md
index c1ecb418..acdc515d 100644
--- a/user/advanced-topics/bind-dirs.md
+++ b/user/advanced-topics/bind-dirs.md
@@ -60,7 +60,7 @@ In this example, we want to make `/var/lib/tor` persistent. Enter all of the fol
From now on, all files in the `/var/lib/tor` directory will persist across reboots.
-You can make make as many files or folders persist as you want simply by making multiple entries in the `50_user.conf` file, each on a separate line.
+You can make as many files or folders persist as you want simply by making multiple entries in the `50_user.conf` file, each on a separate line.
For example, if you added the file `/etc/tor/torrc` to the `binds` variable, any modifications to *that* file would also persist across reboots.
```
diff --git a/user/advanced-topics/disposable-customization.md b/user/advanced-topics/disposable-customization.md
index 86186de4..7590adb9 100644
--- a/user/advanced-topics/disposable-customization.md
+++ b/user/advanced-topics/disposable-customization.md
@@ -27,7 +27,7 @@ Additionally, if you want to have menu entries for starting applications in disp
[user@dom0 ~]$ qvm-features appmenus-dispvm 1
```
-**Note:** Application shortcuts that existed before setting this feature will not be updated automatically. Please go the the "Applications" tab in the qube's "Settings" dialog and unselect all existing shortcuts by clicking "<<", then click "OK" and close the dialog. Give it a few seconds time and then reopen and re-select all the shortcuts you want to see in the menu. See [this page](/doc/managing-appvm-shortcuts) for background information.
+**Note:** Application shortcuts that existed before setting this feature will not be updated automatically. Please go the "Applications" tab in the qube's "Settings" dialog and unselect all existing shortcuts by clicking "<<", then click "OK" and close the dialog. Give it a few seconds time and then reopen and re-select all the shortcuts you want to see in the menu. See [this page](/doc/managing-appvm-shortcuts) for background information.
## Security
diff --git a/user/advanced-topics/standalones-and-hvms.md b/user/advanced-topics/standalones-and-hvms.md
index 3664107b..f2420ffd 100644
--- a/user/advanced-topics/standalones-and-hvms.md
+++ b/user/advanced-topics/standalones-and-hvms.md
@@ -197,7 +197,7 @@ you would install it into a normal HVM. Generally, you should install in to the
first "system" disk. (Resize it as needed before starting installation.)
You can then create a new qube using the new template. If you use this Template
-as is, then any HVMs based on it it will effectively be disposables. All file
+as is, then any HVMs based on it will effectively be disposables. All file
system changes will be wiped when the HVM is shut down.
Please see [this
diff --git a/user/advanced-topics/volume-backup-revert.md b/user/advanced-topics/volume-backup-revert.md
index 50351107..85bb4062 100644
--- a/user/advanced-topics/volume-backup-revert.md
+++ b/user/advanced-topics/volume-backup-revert.md
@@ -42,7 +42,7 @@ qvm-volume config vmname:private revisions_to_keep 2
```
With the VM stopped, you may revert to an older snapshot of the private volume
-from the the above list of "Available revisions (for revert)", where the last
+from the above list of "Available revisions (for revert)", where the last
item on the list with the largest integer is the most recent snapshot:
```
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index dbe50dd3..a5ef3789 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -86,7 +86,7 @@ If you are a hardware vendor, you can have your hardware certified as compatible
**Note:** This section describes the requirements for hardware *certification*, *not* the requirements for *running* Qubes OS. For the latter, please see the [system requirements](/doc/system-requirements/). A brief list of the requirements described in this section is available [here](/doc/system-requirements/#qubes-certified-hardware).
-A basic requirement is that all Qubes-certified devices must be be available for purchase with Qubes OS preinstalled. Customers may be offered the option to select from a list of various operating systems (or no operating system at all) to be preinstalled, but Qubes OS must be on that list in order to maintain Qubes hardware certification.
+A basic requirement is that all Qubes-certified devices must be available for purchase with Qubes OS preinstalled. Customers may be offered the option to select from a list of various operating systems (or no operating system at all) to be preinstalled, but Qubes OS must be on that list in order to maintain Qubes hardware certification.
One of the most important security improvements introduced with the release of Qubes 4.0 was to replace paravirtualization (PV) technology with **hardware-enforced memory virtualization**, which recent processors have made possible thanks to so-called Second Level Address Translation ([SLAT](https://en.wikipedia.org/wiki/Second_Level_Address_Translation)), also known as [EPT](https://ark.intel.com/Search/FeatureFilter?productType=processors&ExtendedPageTables=true&MarketSegment=Mobile) in Intel parlance. SLAT (EPT) is an extension to Intel VT-x virtualization, which originally was capable of only CPU virtualization but not memory virtualization and hence required a complex Shadow Page Tables approach. We hope that embracing SLAT-based memory virtualization will allow us to prevent disastrous security bugs, such as the infamous [XSA-148](https://xenbits.xen.org/xsa/advisory-148.html), which --- unlike many other major Xen bugs --- regrettably did [affect](https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-022-2015.txt) Qubes OS. Consequently, we require SLAT support of all certified hardware beginning with Qubes OS 4.0.
diff --git a/user/how-to-guides/how-to-use-block-storage-devices.md b/user/how-to-guides/how-to-use-block-storage-devices.md
index 742ec369..5658682a 100644
--- a/user/how-to-guides/how-to-use-block-storage-devices.md
+++ b/user/how-to-guides/how-to-use-block-storage-devices.md
@@ -122,7 +122,7 @@ If you don't see anything that looks like your drive, run `sudo udevadm trigger
## Recovering From Premature Device Destruction
-If the you fail to detach the device before it's destroyed in the sourceVM (e.g. by physically detaching the thumbdrive), [there will be problems](https://github.com/QubesOS/qubes-issues/issues/1082).
+If you fail to detach the device before it's destroyed in the sourceVM (e.g. by physically detaching the thumbdrive), [there will be problems](https://github.com/QubesOS/qubes-issues/issues/1082).
To recover from this error state, in dom0 run
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index d4597e39..a94f087a 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -284,7 +284,7 @@ Note the IP addresses you will need, they will be required in the next steps.
For the following example, we assume that the physical interface ens6 in sys-net is on the local network 192.168.x.y with the IP 192.168.x.n, and that the IP address of sys-firewall is 10.137.1.z.
-In the sys-net VM's Terminal, the first step is to to define an ntables chain that will receive DNAT rules to relay the network traffic on a given port to the qube NetVM, we recommend to define a new chain for each destination qube to ease rules management:
+In the sys-net VM's Terminal, the first step is to define an ntables chain that will receive DNAT rules to relay the network traffic on a given port to the qube NetVM, we recommend to define a new chain for each destination qube to ease rules management:
```
nft add chain qubes custom-dnat-qubeDEST '{ type nat hook prerouting priority filter +1 ; policy accept; }'
diff --git a/user/troubleshooting/pci-troubleshooting.md b/user/troubleshooting/pci-troubleshooting.md
index 42d30254..6c121f10 100644
--- a/user/troubleshooting/pci-troubleshooting.md
+++ b/user/troubleshooting/pci-troubleshooting.md
@@ -104,7 +104,7 @@ While using the `no-strict-reset` flag, do not require PCI device to be reset be
qvm-pci attach --persistent --option permissive=true --option no-strict-reset=true sys-usb dom0:
~~~
-Be sure to replace `` with the BDF of your PCI device, which can be be obtained from running `qvm-pci`.
+Be sure to replace `` with the BDF of your PCI device, which can be obtained from running `qvm-pci`.
You can also configure strict reset directly from the Qubes interface by following these steps:
From 8805362897fa26b6a527cb3704fd547b4b51a82d Mon Sep 17 00:00:00 2001
From: "Dr. Gerhard Weck"
Date: Fri, 26 Apr 2024 10:47:38 +0200
Subject: [PATCH 127/332] Clarify renaming of desktop files
---
.../app-menu-shortcut-troubleshooting.md | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/user/troubleshooting/app-menu-shortcut-troubleshooting.md b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
index aafbbf63..a64a5d00 100644
--- a/user/troubleshooting/app-menu-shortcut-troubleshooting.md
+++ b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
@@ -101,8 +101,8 @@ $ rm -i ~/.local/share/applications/my-old-vm-*
Behind the scenes
-----------------
-`qvm-sync-appmenus` works by invoking *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain.
-This service enumerates installed applications and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates .desktop files in the app qube/template directory.
+`qvm-sync-appmenus` works by invoking the *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain.
+This service enumerates applications installed in that VM and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates `.desktop` files in the app qube/template directory of dom0.
For Linux VMs the service script is in `/etc/qubes-rpc/qubes.GetAppMenus`.
In Windows it's a PowerShell script located in `c:\Program Files\Invisible Things Lab\Qubes OS Windows Tools\qubes-rpc-services\get-appmenus.ps1` by default.
@@ -111,9 +111,11 @@ The list of installed applications for each app qube is stored in dom0's `~/.loc
Each menu entry is a file that follows the [.desktop file format](https://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html) with some wildcards (*%VMNAME%*, *%VMDIR%*).
Applications selected to appear in the menu are stored in `~/.local/share/qubes-appmenus//apps`.
-Actual command lines for the menu shortcuts involve `qvm-run` command which starts a process in another domain.
+Actual command lines for the menu shortcuts involve the `qvm-run` command which starts a process in another domain.
Examples: `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_Manager` or `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+firefox`
-Note that you can create a shortcut that points to a .desktop file in your app qube with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
+Note that you can create a shortcut that points to a `.desktop` file in your app qube with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
-While this works well for standard applications, creating a menu entry for Windows applications running under wine may need an additional step in order to establish the necessary environment in wine. Installing software under wine may create the needed `.desktop` file in the target Linux VM. If the name of this file contains spaces, it will not be found. The solution is to remove these spaces by renaming the desktop file accordingly. Refreshing the menu structure will then build working menu entries.
+While this works well for standard applications, creating a menu entry for Windows applications running under *wine* may need an additional step in order to establish the necessary environment in *wine*. Installing software under *wine* will create the needed `.desktop` file in the target Linux VM in the directory `~/.local/share/applications/wine/Programs/` or a subdirectory thereof, depending on the Windows menu structure seen under *wine*. If the name of this file contains spaces, it will not be found, because the `qvm-run` command is falsely seen as terminating at this space. The solution is to remove these spaces by renaming the `.desktop` file accordingly, e.g. by renaming `Microsoft Excel.desktop` to `Excel.desktop`. Refreshing the menu structure will then build working menu entries.
+
+**Note:** Applications installed under *wine* are installed in AppVMs, not in the template on which these AppVMs are based, as the file strcuture used by *wine* is stored under `~/.wine`, which is part of the persistent data of the AppVM and not inherited from its template.
From 6fb630189f0a88ba688ca83da41ed5b30986a1f2 Mon Sep 17 00:00:00 2001
From: Aidan Leuenberger <71840866+Ogyeet10@users.noreply.github.com>
Date: Sat, 27 Apr 2024 20:22:27 -0500
Subject: [PATCH 128/332] fixed typo
Qubes OS was misspelled as Qubes SO, fixed.
---
user/downloading-installing-upgrading/installation-guide.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/installation-guide.md b/user/downloading-installing-upgrading/installation-guide.md
index 7b755c34..acd5a9ec 100644
--- a/user/downloading-installing-upgrading/installation-guide.md
+++ b/user/downloading-installing-upgrading/installation-guide.md
@@ -118,7 +118,7 @@ From here, you can navigate the boot screen using the arrow keys on your keyboar
* Install Qubes OS
* Test this media and install Qubes OS
* Troubleshooting - verbose boot
-* Rescue a Qubes SO system
+* Rescue a Qubes OS system
* Install Qubes OS 4.2.1 using kernel-latest
Select the option to test this media and install Qubes OS.
From 661a2ca160c5f34b463385e34df8b6abcb9efb87 Mon Sep 17 00:00:00 2001
From: Ludovic Bellier
Date: Sun, 28 Apr 2024 09:32:24 +0000
Subject: [PATCH 129/332] Fix action/options policy separator
---
user/security-in-qubes/split-gpg.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/security-in-qubes/split-gpg.md b/user/security-in-qubes/split-gpg.md
index a10ca40f..8335d9e6 100644
--- a/user/security-in-qubes/split-gpg.md
+++ b/user/security-in-qubes/split-gpg.md
@@ -140,10 +140,10 @@ work-email work-gpg allow
where `work-email` is the Thunderbird + Enigmail app qube and `work-gpg` contains your GPG keys.
-You may also edit the qrexec policy file for Split GPG in order to tell Qubes your default gpg vm (qrexec prompts will appear with the gpg vm preselected as the target, instead of the user needing to type a name in manually). To do this, append `,default_target=` to `ask` in `/etc/qubes-rpc/policy/qubes.Gpg`. For the examples given on this page:
+You may also edit the qrexec policy file for Split GPG in order to tell Qubes your default gpg vm (qrexec prompts will appear with the gpg vm preselected as the target, instead of the user needing to type a name in manually). To do this, append `default_target=` to `ask` in `/etc/qubes-rpc/policy/qubes.Gpg`. For the examples given on this page:
```
-@anyvm @anyvm ask,default_target=work-gpg
+@anyvm @anyvm ask default_target=work-gpg
```
Note that, because this makes it easier to accept Split GPG's qrexec authorization prompts, it may decrease security if the user is not careful in reviewing presented prompts. This may also be inadvisable if there are multiple app qubes with Split GPG set up.
From 8552da57b7bbb8f2a3b7707e099864a051c8a197 Mon Sep 17 00:00:00 2001
From: Fl1tzi
Date: Wed, 1 May 2024 21:43:01 +0200
Subject: [PATCH 130/332] admin-api: add missing admin.vm.deviceclass.List
---
developer/services/admin-api.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/developer/services/admin-api.md b/developer/services/admin-api.md
index 8fa12417..0087bcaf 100644
--- a/developer/services/admin-api.md
+++ b/developer/services/admin-api.md
@@ -106,6 +106,7 @@ to set the policy using current mechanism.
| `admin.vm.firewall.Get` | vm | - | - | `\n` | rules syntax as in [firewall interface](/doc/vm-interface/#firewall-rules-in-4x) with addition of `expire=` and `comment=` options; `comment=` (if present) must be the last option
| `admin.vm.firewall.Set` | vm | - | `\n` | - | set firewall rules, see `admin.vm.firewall.Get` for syntax
| `admin.vm.firewall.Reload` | vm | - | - | - | force reload firewall without changing any rule
+| `admin.vm.deviceclass.List` | `dom0` | - | - | `\n` |
| `admin.vm.device..Attach` | vm | device | options | - | `device` is in form `+` optional options given in `key=value` format, separated with spaces; options can include `persistent=True` to "persistently" attach the device (default is temporary)
| `admin.vm.device..Detach` | vm | device | - | - | `device` is in form `+`
| `admin.vm.device..Set.persistent`| vm | device | `True`\|`False` | - | `device` is in form `+`
From 6df6dea5fd992178068cfd1baecb026e6b6b8ea5 Mon Sep 17 00:00:00 2001
From: "Dr. Gerhard Weck"
Date: Thu, 10 Aug 2023 13:26:20 +0200
Subject: [PATCH 131/332] Update how-to-organize-your-qubes.md Add an example
for a simple VM layout
Describe the VMs used by a teacher who has no time to build something complicated
---
.../how-to-organize-your-qubes.md | 58 +++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/user/how-to-guides/how-to-organize-your-qubes.md b/user/how-to-guides/how-to-organize-your-qubes.md
index 406d346d..c58411b2 100644
--- a/user/how-to-guides/how-to-organize-your-qubes.md
+++ b/user/how-to-guides/how-to-organize-your-qubes.md
@@ -425,6 +425,64 @@ templates and even her Bitcoin full node qube, but she'll skip them if she
doesn't have time or space, since she knows she can always recreate them again
later and download what she needs from the Internet.
+## John, the teacher
+
+John is a teacher at a high school, teaching mathematics and history. He is used
+to setting up his workstation but has not the time or inclination to dive deeper
+into technical details. So he has installed Qubes in a rather simple way mainly
+using the installation defaults and just adding a few well-documented features
+like Split GPG.
+
+[](/attachment/doc/Simple_Setup.png)
+
+- **One qube for surfing.** `untrusted` is just the standard qube coming with the Qubes
+installation, based on the standard Fedora template, but with Thunderbird removed.
+It is intended for surfing arbitrary locations and may be at risk from some websites.
+Consequently, it does not keep any valuable data and has no facilities to view or
+edit office documents.
+
+- **One offline qube for writing.** `work` is the qube used to edit documents – even
+MS office documents. It is based on an extended Fedora template containing additional
+software like LibreOffice, GIMP, Wine, and some Windows applications. It has no netVM
+and so the risk of an infected document contacting a hacker’s control server is minimized.
+
+- **One qube for access to trusted servers.** `personal` is used to access only trusted
+websites like home banking, and the firewall rules for this qube restrict it to these
+locations. It is based on the same extended Fedora template. John uses this qube for
+access to his mail server, too, but does not process any documents received by mail
+in this qube. Any office documents from this qube are only opened in disposables in order
+to reduce the risk of infection.
+
+- **One qube for preparing teaching material for his students.** `Windows` is the workhorse
+used to execute anything needed for teaching. It is based on a Windows 7 template with QWT
+installed as most of John’s students work with Windows PCs. In order to reduce the risks
+for such an AppVM, and possible risks caused by it, its internet access is limited, again
+by a firewall rule, to the servers providing material for teaching.
+
+- **One qube for protected access to sensible websites.** `whonix` is just the standard
+AppVM `anon-whonix` based on the `whonix-ws` coming with the Qubes installation. It is
+used for all accesses over Tor and could as well be replaced by a disposable. John, who is
+engaged in a project for helping mentally disabled people, uses this qube to avoid tracking
+his access to the project’s server.
+
+- **One offline qube for keeping the private PGP key.** `vault` is the key part of Split GPG,
+just as described in the Qubes documentation, keeping the private PGP key.
+
+- **One offline qube for permanent data storage.** `storage` finally is a qube based on the
+standard Debian template and, having no applications and no network access, it is used
+explicitly and only for permanent data storage, and it is the only qube whose data is regarded
+as valuable and worth keeping. The Fedora-based qubes might even be configured as disposables, and,
+if you are willing to accept the rather slow start of Windows, even the qube `Windows` might be
+created as a disposable.
+
+This is a rather simplistic design, intended to show that with a minimum effort a decent level
+of security can be reached, and it is a first implementation showing how John can compartmentalize
+his digital life, as described in the Qubes documentation. Once the templates are are set up with
+the necessary software like LibreOffice and
+Split GPG is installed, setting up this structure takes only a few minutes, but it is much more
+secure than, for instance, a Windows 10 installation based on the available hardening studies,
+which are quite useless for a practical environment, especially for a user like John.
+
## Conclusion
From cbd8cde8f1925060c04c418fa0b47332c6b665bc Mon Sep 17 00:00:00 2001
From: unman
Date: Sat, 4 May 2024 02:45:29 +0000
Subject: [PATCH 132/332] Fix minor typos
---
.../app-menu-shortcut-troubleshooting.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/user/troubleshooting/app-menu-shortcut-troubleshooting.md b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
index a64a5d00..4b918736 100644
--- a/user/troubleshooting/app-menu-shortcut-troubleshooting.md
+++ b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
@@ -16,11 +16,11 @@ Clicking on such shortcut runs the assigned application in its app qube.

-To make applications newly installed via the OS's package manager show up in the menu, use the `qvm-sync-appmenus` command (Linux VMs do this automatically):
+To make applications newly installed via the OS's package manager show up in the menu, use the `qvm-sync-appmenus` command (Linux qubes do this automatically):
`qvm-sync-appmenus vmname`
-After that, select the *Add more shortcuts* entry in the VM's submenu to customize which applications are shown:
+After that, select the *Add more shortcuts* entry in the qube's submenu to customize which applications are shown:

@@ -75,7 +75,7 @@ If you only want to create a shortcut for a single app qube, you can create a cu
~~~
-What about applications in DispVMs?
+What about applications in disposables?
-----------------------------------
[See here](/doc/disposable-customization/).
@@ -102,9 +102,9 @@ Behind the scenes
-----------------
`qvm-sync-appmenus` works by invoking the *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain.
-This service enumerates applications installed in that VM and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates `.desktop` files in the app qube/template directory of dom0.
+This service enumerates applications installed in that qube and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates `.desktop` files in the app qube/template directory of dom0.
-For Linux VMs the service script is in `/etc/qubes-rpc/qubes.GetAppMenus`.
+For Linux qubes the service script is in `/etc/qubes-rpc/qubes.GetAppMenus`.
In Windows it's a PowerShell script located in `c:\Program Files\Invisible Things Lab\Qubes OS Windows Tools\qubes-rpc-services\get-appmenus.ps1` by default.
The list of installed applications for each app qube is stored in dom0's `~/.local/share/qubes-appmenus//apps.templates`.
@@ -116,6 +116,6 @@ Examples: `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_M
Note that you can create a shortcut that points to a `.desktop` file in your app qube with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
-While this works well for standard applications, creating a menu entry for Windows applications running under *wine* may need an additional step in order to establish the necessary environment in *wine*. Installing software under *wine* will create the needed `.desktop` file in the target Linux VM in the directory `~/.local/share/applications/wine/Programs/` or a subdirectory thereof, depending on the Windows menu structure seen under *wine*. If the name of this file contains spaces, it will not be found, because the `qvm-run` command is falsely seen as terminating at this space. The solution is to remove these spaces by renaming the `.desktop` file accordingly, e.g. by renaming `Microsoft Excel.desktop` to `Excel.desktop`. Refreshing the menu structure will then build working menu entries.
+While this works well for standard applications, creating a menu entry for Windows applications running under *wine* may need an additional step in order to establish the necessary environment in *wine*. Installing software under *wine* will create the needed `.desktop` file in the target Linux qube in the directory `~/.local/share/applications/wine/Programs/` or a subdirectory thereof, depending on the Windows menu structure seen under *wine*. If the name of this file contains spaces, it will not be found, because the `qvm-run` command is falsely seen as terminating at this space. The solution is to remove these spaces by renaming the `.desktop` file accordingly, e.g. by renaming `Microsoft Excel.desktop` to `Excel.desktop`. Refreshing the menu structure will then build working menu entries.
-**Note:** Applications installed under *wine* are installed in AppVMs, not in the template on which these AppVMs are based, as the file strcuture used by *wine* is stored under `~/.wine`, which is part of the persistent data of the AppVM and not inherited from its template.
+**Note:** Applications installed under *wine* are installed in AppVMs, not in the template on which these AppVMs are based, as the file structure used by *wine* is stored under `~/.wine`, which is part of the persistent data of the AppVM and not inherited from its template.
From 28b68b04068381fd8457b7fb60b7c50fe5733e3b Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Sat, 11 May 2024 03:18:21 -0700
Subject: [PATCH 133/332] Fix title
Since we don't publish release notes for patch releases, I suppose each
major or minor release's notes should apply to all releases in that
release series, in which case a patch number should not be specified in
the version number in the title.
---
developer/releases/4_2/release-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 9e41bbf0..10fd2d1b 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -1,6 +1,6 @@
---
layout: doc
-title: Qubes OS 4.2.0 release notes
+title: Qubes OS 4.2 release notes
permalink: /doc/releases/4.2/release-notes/
---
From 6ee8ac5bb191b80e1375ec771f42de2612b089e1 Mon Sep 17 00:00:00 2001
From: Tai Lam <47955724+taivlam@users.noreply.github.com>
Date: Tue, 14 May 2024 16:56:13 +0000
Subject: [PATCH 134/332] Fix typo in split-gpg.md
Add missing period
---
user/security-in-qubes/split-gpg.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/security-in-qubes/split-gpg.md b/user/security-in-qubes/split-gpg.md
index 8335d9e6..eeb6f92b 100644
--- a/user/security-in-qubes/split-gpg.md
+++ b/user/security-in-qubes/split-gpg.md
@@ -32,7 +32,7 @@ While this might be true (unless the attacker can find a usually-very-expensive-
However, there is usually nothing that could stop the attacker from requesting the smart card to perform decryption of all the user documents the attacker has found or need to decrypt.
In other words, while protecting the user's private key is an important task, we should not forget that ultimately it is the user data that are to be protected and that the smart card chip has no way of knowing the requests to decrypt documents are now coming from the attacker's script and not from the user sitting in front of the monitor.
(Similarly the smart card doesn't make the process of digitally signing a document or a transaction in any way more secure -- the user cannot know what the chip is really signing.
-Unfortunately this problem of signing reliability is not solvable by Split GPG)
+Unfortunately this problem of signing reliability is not solvable by Split GPG.)
With Qubes Split GPG this problem is drastically minimized, because each time the key is to be used the user is asked for consent (with a definable time out, 5 minutes by default), plus is always notified each time the key is used via a tray notification from the domain where GPG backend is running.
This way it would be easy to spot unexpected requests to decrypt documents.
From bf13e5866c848618419c84f66a12bee49cdf78aa Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Wed, 15 May 2024 02:04:13 -0700
Subject: [PATCH 135/332] Remove Fedora 38 from supported template releases
(EOL)
https://www.qubes-os.org/news/2024/02/13/fedora-39-templates-available-fedora-38-approaching-eol/
---
user/downloading-installing-upgrading/supported-releases.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 5bbcf993..a0f94e94 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -57,8 +57,8 @@ It is the responsibility of each distribution to clearly notify its users in adv
| Qubes OS | Fedora | Debian |
| ----------- | ------ | ------ |
-| Release 4.1 | 38, 39 | 11, 12 |
-| Release 4.2 | 38, 39 | 12 |
+| Release 4.1 | 39 | 11, 12 |
+| Release 4.2 | 39 | 12 |
### Note on Debian support
From f071c5698ce8c52c89b377dfea8d94539e9f9971 Mon Sep 17 00:00:00 2001
From: Ben Grande
Date: Wed, 15 May 2024 23:59:30 +0200
Subject: [PATCH 136/332] Document tags and features in pillar
For: https://github.com/QubesOS/qubes-mgmt-salt-base/pull/17
---
user/advanced-topics/salt.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/user/advanced-topics/salt.md b/user/advanced-topics/salt.md
index 8ea97e9c..2aa2c124 100644
--- a/user/advanced-topics/salt.md
+++ b/user/advanced-topics/salt.md
@@ -555,6 +555,17 @@ Additional pillar data is available to ease targeting configurations (for exampl
**Note:** This list is subject to change in future releases.
+### `qubes:features`
+
+Features the qube has. Only some values are included:
+
+- `service.*` - services enabled or disabled in the qube
+- `vm-config.*` - features also exposed to qubesdb
+
+### `qubes:tags`
+
+Tags the qube has.
+
### `qubes:type`
qube type. Possible values:
From 7598bbe1569fbdf4522c13a2703199452f9a96f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
Date: Tue, 21 May 2024 16:36:00 +0200
Subject: [PATCH 137/332] Various formatting fixes
---
developer/debugging/vm-interface.md | 2 +-
developer/services/dom0-secure-updates.md | 4 ++--
user/advanced-topics/managing-vm-kernels.md | 2 +-
user/advanced-topics/standalones-and-hvms.md | 2 +-
user/security-in-qubes/split-gpg.md | 4 ++--
user/templates/windows/qubes-windows-tools-4-0.md | 4 ++--
user/templates/windows/qubes-windows-tools-4-1.md | 4 ++--
7 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/developer/debugging/vm-interface.md b/developer/debugging/vm-interface.md
index 9c54619d..730c76e7 100644
--- a/developer/debugging/vm-interface.md
+++ b/developer/debugging/vm-interface.md
@@ -28,7 +28,7 @@ Qubes VM have some settings set by dom0 based on VM settings. There are multiple
- `full` - all disks
- `rw-only` - only `/rw` disk
- `none` - none
-- `/qubes-timezone - name of timezone based on dom0 timezone. For example `Europe/Warsaw`
+- `/qubes-timezone` - name of timezone based on dom0 timezone. For example `Europe/Warsaw`
- `/qubes-keyboard` (deprecated in R4.1) - keyboard layout based on dom0 layout. Its syntax is suitable for `xkbcomp` command (after expanding escape sequences like `\n` or `\t`). This is meant only as some default value, VM can ignore this option and choose its own keyboard layout (this is what keyboard setting from Qubes Manager does). This entry is created as part of gui-daemon initialization (so not available when gui-daemon disabled, or not started yet).
- `/keyboard-layout` - keyboard layout based on GuiVM layout. Its syntax can be `layout+variant+options`, `layout+variant`, `layout++options` or simply `layout`. For example, `fr+oss`, `pl++compose:caps` or `fr`. This is meant only as some default value, VM can ignore this option and choose its own keyboard layout (this is what keyboard setting from Qubes Manager does).
- `/qubes-debug-mode` - flag whether VM has debug mode enabled (qvm-prefs setting). One of `1`, `0`
diff --git a/developer/services/dom0-secure-updates.md b/developer/services/dom0-secure-updates.md
index cc2a4d75..ad922a88 100644
--- a/developer/services/dom0-secure-updates.md
+++ b/developer/services/dom0-secure-updates.md
@@ -33,11 +33,11 @@ Keeping Dom0 not connected to any network makes it hard, however, to provide upd
The update process is initiated by [qubes-dom0-update script](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qubes-dom0-update), running in Dom0.
-Updates (\*.rpm files) are checked and downloaded by UpdateVM, which by default is the same as the firewall VM, but can be configured to be any other, network-connected VM. This is done by [qubes-download-dom0-updates.sh script](https://github.com/QubesOS/qubes-core-agent-linux/blob/release2/misc/qubes-download-dom0-updates.sh) (this script is executed using qrexec by the previously mentioned qubes-dom0-update). Note that we assume that this script might get compromised and fetch maliciously compromised downloads -- this is not a problem as Dom0 verifies digital signatures on updates later. The downloaded rpm files are placed in a ~~~/var/lib/qubes/dom0-updates~~~ directory on UpdateVM filesystem (again, they might get compromised while being kept there, still this isn't a problem). This directory is passed to yum using the ~~~--installroot=~~~ option.
+Updates (`*.rpm` files) are checked and downloaded by UpdateVM, which by default is the same as the firewall VM, but can be configured to be any other, network-connected VM. This is done by [qubes-download-dom0-updates.sh script](https://github.com/QubesOS/qubes-core-agent-linux/blob/release2/misc/qubes-download-dom0-updates.sh) (this script is executed using qrexec by the previously mentioned qubes-dom0-update). Note that we assume that this script might get compromised and fetch maliciously compromised downloads -- this is not a problem as Dom0 verifies digital signatures on updates later. The downloaded rpm files are placed in a ~~~/var/lib/qubes/dom0-updates~~~ directory on UpdateVM filesystem (again, they might get compromised while being kept there, still this isn't a problem). This directory is passed to yum using the ~~~--installroot=~~~ option.
Once updates are downloaded, the update script that runs in UpdateVM requests an RPM service [qubes.ReceiveUpdates](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qubes.ReceiveUpdates) to be executed in Dom0. This service is implemented by [qubes-receive-updates script](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qubes-receive-updates) running in Dom0. The Dom0's qubes-dom0-update script (which originally initiated the whole update process) waits until qubes-receive-updates finished.
-The qubes-receive-updates script processes the untrusted input from Update VM: it first extracts the received \*.rpm files (that are sent over qrexec data connection) and then verifies digital signature on each file. The qubes-receive-updates script is a security-critical component of the Dom0 update process (as is the [qfile-dom0-unpacker.c](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qfile-dom0-unpacker.c) and the rpm utility, both used by the qubes-receive-updates for processing the untrusted input).
+The qubes-receive-updates script processes the untrusted input from Update VM: it first extracts the received `*.rpm` files (that are sent over qrexec data connection) and then verifies digital signature on each file. The qubes-receive-updates script is a security-critical component of the Dom0 update process (as is the [qfile-dom0-unpacker.c](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qfile-dom0-unpacker.c) and the rpm utility, both used by the qubes-receive-updates for processing the untrusted input).
Once qubes-receive-updates finished unpacking and verifying the updates, the updates are placed in ``qubes-receive-updates`` directory in Dom0 filesystem. Those updates are now trusted. Dom0 is configured (see /etc/yum.conf in Dom0) to use this directory as a default (and only) [yum repository](https://github.com/QubesOS/qubes-core-admin-linux/blob/release2/dom0-updates/qubes-cached.repo).
diff --git a/user/advanced-topics/managing-vm-kernels.md b/user/advanced-topics/managing-vm-kernels.md
index 24d2be6d..b25f78fb 100644
--- a/user/advanced-topics/managing-vm-kernels.md
+++ b/user/advanced-topics/managing-vm-kernels.md
@@ -313,7 +313,7 @@ Go to dom0 -> Qubes VM Manger -> right click on the VM -> Qube settings -> Advan
Depends on `Virtualization` mode setting:
* `Virtualization` mode `PV`: Possible, however use of `Virtualization` mode `PV` mode is discouraged for security purposes.
- * If you require `Virtualization` mode `PV` mode, install `grub2-xen-pvh` in dom0. This can be done by running command `sudo qubes-dom0-update pvgrub2-pvh in dom0.
+ * If you require `Virtualization` mode `PV` mode, install `grub2-xen-pvh` in dom0. This can be done by running command `sudo qubes-dom0-update pvgrub2-pvh` in dom0.
* `Virtualization` mode `PVH`: Possible.
* `Virtualization` mode `HVM`: Possible.
diff --git a/user/advanced-topics/standalones-and-hvms.md b/user/advanced-topics/standalones-and-hvms.md
index f2420ffd..198dab42 100644
--- a/user/advanced-topics/standalones-and-hvms.md
+++ b/user/advanced-topics/standalones-and-hvms.md
@@ -34,7 +34,7 @@ virtualization extensions of the host CPU. These are typically contrasted with
Paravirtualized (PV) VMs.
HVMs allow you to create qubes based on any OS for which you have an
-installation ISO, so you can easily have qubes running Windows, \*BSD, or any
+installation ISO, so you can easily have qubes running Windows, `*BSD`, or any
Linux distribution. You can also use HVMs to run "live" distros.
By default, every qube runs in PVH mode (which has security advantages over
diff --git a/user/security-in-qubes/split-gpg.md b/user/security-in-qubes/split-gpg.md
index 8335d9e6..58f2c1aa 100644
--- a/user/security-in-qubes/split-gpg.md
+++ b/user/security-in-qubes/split-gpg.md
@@ -361,10 +361,10 @@ Once the master secret key is in the `work-email` VM, the attacker could simply
In the alternative setup described in this section (i.e., the subkey setup), even an attacker who manages to gain access to the `work-gpg` VM will not be able to obtain the user's master secret key since it is simply not there.
Rather, the master secret key remains in the `vault` VM, which is extremely unlikely to be compromised, since nothing is ever copied or transferred into it.
-\* The attacker might nonetheless be able to leak the secret subkeys from the `work-gpg` VM in the manner described above, but even if this is successful, the secure master secret key can simply be used to revoke the compromised subkeys and to issue new subkeys in their place.
+[^a-note] The attacker might nonetheless be able to leak the secret subkeys from the `work-gpg` VM in the manner described above, but even if this is successful, the secure master secret key can simply be used to revoke the compromised subkeys and to issue new subkeys in their place.
(This is significantly less devastating than having to create a new *master* keypair.)
-\*In order to gain access to the `vault` VM, the attacker would require the use of, e.g., a general Xen VM escape exploit or a [signed, compromised package which is already installed in the template](/doc/templates/#trusting-your-templates) upon which the `vault` VM is based.
+[^a-note]: In order to gain access to the `vault` VM, the attacker would require the use of, e.g., a general Xen VM escape exploit or a [signed, compromised package which is already installed in the template](/doc/templates/#trusting-your-templates) upon which the `vault` VM is based.
### Subkey Tutorials and Discussions
diff --git a/user/templates/windows/qubes-windows-tools-4-0.md b/user/templates/windows/qubes-windows-tools-4-0.md
index 0c4e2443..830020c7 100644
--- a/user/templates/windows/qubes-windows-tools-4-0.md
+++ b/user/templates/windows/qubes-windows-tools-4-0.md
@@ -270,7 +270,7 @@ Qubes Windows Tools (QWT for short) contain several components than can be enabl
- Xen PV Disk Drivers: paravirtual storage drivers.
- Xen PV Network Drivers: paravirtual network drivers.
- Qubes Core Agent: qrexec agent and services. Needed for proper integration with Qubes.
- - Move user profiles: user profile directory (c:\users) is moved to VM's private disk backed by private.img file in dom0 (useful mainly for HVM templates).
+ - Move user profiles: user profile directory (`c:\users`) is moved to VM's private disk backed by private.img file in dom0 (useful mainly for HVM templates).
- Qubes GUI Agent: video driver and gui agent that enable seamless showing of Windows applications on the secure Qubes desktop.
- Disable UAC: User Account Control may interfere with QWT and doesn't really provide any additional benefits in Qubes environment.
@@ -331,7 +331,7 @@ If the VM is inaccessible (doesn't respond to qrexec commands, gui is not functi
Safe Mode should at least give you access to logs (see above).
-**Please include appropriate logs when reporting bugs/problems.** Starting from version 2.4.2 logs contain QWT version, but if you're using an earlier version be sure to mention which one. If the OS crashes (BSOD) please include the BSOD code and parameters in your bug report. The BSOD screen should be visible if you run the VM in debug mode (`qvm-start --debug vmname`). If it's not visible or the VM reboots automatically, try to start Windows in safe mode (see above) and 1) disable automatic restart on BSOD (Control Panel - System - Advanced system settings - Advanced - Startup and recovery), 2) check the system event log for BSOD events. If you can, send the `memory.dmp` dump file from c:\Windows.
+**Please include appropriate logs when reporting bugs/problems.** Starting from version 2.4.2 logs contain QWT version, but if you're using an earlier version be sure to mention which one. If the OS crashes (BSOD) please include the BSOD code and parameters in your bug report. The BSOD screen should be visible if you run the VM in debug mode (`qvm-start --debug vmname`). If it's not visible or the VM reboots automatically, try to start Windows in safe mode (see above) and 1) disable automatic restart on BSOD (Control Panel - System - Advanced system settings - Advanced - Startup and recovery), 2) check the system event log for BSOD events. If you can, send the `memory.dmp` dump file from `c:\Windows`.
Xen logs (/var/log/xen/console/guest-*) are also useful as they contain pvdrivers diagnostic output.
If a specific component is malfunctioning, you can increase its log verbosity as explained above to get more troubleshooting information. Below is a list of components:
diff --git a/user/templates/windows/qubes-windows-tools-4-1.md b/user/templates/windows/qubes-windows-tools-4-1.md
index 59b0e58f..d02f2dbf 100644
--- a/user/templates/windows/qubes-windows-tools-4-1.md
+++ b/user/templates/windows/qubes-windows-tools-4-1.md
@@ -263,7 +263,7 @@ Windows qubes can be used as disposables, like any other Linux-based qubes. On c
- Type `shell:startup`.
- An explorer window will open, which is positioned to the `Autostart` folder.
- Right-click and select the option "New -> Link".
- - Select `C:\Windows\System32\CMD.exe`as executable.
+ - Select `C:\Windows\System32\CMD.exe` as executable.
- Name the link, e.g. as `Command Prompt`.
- Close the Window with `OK`.
- Shut down this AppVM.
@@ -273,7 +273,7 @@ Windows qubes can be used as disposables, like any other Linux-based qubes. On c
- Still in the Advanced tab, select your Windows qube as its own `Default disposable template`. Alternatively, in dom0 execute the command `qvm-prefs default_dispvm `.
- Close the Qube Manager by clicking `OK`.
-Now you should have a menu `Disposable: ` containing the applications that can be started in a disposable Windows VM. If you set the newly created and configured Windows VM as `Default disposable template`for any other Windows- (or Linux-) based qube, this qube can use the Windows-based dispvm like any other disposable.
+Now you should have a menu `Disposable: ` containing the applications that can be started in a disposable Windows VM. If you set the newly created and configured Windows VM as `Default disposable template` for any other Windows- (or Linux-) based qube, this qube can use the Windows-based dispvm like any other disposable.
For further information on usage of disposables, see [How to use disposables](/doc/how-to-use-disposables/).
From b8f24e762e998858f1ff1a9693933479f779ff97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
Date: Tue, 21 May 2024 16:36:12 +0200
Subject: [PATCH 138/332] Remove obsolete EFI config (xen.cfg) section
Grub is used for both for a long time already
---
.../how-to-install-software-in-dom0.md | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/user/advanced-topics/how-to-install-software-in-dom0.md b/user/advanced-topics/how-to-install-software-in-dom0.md
index ddd7f869..b7040a6c 100644
--- a/user/advanced-topics/how-to-install-software-in-dom0.md
+++ b/user/advanced-topics/how-to-install-software-in-dom0.md
@@ -209,23 +209,7 @@ to do a lot of work yourself](https://groups.google.com/d/msg/qubes-users/m8sWoy
This section describes changing the default kernel in dom0. It is sometimes
needed if you have upgraded to a newer kernel and are having problems booting,
-for example. The procedure varies depending on if you are booting with UEFI or
-grub. On the next kernel update, the default will revert to the newest.
-
-### EFI
-
-~~~
-sudo nano /boot/efi/EFI/qubes/xen.cfg
-~~~
-
-In the `[global]` section at the top, change the `default=` line to match one
-of the three boot entries listed below. For example:
-
-~~~
-default=4.19.67-1.pvops.qubes.x86_64
-~~~
-
-### Grub2
+for example. On the next kernel update, the default will revert to the newest.
~~~
sudo nano /etc/default/grub
From c600b5495d472664bfaf0064080c3189e3c6916b Mon Sep 17 00:00:00 2001
From: Pierre Alain
Date: Tue, 28 May 2024 16:44:52 +0200
Subject: [PATCH 139/332] initramfs is optional (qubes-core-admin#586)
---
user/advanced-topics/managing-vm-kernels.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/advanced-topics/managing-vm-kernels.md b/user/advanced-topics/managing-vm-kernels.md
index b25f78fb..7303a158 100644
--- a/user/advanced-topics/managing-vm-kernels.md
+++ b/user/advanced-topics/managing-vm-kernels.md
@@ -224,7 +224,7 @@ Kernel for a VM is stored in `/var/lib/qubes/vm-kernels/KERNEL_VERSION` director
* `modules.img` - ext4 filesystem image containing Linux kernel modules (to be mounted at `/lib/modules`); additionally it should contain a copy of `vmlinuz` and `initramfs` in its root directory (for loading by qemu inside stubdomain)
* `default-kernelopts-common.txt` - default kernel options, in addition to those specified with `kernelopts` qube property (can be disabled with `no-default-kernelopts` feature)
-All the files besides `vmlinuz` and `initramfs` are optional in Qubes R4.0 or newer.
+All the files besides `vmlinuz` are optional in Qubes R4.2 or newer.
## Using kernel installed in the VM
From 36c283d209809a3122f2e65df75bcf217dc5dc22 Mon Sep 17 00:00:00 2001
From: deeplow <47065258+deeplow@users.noreply.github.com>
Date: Thu, 30 May 2024 17:09:12 -0400
Subject: [PATCH 140/332] vm-interface.md: add missing entry
/qubes-base-template
---
developer/debugging/vm-interface.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/developer/debugging/vm-interface.md b/developer/debugging/vm-interface.md
index 730c76e7..dc33827c 100644
--- a/developer/debugging/vm-interface.md
+++ b/developer/debugging/vm-interface.md
@@ -22,6 +22,7 @@ Qubes VM have some settings set by dom0 based on VM settings. There are multiple
### Keys exposed by dom0 to VM
+- `/qubes-base-template` - base template
- `/qubes-vm-type` - VM type, the same as `type` field in `qvm-prefs`. One of `AppVM`, `ProxyVM`, `NetVM`, `TemplateVM`, `HVM`, `TemplateHVM`
- `/qubes-vm-updatable` - flag whether VM is updatable (whether changes in root.img will survive VM restart). One of `True`, `False`
- `/qubes-vm-persistence` - what data do persist between VM restarts:
@@ -33,7 +34,7 @@ Qubes VM have some settings set by dom0 based on VM settings. There are multiple
- `/keyboard-layout` - keyboard layout based on GuiVM layout. Its syntax can be `layout+variant+options`, `layout+variant`, `layout++options` or simply `layout`. For example, `fr+oss`, `pl++compose:caps` or `fr`. This is meant only as some default value, VM can ignore this option and choose its own keyboard layout (this is what keyboard setting from Qubes Manager does).
- `/qubes-debug-mode` - flag whether VM has debug mode enabled (qvm-prefs setting). One of `1`, `0`
- `/qubes-service/SERVICE_NAME` - subtree for VM services controlled from dom0 (using the `qvm-service` command or Qubes Manager). One of `1`, `0`. Note that not every service will be listed here, if entry is missing, it means "use VM default". A list of currently supported services is in the `qvm-service` man page.
-- `/qubes-netmask` - network mask (only when VM has netvm set); currently hardcoded "255.255.255.0"
+- `/qubes-netm ask` - network mask (only when VM has netvm set); currently hardcoded "255.255.255.0"
- `/qubes-ip` - IP address for this VM (only when VM has netvm set)
- `/qubes-gateway` - default gateway IP (only when VM has netvm set); VM should add host route to this address directly via eth0 (or whatever default interface name is)
- `/qubes-primary-dns` - primary DNS address (only when VM has netvm set)
From be4bbda177b69d1187891087594eed59f4ae37eb Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 13:08:36 +0200
Subject: [PATCH 141/332] add newline for better rst conversion
---
introduction/screenshots.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/introduction/screenshots.md b/introduction/screenshots.md
index 1f4b04d0..36aea7f3 100644
--- a/introduction/screenshots.md
+++ b/introduction/screenshots.md
@@ -61,6 +61,7 @@ Qubes is all about seamless integration from the user’s point of view. Here yo
[](/attachment/doc/r4.0-manager-and-sysnet-network-prompt.png)
All the networking runs in a special, unprivileged NetVM. (Notice the red frame around the Network Manager dialog box on the screen above.) This means that in the event that your network card driver, Wi-Fi stack, or DHCP client is compromised, the integrity of the rest of the system will not be affected! This feature requires Intel VT-d or AMD IOMMU hardware (e.g., Core i5/i7 systems)
+
* * * * *
[](/attachment/doc/r4.0-software-update.png)
From d04ee197c95d184ea462d9aa6b13a1acfd93e527 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 14:32:45 +0200
Subject: [PATCH 142/332] add newlines for better rst conversion
---
introduction/issue-tracking.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
index 3296210e..13ebb449 100644
--- a/introduction/issue-tracking.md
+++ b/introduction/issue-tracking.md
@@ -95,10 +95,12 @@ Meta-issues must abide by the following rules:
- Only members of the core team may create meta-issues (or convert existing issues into meta-issues).
+
Rationale: The purpose of meta-issues is to track the development of certain features that fit into the overall goals of the Qubes OS Project, which requires making informed project-management decisions with the approval of the project lead.
- Meta-issues must be [locked](https://docs.github.com/en/communities/moderating-comments-and-conversations/locking-conversations).
+
Rationale: One of the historical problems we've experienced with meta-issues (and one of the reasons they were discouraged for a long time) is that each meta-issue tends to turn into a discussion thread that becomes hopelessly long to the point where the person who is supposed to work on it has no idea what is supposed to be done or where to start, and it eventually just gets closed. Locking is intended to prevent that from happening again.
- Meta-issues must have informative descriptions, not just lists of issues. In particular, each meta-issue should explain its goal, what is in scope, and what the relevant categories and priorities are.
From 0f1268e25e12d6d7f613f380daddaf9cd856c039 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 14:33:23 +0200
Subject: [PATCH 143/332] Remove space for better rst conversion
---
introduction/faq.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/introduction/faq.md b/introduction/faq.md
index 2258ee1b..dd34b511 100644
--- a/introduction/faq.md
+++ b/introduction/faq.md
@@ -144,7 +144,7 @@ Briefly, here are some of the main pros and cons of this approach relative to Qu
(For example, you might find it natural to lock your secure laptop in a safe when you take your unsecure laptop out with you.)
- Cons
+ Cons
- Physical separation can be cumbersome and expensive, since we may have to obtain and set up a separate physical machine for each security level we need.
From 20972f27981f7b1a7c262f541d2bfa52fa52e0b6 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 16:03:52 +0200
Subject: [PATCH 144/332] add newline for better rst conversion
---
introduction/support.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/introduction/support.md b/introduction/support.md
index b12bb55f..a21b73cf 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -515,6 +515,7 @@ news.
## Chat
If you'd like to chat, join us on
+
- the `#qubes` channel on `irc.libera.chat` or
- the `#qubes:invisiblethingslab.com` matrix channel.
From 6cf2fd5ea1ef85a439036137218a9a62c82c1f54 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 16:38:24 +0200
Subject: [PATCH 145/332] add new line for better rst conv
---
.../backup-emergency-restore-v3.md | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/user/how-to-guides/backup-emergency-restore-v3.md b/user/how-to-guides/backup-emergency-restore-v3.md
index 2b54406f..1b47ee06 100644
--- a/user/how-to-guides/backup-emergency-restore-v3.md
+++ b/user/how-to-guides/backup-emergency-restore-v3.md
@@ -55,6 +55,7 @@ any GNU/Linux system with the following procedure.
**Note:** The hash values should match. If they do not match, then the
backup file may have been tampered with, or there may have been a storage
error.
+
**Note:** If your backup was hashed with a message digest algorithm other
than `sha512`, you must substitute the correct message digest command. This
@@ -64,7 +65,7 @@ any GNU/Linux system with the following procedure.
supported message digest algorithms can be found with `openssl
list-message-digest-algorithms`.
- 4. Read the `backup-header`. You'll need some of this information later. The
+ 5. Read the `backup-header`. You'll need some of this information later. The
file will look similar to this:
[user@restore ~]$ cat backup-header
@@ -78,7 +79,7 @@ any GNU/Linux system with the following procedure.
**Note:** If you see `version=2` here, go to [Emergency Backup Recovery -
format version 2](/doc/backup-emergency-restore-v2/) instead.
- 5. Verify the integrity of the `private.img` file which houses your data.
+ 6. Verify the integrity of the `private.img` file which houses your data.
[user@restore ~]$ cd vm1/
[user@restore vm1]$ openssl dgst -sha512 -hmac "$backup_pass" private.img.000
@@ -90,13 +91,14 @@ any GNU/Linux system with the following procedure.
backup file may have been tampered with, or there may have been a storage
error.
+
**Note:** If your backup was hashed with a message digest algorithm other
than `sha512`, you must substitute the correct message digest command. This
information is contained in the `backup-header` file (see step 4). A
complete list of supported message digest algorithms can be found with
`openssl list-message-digest-algorithms`.
- 6. Decrypt the `private.img` file.
+ 7. Decrypt the `private.img` file.
[user@restore vm1]$ find -name 'private.img.*[0-9]' | sort -V | xargs cat | openssl enc -d -md MD5 -pass pass:"$backup_pass" -aes-256-cbc -out private.img.dec
@@ -106,7 +108,7 @@ any GNU/Linux system with the following procedure.
complete list of supported cipher algorithms can be found with `openssl
list-cipher-algorithms`.
- 7. Decompress the decrypted `private.img` file.
+ 8. Decompress the decrypted `private.img` file.
[user@restore vm1]$ zforce private.img.dec
private.img.dec -- replaced with private.img.dec.gz
@@ -120,20 +122,21 @@ any GNU/Linux system with the following procedure.
[user@restore vm1]$ mv private.img.dec private.img.dec.bz2
[user@restore vm1]$ bunzip2 private.img.dec.bz2
- 8. Untar the decrypted and decompressed `private.img` file.
+ 9. Untar the decrypted and decompressed `private.img` file.
[user@restore vm1]$ tar -xvf private.img.dec
vm1/private.img
- 9. Mount the private.img file and access your data.
+ 10. Mount the private.img file and access your data.
[user@restore vm1]$ sudo mkdir /mnt/img
[user@restore vm1]$ sudo mount -o loop vm1/private.img /mnt/img/
[user@restore vm1]$ cat /mnt/img/home/user/your_data.txt
This data has been successfully recovered!
-10. Success! If you wish to recover data from more than one VM in your backup,
+11. Success! If you wish to recover data from more than one VM in your backup,
simply repeat steps 5--9 for each additional VM.
+
**Note:** You may wish to store a copy of these instructions with your
Qubes backups in the event that you fail to recall the above procedure
From 3ef2cd78aefafd23670eb81b9ea8c3f05910ac7e Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 17:36:57 +0200
Subject: [PATCH 146/332] new lines rst conv
---
user/how-to-guides/backup-emergency-restore-v3.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/user/how-to-guides/backup-emergency-restore-v3.md b/user/how-to-guides/backup-emergency-restore-v3.md
index 1b47ee06..7a460d4e 100644
--- a/user/how-to-guides/backup-emergency-restore-v3.md
+++ b/user/how-to-guides/backup-emergency-restore-v3.md
@@ -57,6 +57,7 @@ any GNU/Linux system with the following procedure.
error.
+
**Note:** If your backup was hashed with a message digest algorithm other
than `sha512`, you must substitute the correct message digest command. This
information is contained in the `backup-header` file (see step 4), however
@@ -92,6 +93,7 @@ any GNU/Linux system with the following procedure.
error.
+
**Note:** If your backup was hashed with a message digest algorithm other
than `sha512`, you must substitute the correct message digest command. This
information is contained in the `backup-header` file (see step 4). A
@@ -136,7 +138,8 @@ any GNU/Linux system with the following procedure.
11. Success! If you wish to recover data from more than one VM in your backup,
simply repeat steps 5--9 for each additional VM.
-
+
+
**Note:** You may wish to store a copy of these instructions with your
Qubes backups in the event that you fail to recall the above procedure
From 3dcfa93aa71068ca4ab1c4c520853a3b663d6b95 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 17:37:25 +0200
Subject: [PATCH 147/332] new line rst conv
---
user/how-to-guides/how-to-use-devices.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/user/how-to-guides/how-to-use-devices.md b/user/how-to-guides/how-to-use-devices.md
index 3b65f1e6..c8d2c0eb 100644
--- a/user/how-to-guides/how-to-use-devices.md
+++ b/user/how-to-guides/how-to-use-devices.md
@@ -26,6 +26,7 @@ In Qubes 3.X, the Qubes VM Manager dealt with attachment as well.
This functionality was moved to the Qubes Device Widget, the tool tray icon with a yellow square located in the top right of your screen by default.
There are currently four categories of devices Qubes understands:
+
- Microphones
- Block devices
- USB devices
From 6b2ad28033e09934a6227fa488d04e8bf995ff61 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 1 Jun 2024 17:37:40 +0200
Subject: [PATCH 148/332] newline rst conv
---
user/how-to-guides/how-to-use-disposables.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/user/how-to-guides/how-to-use-disposables.md b/user/how-to-guides/how-to-use-disposables.md
index 7999d8b7..e4aaa9a9 100644
--- a/user/how-to-guides/how-to-use-disposables.md
+++ b/user/how-to-guides/how-to-use-disposables.md
@@ -149,6 +149,7 @@ In dom0, add the following line at the beginning of the file `/etc/qubes-rpc/pol
~~~
This line means:
+
- FROM: Any qube
- TO: A disposable based on ``
- WHAT: Allow sending an "Open URL" request
From 54c3246c1d065fbe58f51aff7f169eec83fcca7b Mon Sep 17 00:00:00 2001
From: "B. Burt" <162539390+beeburrt@users.noreply.github.com>
Date: Thu, 6 Jun 2024 00:43:28 -0600
Subject: [PATCH 149/332] Update installation-guide.md
No testes
---
user/downloading-installing-upgrading/installation-guide.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/installation-guide.md b/user/downloading-installing-upgrading/installation-guide.md
index acd5a9ec..c38cbc35 100644
--- a/user/downloading-installing-upgrading/installation-guide.md
+++ b/user/downloading-installing-upgrading/installation-guide.md
@@ -125,7 +125,7 @@ Select the option to test this media and install Qubes OS.
- Note: If the latest stable release is not compatible with your hardware, you may wish to consider installing using the latest kernel. Be aware that this has not been as well testes as the standard kernel.
+ Note: If the latest stable release is not compatible with your hardware, you may wish to consider installing using the latest kernel. Be aware that this has not been as well tested as the standard kernel.
If the boot screen does not appear, there are several options to troubleshoot. First, try rebooting your computer. If it still loads your currently installed operating system or does not detect your installation medium, make sure the boot order is set up appropriately. The process to change the boot order varies depending on the currently installed system and the motherboard manufacturer. If **Windows 10** is installed on your machine, you may need to follow specific instructions to change the boot order. This may require an [advanced reboot](https://support.microsoft.com/en-us/help/4026206/windows-10-find-safe-mode-and-other-startup-settings).
From 5050b8d1aa2d822fdbbd0efc481a8c8d38e961e7 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Sat, 8 Jun 2024 20:03:50 +0200
Subject: [PATCH 150/332] better comv for rst prep
---
user/how-to-guides/how-to-reinstall-a-template.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/user/how-to-guides/how-to-reinstall-a-template.md b/user/how-to-guides/how-to-reinstall-a-template.md
index cc7cce67..baf99ce7 100644
--- a/user/how-to-guides/how-to-reinstall-a-template.md
+++ b/user/how-to-guides/how-to-reinstall-a-template.md
@@ -48,11 +48,13 @@ If you want to reinstall more than one template, repeat these instructions for e
1. Clone the existing target template.
+
This can be a good idea if you've customized the existing template and want to keep your customizations.
On the other hand, if you suspect that this template is broken, misconfigured, or compromised, be certain you do not start any VMs using it in the below procedure.
2. Temporarily change all VMs based on the target template to the new clone template, or remove them.
+
This can be a good idea if you have user data in these VMs that you want to keep.
On the other hand, if you suspect that these VMs (or the templates on which they are based) are broken, misconfigured, or compromised, you may want to remove them instead.
You can do this in Qubes Manager by right-clicking on the VM and clicking **Remove VM**, or you can use the command `qvm-remove ` in dom0.
From 9cb521989d2b977c070c80713b8874ee3040d21c Mon Sep 17 00:00:00 2001
From: unman
Date: Sun, 9 Jun 2024 15:50:22 +0000
Subject: [PATCH 151/332] Minor change to how-to-use-disposables page.
---
user/how-to-guides/how-to-use-disposables.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/user/how-to-guides/how-to-use-disposables.md b/user/how-to-guides/how-to-use-disposables.md
index d13c467b..2a0f7eaa 100644
--- a/user/how-to-guides/how-to-use-disposables.md
+++ b/user/how-to-guides/how-to-use-disposables.md
@@ -26,23 +26,23 @@ This diagram provides a general example of how disposables can be used to safely
There is a difference between [named disposable qubes](/doc/glossary/#named-disposable) and [disposable templates](/doc/glossary/#disposable-template).
-In a default QubesOS Installation, you would probably use the 'whonix-ws-16-dvm' disposable template to, for example, browse the Tor network with an disposable qube. Every time you start an application using this disposable template, a new disposable qube - named `dispX` (where X is a random number) starts. If you close the application window, the `dispX` qube shuts down and vanished from your system. That is how disposable templates are used.
+In a default QubesOS Installation, you would probably use the 'whonix-ws-16-dvm' disposable template to, for example, browse the Tor network with an disposable qube. Every time you start an application using this disposable template, a new disposable qube - named `dispX` (where X is a random number) starts. If you close the application window, the `dispX` qube shuts down and vanishes from your system. That is how disposable templates are used.
-In named disposables every application starts in the same qube, the qube itself has a fixed name and you need to manually shutdown the qube. Except from the non-persistance, they feel like usual app qubes. Named disposables are built upon disposable templates.
+Named disposables are also built upon disposable templates, but they have a fixed name. The named disposable seems to behave like an ordinary app qube - every application you open will start in the same qube, and you need to manually shutdown the qube. But when you shutdown *any changes you made in the named disposable will be lost*. Except for this non-persistance, they feel like usual app qubes.
### How to create disposable templates
First, you need to create an app qube. You can run it normally, set up any necessary settings (like browser settings) you wish to be applied to every disposable qube ran from this template. Next, go to 'Qube Settings' of the app qube, set it as a _Disposable template_ in the _Advanced_ section and apply the change.
-In Qubes 4.1, from now on, the entry in the Application menu is not named 'Qube' anymore, but split into 'Disposable' and 'Template (disp)'. The settings for the disposable can be changed under **'Application Menu -> Template (disp) -> Template: Qubes Settings**
+In Qubes 4.1, the entry in the Application menu is split into 'Disposable' and 'Template (disp)'. The settings for the disposable can be changed under **'Application Menu -> Template (disp) -> Template: Qubes Settings**
-In Qubes 4.2, the qube will now appear in the menu as a disposable template (in the Apps section), from which you can launch new disposable qubes. To change the settings of the template itself or run programs in it, use the menu position for this qube located in the Templates section.
+In Qubes 4.2, the qube will now appear in the menu as a disposable template (in the Apps section), from which you can launch new disposable qubes. To change the settings of the template itself or run programs in it, use the menu item for the disposable template located in the Templates section.
### How to create named disposables
In Qubes 4.1: named disposables can be created under **Application Menu -> Create Qubes VM**, set the qube type to be _DisposableVM_.
-In Qubes 4.2: named disposables can be created by **Application Menu -> Settings -> Qubes Settings -> Create New Qube**. Set the qube type to _Named disposable_
+In Qubes 4.2: named disposables can be created by **Application Menu -> Settings -> Qubes Settings -> Create New Qube**. Set the qube type to Named disposable_
## Security
From 0584c50257f54a11070c8404c26343ef5498c379 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 11 Jun 2024 18:41:20 -0700
Subject: [PATCH 152/332] Add Fedora 40 support for Qubes 4.2
QubesOS/qubes-issues#8915
---
user/downloading-installing-upgrading/supported-releases.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index a0f94e94..8711facc 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -58,7 +58,7 @@ It is the responsibility of each distribution to clearly notify its users in adv
| Qubes OS | Fedora | Debian |
| ----------- | ------ | ------ |
| Release 4.1 | 39 | 11, 12 |
-| Release 4.2 | 39 | 12 |
+| Release 4.2 | 39, 40 | 12 |
### Note on Debian support
From 112e9996eb9f1350f4cc38d05dba83014b5d6ca7 Mon Sep 17 00:00:00 2001
From: deeplow <47065258+deeplow@users.noreply.github.com>
Date: Wed, 12 Jun 2024 05:19:49 -0400
Subject: [PATCH 153/332] qubes-builderv1 still support 4.2 builds
---
developer/building/qubes-builder.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/developer/building/qubes-builder.md b/developer/building/qubes-builder.md
index 31755705..58573dea 100644
--- a/developer/building/qubes-builder.md
+++ b/developer/building/qubes-builder.md
@@ -13,7 +13,7 @@ title: Qubes builder
Note: These instructions concern the older Qubes builder (v1). It supports
- only building Qubes 4.1 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be used for building Qubes R4.1 and later, and all related components.
+ only building Qubes 4.2 or earlier. The build process has been completely rewritten in qubes-builder v2. This can be used for building Qubes R4.2 and later, and all related components.
**Note: See [ISO building instructions](/doc/qubes-iso-building/) for a streamlined overview on how to use the build system.**
From ee6a768d329edb1af52b66ef2c94986a13ffe825 Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Wed, 12 Jun 2024 18:18:45 +0200
Subject: [PATCH 154/332] better conv for rst
---
user/templates/windows/windows-qubes-4-1.md | 57 +++++++++++++--------
1 file changed, 37 insertions(+), 20 deletions(-)
diff --git a/user/templates/windows/windows-qubes-4-1.md b/user/templates/windows/windows-qubes-4-1.md
index 4d38a4bb..f4f6f3c9 100644
--- a/user/templates/windows/windows-qubes-4-1.md
+++ b/user/templates/windows/windows-qubes-4-1.md
@@ -46,6 +46,7 @@ For better integration, a set of drivers and services, called Qubes Windows Tool
However, if you are an expert or want to do it manually you may continue below.
**Notes:**
+
- The instructions may work on other versions than Windows 7, 8.1, 10 and 11 x64 but haven't been tested.
- Qubes Windows Tools (QWT) only supports Windows 7, 8.1, 10 and 11 x64. For installation, see [Qubes Windows Tools](/doc/templates/windows/qubes-windows-tools-4-1).
@@ -63,7 +64,9 @@ Create a VM named WindowsNew in [HVM](/doc/hvm/) mode (Xen's current PVH limitat
- Using Qube Manager
+
In order to create the new qube, select the command Qube -> New Qube in the Qube Manager::
+
- Name: `WindowsNew`, Color: `orange` (for a standalone qubes, `black` for a template)
- Type: `StandaloneVM (fully persistent)` or `TemplateVM (template home, persistent root)`
- Template: `(none)`
@@ -86,21 +89,26 @@ Create a VM named WindowsNew in [HVM](/doc/hvm/) mode (Xen's current PVH limitat
- Using CLI in a dom0 terminal
- This can also be done via the following CLI commands in dom0, for a standalone qube:
- ~~~
- qvm-create --class StandaloneVM --label orange --property virt_mode=hvm WindowsNew
- ~~~
- and for a template:
- ~~~
- qvm-create --class TemplateVM --label black --property virt_mode=hvm WindowsNew
- ~~~
+
+ ~~~
+ qvm-create --class StandaloneVM --label orange --property virt_mode=hvm WindowsNew
+ ~~~
+
+ and for a template:
+
+ ~~~
+ qvm-create --class TemplateVM --label black --property virt_mode=hvm WindowsNew
+ ~~~
+
- After creation, set the following parameters via CLI in a dom0 terminal:
- ~~~
- qvm-volume extend WindowsNew:root 60g
- qvm-prefs WindowsNew memory 4096
- qvm-prefs WindowsNew maxmem 4096
- qvm-prefs WindowsNew kernel ''
- qvm-prefs WindowsNew qrexec_timeout 7200
- ~~~
+
+ ~~~
+ qvm-volume extend WindowsNew:root 60g
+ qvm-prefs WindowsNew memory 4096
+ qvm-prefs WindowsNew maxmem 4096
+ qvm-prefs WindowsNew kernel ''
+ qvm-prefs WindowsNew qrexec_timeout 7200
+ ~~~
These parameters are set for the following reasons:
@@ -109,13 +117,14 @@ These parameters are set for the following reasons:
- Setting memory to 4096MB may work in most cases, but using 6144MB (or even 8192MB) may reduce the likelihood of crashes during installation, especially for Windows 10 or 11. This is important as Windows qubes have to be created without memory balancing, as requested by the parameter settings described above.
- The Windows' installer requires a significant amount of memory or else the VM will crash with such errors:
- ~~~
- /var/log/xen/console/hypervisor.log:
+ ~~~
+ /var/log/xen/console/hypervisor.log:
- p2m_pod_demand_populate: Dom120 out of PoD memory! (tot=102411 ents=921600 dom120)
- (XEN) domain_crash called from p2m-pod.c:1218
- (XEN) Domain 120 (vcpu#0) crashed on cpu#3:
- ~~~
+ p2m_pod_demand_populate: Dom120 out of PoD memory! (tot=102411 ents=921600 dom120)
+ (XEN) domain_crash called from p2m-pod.c:1218
+ (XEN) Domain 120 (vcpu#0) crashed on cpu#3:
+ ~~~
+
So, increase the VM's memory to 4096MB (memory = maxmem because we don't use memory balancing), or 6144MB / 8192MB, as recommended above.
- Disable direct boot so that the VM will go through the standard cdrom/HDD boot sequence. This is done by setting the qube's kernel to an empty value.
@@ -135,6 +144,7 @@ These parameters are set for the following reasons:
- Click "OK" to boot into the windows installer.
This can also be done via the following CLI command in dom0 (assuming that the Windows installer ISO is stored in the directory `/home/user/` in the AppVM `untrusted`):
+
~~~
qvm-start --cdrom=untrusted:/home/user/windows_install.iso WindowsNew
~~~
@@ -175,8 +185,10 @@ These parameters are set for the following reasons:
- On systems shipped with a Windows license, the product key may be read from flash via root in dom0:
+
`strings < /sys/firmware/acpi/tables/MSDM`
+
Alternatively, you can also try a Windows 7 license key (as of 2018/11 they are still accepted for a free upgrade to Windows 10).
- The VM will shutdown after the installer completes the extraction of Windows installation files. It's a good idea to clone the VM now (eg. `qvm-clone WindowsNew WindowsNewbkp1`). Then, (re)start the VM via the Qubes Manager or with `qvm-start WindowsNew` from a dom0 terminal (without the `--cdrom` parameter!).
@@ -186,9 +198,11 @@ These parameters are set for the following reasons:
**After Windows installation**
- From the Windows command line, disable hibernation in order to avoid incomplete Windows shutdown, which could lead to corruption of the VM's disk.
+
~~~
powercfg -H off
~~~
+
Also, recent versions of Windows won’t show the CD-ROM drive after starting the qube with `qvm-start vm --cdrom ...` (or using the GUI). The solution is to disable hibernation in Windows with this command. (That command is included in QWT’s setup but it’s necessary to run it manually in order to be able to open QWT’s setup ISO/CD-ROM in Windows).
- In case you switch from `sys-firewall` to `sys-whonix`, you'll need a static IP network configuration, DHCP won't work for `sys-whonix`. Sometimes this may also happen if you keep using `sys-firewall`. In both cases, proceed as follows:
@@ -202,6 +216,7 @@ These parameters are set for the following reasons:
- Given the higher than usual memory requirements of Windows, you may get a `Not enough memory to start domain 'WindowsNew'` error. In that case try to shutdown unneeded VMs to free memory before starting the Windows VM.
+
At this point you may open a tab in dom0 for debugging, in case something goes amiss:
~~~
@@ -234,6 +249,7 @@ For additional information on configuring a Windows qube, see the [Customizing W
As described above Windows 7, 8.1, 10 and 11 can be installed as TemplateVM. To have the user data stored in AppVMs depending on this template, the option `Move User Profiles` has to be selected on installation of Qubes Windows Tools. For Windows 7, before installing QWT, the private disk `D:` has to be renamed to `Q:`, see the QWT installation documentation in [Qubes Windows Tools](/doc/templates/windows/qubes-windows-tools-4-1).
AppVMs based on these templates can be created the normal way by using the Qube Manager or by specifying
+
~~~
qvm-create --class=AppVM --template=
~~~
@@ -243,6 +259,7 @@ On starting the AppVM, sometimes a message is displayed that the Xen PV Network
**Caution:** These AppVMs must not be started while the corresponding TemplateVM is running, because they share the TemplateVM's license data. Even if this could work sometimes, it would be a violation of the license terms.
Furthermore, if manual IP setup was used for the template, the IP address selected for the template will also be used for the AppVM, as it inherits this address from the template. Qubes, however, will have assigned a different address to the AppVM, which will have to changed to that of the template (e.g. 10.137.0.x) so that the AppVM can access the network, vis the CLI command in a dom0 terminal:
+
~~~
qvm-prefs WindowsNew ip 10.137.0.x
~~~
From 607d525d43464f3e3f69faf326ca666e93aafa4e Mon Sep 17 00:00:00 2001
From: m <3440586+maiska@users.noreply.github.com>
Date: Wed, 12 Jun 2024 18:44:05 +0200
Subject: [PATCH 155/332] better conv 4 rst
---
user/templates/windows/windows-qubes-4-1.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/templates/windows/windows-qubes-4-1.md b/user/templates/windows/windows-qubes-4-1.md
index f4f6f3c9..7b998681 100644
--- a/user/templates/windows/windows-qubes-4-1.md
+++ b/user/templates/windows/windows-qubes-4-1.md
@@ -65,7 +65,7 @@ Create a VM named WindowsNew in [HVM](/doc/hvm/) mode (Xen's current PVH limitat
- Using Qube Manager
- In order to create the new qube, select the command Qube -> New Qube in the Qube Manager::
+ In order to create the new qube, select the command Qube -> New Qube in the Qube Manager:
- Name: `WindowsNew`, Color: `orange` (for a standalone qubes, `black` for a template)
- Type: `StandaloneVM (fully persistent)` or `TemplateVM (template home, persistent root)`
From 9745db8fc5913a3377219ec2ccfb1f041d1f0b83 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 18 Jun 2024 00:15:13 -0700
Subject: [PATCH 156/332] Update R4.1 support status to "extended security
support"
---
user/downloading-installing-upgrading/supported-releases.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 8711facc..3f8d790f 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -22,7 +22,7 @@ Qubes OS releases are supported for **six months** after each subsequent major o
| Release 3.1 | 2016-03-09 | 2017-03-29 | Unsupported |
| Release 3.2 | 2016-09-29 | 2019-03-28 | Unsupported |
| Release 4.0 | 2018-03-28 | 2022-08-04 | Unsupported |
-| Release 4.1 | 2022-02-04 | 2024-06-18 | Supported |
+| Release 4.1 | 2022-02-04 | 2024-06-18 | [Extended security support](/news/2024/06/18/qubes-os-4-1-has-reached-end-of-life/)|
| Release 4.2 | 2023-12-18 | TBA | Supported |
| Release 4.3 | TBA | TBA | In development |
From 637c712ee32dd378a5e9fb491f4decdd633c3bb4 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 18 Jun 2024 00:22:56 -0700
Subject: [PATCH 157/332] Update link
---
user/downloading-installing-upgrading/supported-releases.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/user/downloading-installing-upgrading/supported-releases.md b/user/downloading-installing-upgrading/supported-releases.md
index 3f8d790f..0e319bab 100644
--- a/user/downloading-installing-upgrading/supported-releases.md
+++ b/user/downloading-installing-upgrading/supported-releases.md
@@ -22,7 +22,7 @@ Qubes OS releases are supported for **six months** after each subsequent major o
| Release 3.1 | 2016-03-09 | 2017-03-29 | Unsupported |
| Release 3.2 | 2016-09-29 | 2019-03-28 | Unsupported |
| Release 4.0 | 2018-03-28 | 2022-08-04 | Unsupported |
-| Release 4.1 | 2022-02-04 | 2024-06-18 | [Extended security support](/news/2024/06/18/qubes-os-4-1-has-reached-end-of-life/)|
+| Release 4.1 | 2022-02-04 | 2024-06-18 | [Extended security support](/news/2024/06/18/qubes-os-4-1-has-reached-end-of-life-extended-security-support-continues-until-2024-07-31/)|
| Release 4.2 | 2023-12-18 | TBA | Supported |
| Release 4.3 | TBA | TBA | In development |
From cb4ec61ea9af0b5946e2b3b91837403475b4e874 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Sun, 23 Jun 2024 22:43:26 -0700
Subject: [PATCH 158/332] Update release notes for Qubes OS 4.2.2
QubesOS/qubes-issues#9316
QubesOS/qubes-posts#135
---
developer/releases/4_2/release-notes.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 10fd2d1b..000f486a 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -54,6 +54,8 @@ We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after
- Qubes 4.2 does not support Debian 11 templates (see [supported template releases](/doc/supported-releases/#templates)). Please [upgrade your Debian templates](/doc/templates/debian/#upgrading) to Debian 12.
+- Qubes 4.2.2 includes a fix for [#8332: File-copy qrexec service is overly restrictive](https://github.com/QubesOS/qubes-issues/issues/8332). As explained in the issue comments, a change was introduced in Qubes 4.2.0 that caused inter-qube file-copy/move actions to reject filenames containing, e.g., non-Latin characters and certain symbols. This was a backward-incompatible change that should not have been introduced in a minor release. The fix replaces the default file-copy qrexec service that exists in Qubes 4.2.0 and 4.2.1 (`qubes.Filecopy`) with a less restrictive file-copy qrexec service that restores the pre-4.2 behavior (`qubes.Filecopy+allow-all-bytes`). Users who wish to preserve the more restrictive 4.2.0 and 4.2.1 behavior can do so by modifying their RPC policy rules to use the more restrictive service. To switch a single rule to the more restrictive behavior, change `*` in the argument column to `+` (i.e., change "any argument" to "only empty"). To use the more restrictive behavior globally, add a "deny" rule for `qubes.Filecopy+allow-all-bytes` before all other relevant rules. For more information, see [RPC policies](/doc/rpc-policy/) and [Qube configuration interface](/doc/vm-interface/#qubes-rpc).
+
## Download
All Qubes ISOs and associated [verification files](/security/verifying-signatures/) are available on the [downloads](/downloads/) page.
From 8da080c19472d6a8037dd4e2cdf115baf4877ac6 Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Tue, 25 Jun 2024 01:23:19 -0700
Subject: [PATCH 159/332] Update QubesOS/qubes-issues#8332 service name and
explanation
---
developer/releases/4_2/release-notes.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 000f486a..3c459af2 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -54,7 +54,11 @@ We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after
- Qubes 4.2 does not support Debian 11 templates (see [supported template releases](/doc/supported-releases/#templates)). Please [upgrade your Debian templates](/doc/templates/debian/#upgrading) to Debian 12.
-- Qubes 4.2.2 includes a fix for [#8332: File-copy qrexec service is overly restrictive](https://github.com/QubesOS/qubes-issues/issues/8332). As explained in the issue comments, a change was introduced in Qubes 4.2.0 that caused inter-qube file-copy/move actions to reject filenames containing, e.g., non-Latin characters and certain symbols. This was a backward-incompatible change that should not have been introduced in a minor release. The fix replaces the default file-copy qrexec service that exists in Qubes 4.2.0 and 4.2.1 (`qubes.Filecopy`) with a less restrictive file-copy qrexec service that restores the pre-4.2 behavior (`qubes.Filecopy+allow-all-bytes`). Users who wish to preserve the more restrictive 4.2.0 and 4.2.1 behavior can do so by modifying their RPC policy rules to use the more restrictive service. To switch a single rule to the more restrictive behavior, change `*` in the argument column to `+` (i.e., change "any argument" to "only empty"). To use the more restrictive behavior globally, add a "deny" rule for `qubes.Filecopy+allow-all-bytes` before all other relevant rules. For more information, see [RPC policies](/doc/rpc-policy/) and [Qube configuration interface](/doc/vm-interface/#qubes-rpc).
+- Qubes 4.2.2 includes a fix for [#8332: File-copy qrexec service is overly restrictive](https://github.com/QubesOS/qubes-issues/issues/8332). As explained in the issue comments, we introduced a change in Qubes 4.2.0 that caused inter-qube file-copy/move actions to reject filenames containing, e.g., non-Latin characters and certain symbols. The rationale for this change was to mitigate the security risk associated with unusual unicode characters and invalid encoding in filenames, which some software might handle in an unsafe manner and which might cause confusion for users. This change represents a trade-off between security and usability.
+
+After the change went live, we received several user reports indicating more severe usability problems than we had anticipated. Moreover, these problems were prompting users to resort to dangerous workarounds (such as packing files into an archive format prior to copying) that carry far more risk than the original risk posed by the unrestricted filenames. In addition, we realized that this was a backward-incompatible change that should not have been introduced in a minor release in the first place. Therefore, we have decided, for the time being, to restore the original (pre-4.2) behavior by replacing the file-copy qrexec service from Qubes 4.2.0 and 4.2.1 (`qubes.Filecopy`) with a less restrictive service (`qubes.Filecopy+allow-all-names`).
+
+Users who wish to use the more restrictive 4.2.0 and 4.2.1 behavior can do so by modifying their RPC policy rules to use the more restrictive service. To switch a single rule to the more restrictive behavior, change `*` in the argument column to `+` (i.e., change "any argument" to "only empty"). To use the more restrictive behavior globally, add a "deny" rule for `qubes.Filecopy+allow-all-names` before all other relevant rules. For more information, see [RPC policies](/doc/rpc-policy/) and [Qube configuration interface](/doc/vm-interface/#qubes-rpc).
## Download
From beac6f7e831f2b85418c72f09decb9d0c096bc3e Mon Sep 17 00:00:00 2001
From: Andrew David Wong
Date: Wed, 26 Jun 2024 02:35:23 -0700
Subject: [PATCH 160/332] Explain how the fix works; clarify relationship
between services
---
developer/releases/4_2/release-notes.md | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/developer/releases/4_2/release-notes.md b/developer/releases/4_2/release-notes.md
index 3c459af2..13af20d9 100644
--- a/developer/releases/4_2/release-notes.md
+++ b/developer/releases/4_2/release-notes.md
@@ -54,11 +54,13 @@ We strongly recommend [updating Qubes OS](/doc/how-to-update/) immediately after
- Qubes 4.2 does not support Debian 11 templates (see [supported template releases](/doc/supported-releases/#templates)). Please [upgrade your Debian templates](/doc/templates/debian/#upgrading) to Debian 12.
-- Qubes 4.2.2 includes a fix for [#8332: File-copy qrexec service is overly restrictive](https://github.com/QubesOS/qubes-issues/issues/8332). As explained in the issue comments, we introduced a change in Qubes 4.2.0 that caused inter-qube file-copy/move actions to reject filenames containing, e.g., non-Latin characters and certain symbols. The rationale for this change was to mitigate the security risk associated with unusual unicode characters and invalid encoding in filenames, which some software might handle in an unsafe manner and which might cause confusion for users. This change represents a trade-off between security and usability.
-
-After the change went live, we received several user reports indicating more severe usability problems than we had anticipated. Moreover, these problems were prompting users to resort to dangerous workarounds (such as packing files into an archive format prior to copying) that carry far more risk than the original risk posed by the unrestricted filenames. In addition, we realized that this was a backward-incompatible change that should not have been introduced in a minor release in the first place. Therefore, we have decided, for the time being, to restore the original (pre-4.2) behavior by replacing the file-copy qrexec service from Qubes 4.2.0 and 4.2.1 (`qubes.Filecopy`) with a less restrictive service (`qubes.Filecopy+allow-all-names`).
-
-Users who wish to use the more restrictive 4.2.0 and 4.2.1 behavior can do so by modifying their RPC policy rules to use the more restrictive service. To switch a single rule to the more restrictive behavior, change `*` in the argument column to `+` (i.e., change "any argument" to "only empty"). To use the more restrictive behavior globally, add a "deny" rule for `qubes.Filecopy+allow-all-names` before all other relevant rules. For more information, see [RPC policies](/doc/rpc-policy/) and [Qube configuration interface](/doc/vm-interface/#qubes-rpc).
+- Qubes 4.2.2 includes a fix for [#8332: File-copy qrexec service is overly restrictive](https://github.com/QubesOS/qubes-issues/issues/8332). As explained in the issue comments, we introduced a change in Qubes 4.2.0 that caused inter-qube file-copy/move actions to reject filenames containing, e.g., non-Latin characters and certain symbols. The rationale for this change was to mitigate the security risks associated with unusual unicode characters and invalid encoding in filenames, which some software might handle in an unsafe manner and which might cause confusion for users. Such a change represents a trade-off between security and usability.
+
+ After the change went live, we received several user reports indicating more severe usability problems than we had anticipated. Moreover, these problems were prompting users to resort to dangerous workarounds (such as packing files into an archive format prior to copying) that carry far more risk than the original risk posed by the unrestricted filenames. In addition, we realized that this was a backward-incompatible change that should not have been introduced in a minor release in the first place.
+
+ Therefore, we have decided, for the time being, to restore the original (pre-4.2) behavior by introducing a new `allow-all-names` argument for the `qubes.Filecopy` service. By default, `qvm-copy` and similar tools will use this less restrictive service (`qubes.Filecopy+allow-all-names`) whenever they detect any files that would be have been blocked by the more restrictive service (`qubes.Filecopy+`). If no such files are detected, they will use the more restrictive service.
+
+ Users who wish to opt for the more restrictive 4.2.0 and 4.2.1 behavior can do so by modifying their RPC policy rules. To switch a single rule to the more restrictive behavior, change `*` in the argument column to `+` (i.e., change "any argument" to "only empty"). To use the more restrictive behavior globally, add a "deny" rule for `qubes.Filecopy+allow-all-names` before all other relevant rules. For more information, see [RPC policies](/doc/rpc-policy/) and [Qube configuration interface](/doc/vm-interface/#qubes-rpc).
## Download
From 3cec58bf7d108e4104c30c8b5e3942149e9e94d0 Mon Sep 17 00:00:00 2001
From: Piotr Bartman
Date: Wed, 20 Mar 2024 22:20:01 +0100
Subject: [PATCH 161/332] q-dev: update docs
---
developer/services/admin-api.md | 233 ++++++++++++++++++++------------
1 file changed, 144 insertions(+), 89 deletions(-)
diff --git a/developer/services/admin-api.md b/developer/services/admin-api.md
index 0087bcaf..74314ed7 100644
--- a/developer/services/admin-api.md
+++ b/developer/services/admin-api.md
@@ -62,95 +62,98 @@ yet documented.
The API should be implemented as a set of qrexec calls. This is to make it easy
to set the policy using current mechanism.
-| call | dest | argument | inside | return | note |
-| ------------------------------------- | --------- | --------- | ----------------------------------------- | --------------------------------------------------------- | ---- |
-| `admin.vmclass.List` | `dom0` | - | - | `\n` |
-| `admin.vm.List` | `dom0|` | - | - | ` class= state=\n` |
-| `admin.vm.Create.` | `dom0` | template | `name= label=` | - |
-| `admin.vm.CreateInPool.` | `dom0` | template | `name= label= ` `pool= pool:=` | - | either use `pool=` to put all volumes there, or `pool:=` for individual volumes - both forms are not allowed at the same time
-| `admin.vm.CreateDisposable` | template | - | - | name | Create new DisposableVM, `template` is any AppVM with `dispvm_allowed` set to True, or `dom0` to use default defined in `default_dispvm` property of calling VM; VM created with this call will be automatically removed after its shutdown; the main difference from `admin.vm.Create.DispVM` is automatic (random) name generation.
-| `admin.vm.Remove` | vm | - | - | - |
-| `admin.label.List` | `dom0` | - | - | `\n` |
-| `admin.label.Create` | `dom0` | label | `0xRRGGBB` | - |
-| `admin.label.Get` | `dom0` | label | - | `0xRRGGBB` |
-| `admin.label.Index` | `dom0` | label | - | `` |
-| `admin.label.Remove` | `dom0` | label | - | - |
-| `admin.property.List` | `dom0` | - | - | `\n` |
-| `admin.property.Get` | `dom0` | property | - | `default={True|False} ` `type={str|int|bool|vm|label|list} ` | Type `list` is added in R4.1. Values are of type `str` and each entry is suffixed with newline character.
-| `admin.property.GetAll` | `dom0` | - | - | `\n` | Get all the properties in one call. Each property is returned on a separate line and use the same value encoding as property.Get method, with an exception that newlines are encoded as literal `\n` and literal `\` are encoded as `\\`.
-| `admin.property.GetDefault` | `dom0` | property | - | `type={str|int|bool|vm|label|list} ` | Type `list` is added in R4.1. Values are of type `str` and each entry is suffixed with newline character.
-| `admin.property.Help` | `dom0` | property | - | `help` |
-| `admin.property.HelpRst` | `dom0` | property | - | `help.rst` |
-| `admin.property.Reset` | `dom0` | property | - | - |
-| `admin.property.Set` | `dom0` | property | value | - |
-| `admin.vm.property.List` | vm | - | - | `\n` |
-| `admin.vm.property.Get` | vm | property | - | `default={True|False} ` `type={str|int|bool|vm|label|list} ` | Type `list` is added in R4.1. Each list entry is suffixed with a newline character.
-| `admin.vm.property.GetAll` | vm | - | - | `\n` | Get all the properties in one call. Each property is returned on a separate line and use the same value encoding as property.Get method, with an exception that newlines are encoded as literal `\n` and literal `\` are encoded as `\\`.
-| `admin.vm.property.GetDefault` | vm | property | - | `type={str|int|bool|vm|label|type} ` | Type `list` is added in R4.1. Each list entry is suffixed with a newline character.
-| `admin.vm.property.Help` | vm | property | - | `help` |
-| `admin.vm.property.HelpRst` | vm | property | - | `help.rst` |
-| `admin.vm.property.Reset` | vm | property | - | - |
-| `admin.vm.property.Set` | vm | property | value | - |
-| `admin.vm.feature.List` | vm | - | - | `\n` |
-| `admin.vm.feature.Get` | vm | feature | - | value |
-| `admin.vm.feature.CheckWithTemplate` | vm | feature | - | value |
-| `admin.vm.feature.CheckWithNetvm` | vm | feature | - | value |
-| `admin.vm.feature.CheckWithAdminVM` | vm | feature | - | value |
-| `admin.vm.feature.CheckWithTemplateAndAdminVM`| vm | feature | - | value |
-| `admin.vm.feature.Remove` | vm | feature | - | - |
-| `admin.vm.feature.Set` | vm | feature | value | - |
-| `admin.vm.tag.List` | vm | - | - | `\n` |
-| `admin.vm.tag.Get` | vm | tag | - | `0` or `1` | retcode? |
-| `admin.vm.tag.Remove` | vm | tag | - | - |
-| `admin.vm.tag.Set` | vm | tag | - | - |
-| `admin.vm.firewall.Get` | vm | - | - | `\n` | rules syntax as in [firewall interface](/doc/vm-interface/#firewall-rules-in-4x) with addition of `expire=` and `comment=` options; `comment=` (if present) must be the last option
-| `admin.vm.firewall.Set` | vm | - | `\n` | - | set firewall rules, see `admin.vm.firewall.Get` for syntax
-| `admin.vm.firewall.Reload` | vm | - | - | - | force reload firewall without changing any rule
-| `admin.vm.deviceclass.List` | `dom0` | - | - | `\n` |
-| `admin.vm.device..Attach` | vm | device | options | - | `device` is in form `+` optional options given in `key=value` format, separated with spaces; options can include `persistent=True` to "persistently" attach the device (default is temporary)
-| `admin.vm.device..Detach` | vm | device | - | - | `device` is in form `+`
-| `admin.vm.device..Set.persistent`| vm | device | `True`\|`False` | - | `device` is in form `+`
-| `admin.vm.device..List` | vm | - | - | `\n` | options can include `persistent=True` for "persistently" attached devices (default is temporary)
-| `admin.vm.device..Available` | vm | device-ident | - | ` description=\n` | optional service argument may be used to get info about a single device, optional (device class specific) properties are in `key=value` form, `description` must be the last one and is the only one allowed to contain spaces
-| `admin.pool.List` | `dom0` | - | - | `\n` |
-| `admin.pool.ListDrivers` | `dom0` | - | - | ` ...\n` | Properties allowed in `admin.pool.Add`
-| `admin.pool.Info` | `dom0` | pool | - | `=\n` |
-| `admin.pool.Add` | `dom0` | driver | `=\n` | - |
-| `admin.pool.Set.revisions_to_keep` | `dom0` | pool | `` | - |
-| `admin.pool.Remove` | `dom0` | pool | - | - |
-| `admin.pool.volume.List` | `dom0` | pool | - | volume id |
-| `admin.pool.volume.Info` | `dom0` | pool | vid | `=\n` |
-| `admin.pool.volume.Set.revisions_to_keep`| `dom0` | pool | `` | - |
-| `admin.pool.volume.ListSnapshots` | `dom0` | pool | vid | `\n` |
-| `admin.pool.volume.Snapshot` | `dom0` | pool | vid | snapshot |
-| `admin.pool.volume.Revert` | `dom0` | pool | `` | - |
-| `admin.pool.volume.Resize` | `dom0` | pool | `` | - |
-| `admin.pool.volume.Import` | `dom0` | pool | `\n` | - |
-| `admin.pool.volume.CloneFrom` | `dom0` | pool | vid | token, to be used in `admin.pool.volume.CloneTo` | obtain a token to copy volume `vid` in `pool`; the token is one time use only, it's invalidated by `admin.pool.volume.CloneTo`, even if the operation fails |
-| `admin.pool.volume.CloneTo` | `dom0` | pool | `` | - | copy volume pointed by a token to volume `vid` in `pool` |
-| `admin.vm.volume.List` | vm | - | - | `\n` | `` is per-VM volume name (`root`, `private`, etc), `` is pool-unique volume id
-| `admin.vm.volume.Info` | vm | volume | - | `=\n` |
-| `admin.vm.volume.Set.revisions_to_keep`| vm | volume | value | - |
-| `admin.vm.volume.ListSnapshots` | vm | volume | - | snapshot | duplicate of `admin.pool.volume.`, but with other call params |
-| `admin.vm.volume.Snapshot` | vm | volume | - | snapshot | id. |
-| `admin.vm.volume.Revert` | vm | volume | snapshot | - | id. |
-| `admin.vm.volume.Resize` | vm | volume | size_in_bytes | - | id. |
-| `admin.vm.volume.Import` | vm | volume | raw volume data | - | id. |
-| `admin.vm.volume.ImportWithSize` | vm | volume | `\n` | - | new version of `admin.vm.volume.Import`, allows new volume to be different size |
-| `admin.vm.volume.Clear` | vm | volume | - | - | clear contents of volume |
-| `admin.vm.volume.CloneFrom` | vm | volume | - | token, to be used in `admin.vm.volume.CloneTo` | obtain a token to copy `volume` of `vm`; the token is one time use only, it's invalidated by `admin.vm.volume.CloneTo`, even if the operation fails |
-| `admin.vm.volume.CloneTo` | vm | volume | token, obtained with `admin.vm.volume.CloneFrom` | - | copy volume pointed by a token to `volume` of `vm` |
-| `admin.vm.CurrentState` | vm | - | - | `=\n` | state properties: `power_state`, `mem`, `mem_static_max`, `cputime`
-| `admin.vm.Start` | vm | - | - | - |
-| `admin.vm.Shutdown` | vm | - | - | - |
-| `admin.vm.Pause` | vm | - | - | - |
-| `admin.vm.Unpause` | vm | - | - | - |
-| `admin.vm.Kill` | vm | - | - | - |
-| `admin.backup.Execute` | `dom0` | config id | - | - | config in `/etc/qubes/backup/.conf`, only one backup operation of given `config id` can be running at once |
-| `admin.backup.Info` | `dom0` | config id | - | backup info | info what would be included in the backup
-| `admin.backup.Cancel` | `dom0` | config id | - | - | cancel running backup operation
-| `admin.Events` | `dom0|vm` | - | - | events |
-| `admin.vm.Stats` | `dom0|vm` | - | - | `vm-stats` events, see below | emit VM statistics (CPU, memory usage) in form of events
+| call | dest | argument | inside | return | note |
+|------------------------------------------------|------------|--------------|---------------------------------------------------------------------|-----------------------------------------------------| ---- |
+| `admin.vmclass.List` | `dom0` | - | - | `\n` |
+| `admin.vm.List` | `dom0 | ` | - | - | ` class= state=\n` |
+| `admin.vm.Create.` | `dom0` | template | `name= label=` | - |
+| `admin.vm.CreateInPool.` | `dom0` | template | `name= label= ` `pool= pool:=` | - | either use `pool=` to put all volumes there, or `pool:=` for individual volumes - both forms are not allowed at the same time
+| `admin.vm.CreateDisposable` | template | - | - | name | Create new DisposableVM, `template` is any AppVM with `dispvm_allowed` set to True, or `dom0` to use default defined in `default_dispvm` property of calling VM; VM created with this call will be automatically removed after its shutdown; the main difference from `admin.vm.Create.DispVM` is automatic (random) name generation.
+| `admin.vm.Remove` | vm | - | - | - |
+| `admin.label.List` | `dom0` | - | - | `\n` |
+| `admin.label.Create` | `dom0` | label | `0xRRGGBB` | - |
+| `admin.label.Get` | `dom0` | label | - | `0xRRGGBB` |
+| `admin.label.Index` | `dom0` | label | - | `` |
+| `admin.label.Remove` | `dom0` | label | - | - |
+| `admin.property.List` | `dom0` | - | - | `\n` |
+| `admin.property.Get` | `dom0` | property | - | `default={True |False} ` `type={str|int|bool|vm|label|list} ` | Type `list` is added in R4.1. Values are of type `str` and each entry is suffixed with newline character.
+| `admin.property.GetAll` | `dom0` | - | - | `\n` | Get all the properties in one call. Each property is returned on a separate line and use the same value encoding as property.Get method, with an exception that newlines are encoded as literal `\n` and literal `\` are encoded as `\\`.
+| `admin.property.GetDefault` | `dom0` | property | - | `type={str |int|bool|vm|label|list} ` | Type `list` is added in R4.1. Values are of type `str` and each entry is suffixed with newline character.
+| `admin.property.Help` | `dom0` | property | - | `help` |
+| `admin.property.HelpRst` | `dom0` | property | - | `help.rst` |
+| `admin.property.Reset` | `dom0` | property | - | - |
+| `admin.property.Set` | `dom0` | property | value | - |
+| `admin.vm.property.List` | vm | - | - | `\n` |
+| `admin.vm.property.Get` | vm | property | - | `default={True |False} ` `type={str|int|bool|vm|label|list} ` | Type `list` is added in R4.1. Each list entry is suffixed with a newline character.
+| `admin.vm.property.GetAll` | vm | - | - | `\n` | Get all the properties in one call. Each property is returned on a separate line and use the same value encoding as property.Get method, with an exception that newlines are encoded as literal `\n` and literal `\` are encoded as `\\`.
+| `admin.vm.property.GetDefault` | vm | property | - | `type={str |int|bool|vm|label|type} ` | Type `list` is added in R4.1. Each list entry is suffixed with a newline character.
+| `admin.vm.property.Help` | vm | property | - | `help` |
+| `admin.vm.property.HelpRst` | vm | property | - | `help.rst` |
+| `admin.vm.property.Reset` | vm | property | - | - |
+| `admin.vm.property.Set` | vm | property | value | - |
+| `admin.vm.feature.List` | vm | - | - | `\n` |
+| `admin.vm.feature.Get` | vm | feature | - | value |
+| `admin.vm.feature.CheckWithTemplate` | vm | feature | - | value |
+| `admin.vm.feature.CheckWithNetvm` | vm | feature | - | value |
+| `admin.vm.feature.CheckWithAdminVM` | vm | feature | - | value |
+| `admin.vm.feature.CheckWithTemplateAndAdminVM` | vm | feature | - | value |
+| `admin.vm.feature.Remove` | vm | feature | - | - |
+| `admin.vm.feature.Set` | vm | feature | value | - |
+| `admin.vm.tag.List` | vm | - | - | `\n` |
+| `admin.vm.tag.Get` | vm | tag | - | `0` or `1` | retcode? |
+| `admin.vm.tag.Remove` | vm | tag | - | - |
+| `admin.vm.tag.Set` | vm | tag | - | - |
+| `admin.vm.firewall.Get` | vm | - | - | `\n` | rules syntax as in [firewall interface](/doc/vm-interface/#firewall-rules-in-4x) with addition of `expire=` and `comment=` options; `comment=` (if present) must be the last option
+| `admin.vm.firewall.Set` | vm | - | `\n` | - | set firewall rules, see `admin.vm.firewall.Get` for syntax
+| `admin.vm.firewall.Reload` | vm | - | - | - | force reload firewall without changing any rule
+| `admin.vm.device..Attach` | vm | device | assignment-serialization | - | `device` is in form `+` optional options given in `key=value` format, separated with spaces; options can include `persistent=True` to "persistently" attach the device (default is temporary)
+| `admin.vm.device..Detach` | vm | device | - | - | `device` is in form `+`.
+| `admin.vm.device..Assign` | vm | device | assignment-serialization | - | `device` is in form `+` `assignment-serialization` is specified in the section Device Serialization.
+| `admin.vm.device..Unassign` | vm | device | - | - | `device` is in form `+`.
+| `admin.vm.device..Set.required` | vm | device | `True`\|`False` | - | `device` is in form `+`
+| `admin.vm.deviceclass.List` | `dom0` | - | - | `\n` |
+| `admin.vm.device..Available` | vm | device-ident | - | `\n` | optional service argument may be used to get info about a single device, `device-serialization` is specified in the section Device Serialization.
+| `admin.vm.device..Assigned` | vm | device-ident | - | `\n` | optional service argument may be used to get info about a single device, `assignment-serialization` is specified in the section Device Serialization.
+| `admin.vm.device..Attached` | vm | device-ident | - | `\n` | optional service argument may be used to get info about a single device, `assignment-serialization` is specified in the section Device Serialization.
+| `admin.pool.List` | `dom0` | - | - | `\n` |
+| `admin.pool.ListDrivers` | `dom0` | - | - | ` ...\n` | Properties allowed in `admin.pool.Add`
+| `admin.pool.Info` | `dom0` | pool | - | `=\n` |
+| `admin.pool.Add` | `dom0` | driver | `=\n` | - |
+| `admin.pool.Set.revisions_to_keep` | `dom0` | pool | `` | - |
+| `admin.pool.Remove` | `dom0` | pool | - | - |
+| `admin.pool.volume.List` | `dom0` | pool | - | volume id |
+| `admin.pool.volume.Info` | `dom0` | pool | vid | `=\n` |
+| `admin.pool.volume.Set.revisions_to_keep` | `dom0` | pool | `` | - |
+| `admin.pool.volume.ListSnapshots` | `dom0` | pool | vid | `\n` |
+| `admin.pool.volume.Snapshot` | `dom0` | pool | vid | snapshot |
+| `admin.pool.volume.Revert` | `dom0` | pool | `` | - |
+| `admin.pool.volume.Resize` | `dom0` | pool | `` | - |
+| `admin.pool.volume.Import` | `dom0` | pool | `\n` | - |
+| `admin.pool.volume.CloneFrom` | `dom0` | pool | vid | token, to be used in `admin.pool.volume.CloneTo` | obtain a token to copy volume `vid` in `pool`; the token is one time use only, it's invalidated by `admin.pool.volume.CloneTo`, even if the operation fails |
+| `admin.pool.volume.CloneTo` | `dom0` | pool | `` | - | copy volume pointed by a token to volume `vid` in `pool` |
+| `admin.vm.volume.List` | vm | - | - | `\n` | `` is per-VM volume name (`root`, `private`, etc), `` is pool-unique volume id
+| `admin.vm.volume.Info` | vm | volume | - | `=\n` |
+| `admin.vm.volume.Set.revisions_to_keep` | vm | volume | value | - |
+| `admin.vm.volume.ListSnapshots` | vm | volume | - | snapshot | duplicate of `admin.pool.volume.`, but with other call params |
+| `admin.vm.volume.Snapshot` | vm | volume | - | snapshot | id. |
+| `admin.vm.volume.Revert` | vm | volume | snapshot | - | id. |
+| `admin.vm.volume.Resize` | vm | volume | size_in_bytes | - | id. |
+| `admin.vm.volume.Import` | vm | volume | raw volume data | - | id. |
+| `admin.vm.volume.ImportWithSize` | vm | volume | `\n` | - | new version of `admin.vm.volume.Import`, allows new volume to be different size |
+| `admin.vm.volume.Clear` | vm | volume | - | - | clear contents of volume |
+| `admin.vm.volume.CloneFrom` | vm | volume | - | token, to be used in `admin.vm.volume.CloneTo` | obtain a token to copy `volume` of `vm`; the token is one time use only, it's invalidated by `admin.vm.volume.CloneTo`, even if the operation fails |
+| `admin.vm.volume.CloneTo` | vm | volume | token, obtained with `admin.vm.volume.CloneFrom` | - | copy volume pointed by a token to `volume` of `vm` |
+| `admin.vm.CurrentState` | vm | - | - | `=\n` | state properties: `power_state`, `mem`, `mem_static_max`, `cputime`
+| `admin.vm.Start` | vm | - | - | - |
+| `admin.vm.Shutdown` | vm | - | - | - |
+| `admin.vm.Pause` | vm | - | - | - |
+| `admin.vm.Unpause` | vm | - | - | - |
+| `admin.vm.Kill` | vm | - | - | - |
+| `admin.backup.Execute` | `dom0` | config id | - | - | config in `/etc/qubes/backup/.conf`, only one backup operation of given `config id` can be running at once |
+| `admin.backup.Info` | `dom0` | config id | - | backup info | info what would be included in the backup
+| `admin.backup.Cancel` | `dom0` | config id | - | - | cancel running backup operation
+| `admin.Events` | `dom0 | vm` | - | - | events |
+| `admin.vm.Stats` | `dom0 | vm` | - | - | `vm-stats` events, see below | emit VM statistics (CPU, memory usage) in form of events
Volume properties:
@@ -302,6 +305,58 @@ destination_vm: sys-net
destination_path: ncftpput -u my-ftp-username -p my-ftp-pass -c my-ftp-server /directory/for/backups
```
+## Device Serialization
+
+Both device and assignment serialization is ASCII-encoded and contains
+space-separated key-value pairs. The format includes an `=` between the key
+and value, and the value is always enclosed in single quotes (`'`).
+Values may contain spaces or even single quotes, which are escaped with a backslash.
+If a value is not set (`None`), it is represented as `'unknown'`.
+For boolean values, `True` is represented as `'yes'`, and `False` as `'no'`.
+The order of key-value pairs is irrelevant. Keys starting with `_`
+are considered extra properties and are saved in `data` or `options`
+for device or assignment respectively.
+
+Information about the serialization format of specific properties can be found below.
+
+Format:
+```
+='' ='' =''...
+```
+
+Detailed serialization format for a device:
+
+- `ident=''`
+- `backend_domain='