detached 3f47b6d

docs: leave UMask out of the unit and say why (G5)

commit
3f47b6d47d06355ec168abd9856a9db6085239c7
author
brice · · 2026-10-12 19:48 UTC
parent
01928f4
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +9 -3
M README.md +3 -2
@@ -158,7 +158,7 @@ loop mounts, the jailer, Docker), so the unit only takes away what it does not
158158 use: `NoNewPrivileges`, `ProtectHome`, `PrivateTmp`, `ProtectClock`,
159159 `ProtectKernelModules`, `ProtectKernelLogs`, `RestrictSUIDSGID`,
160160 `LockPersonality`, `RestrictRealtime`, `SystemCallArchitectures=native`,
161-`RestrictAddressFamilies` (UNIX, INET, INET6, NETLINK, VSOCK) and `UMask=0077`.
161+`RestrictAddressFamilies` (UNIX, INET, INET6, NETLINK, VSOCK).
162162 Checked on a workstation (a user manager, no root): the micro-VM job test
163163 (`TestVMRunsAJob`: user and network namespaces, Firecracker, TAP, vsock) passes
164164 under every option above except `ProtectHome`, which hides the home directory
@@ -173,7 +173,8 @@ runner turns on `net.ipv4.ip_forward`), `PrivateDevices=` (`/dev/kvm`,
173173 `CapabilityBoundingSet=` and `SystemCallFilter=` (network namespaces and
174174 devices, mounts, capabilities handed to the jailer and Docker),
175175 `MemoryDenyWriteExecute=` (Firecracker maps guest memory writable and
176-executable). The boundary of a job is its micro-VM or container, not this unit;
176+executable), `UMask=` (the drivers create directories that the job's user must
177+enter, with explicit modes; the state directory is made 0700 by the runner). The boundary of a job is its micro-VM or container, not this unit;
177178 the unit cannot be tested end to end without a rootful host, so the options that
178179 would only break it silently are left out.
179180
@@ -158,7 +158,7 @@ loop mounts, the jailer, Docker), so the unit only takes away what it does not
158 use: `NoNewPrivileges`, `ProtectHome`, `PrivateTmp`, `ProtectClock`,158 use: `NoNewPrivileges`, `ProtectHome`, `PrivateTmp`, `ProtectClock`,
159 `ProtectKernelModules`, `ProtectKernelLogs`, `RestrictSUIDSGID`,159 `ProtectKernelModules`, `ProtectKernelLogs`, `RestrictSUIDSGID`,
160 `LockPersonality`, `RestrictRealtime`, `SystemCallArchitectures=native`,160 `LockPersonality`, `RestrictRealtime`, `SystemCallArchitectures=native`,
161-`RestrictAddressFamilies` (UNIX, INET, INET6, NETLINK, VSOCK) and `UMask=0077`.161+`RestrictAddressFamilies` (UNIX, INET, INET6, NETLINK, VSOCK).
162 Checked on a workstation (a user manager, no root): the micro-VM job test162 Checked on a workstation (a user manager, no root): the micro-VM job test
163 (`TestVMRunsAJob`: user and network namespaces, Firecracker, TAP, vsock) passes163 (`TestVMRunsAJob`: user and network namespaces, Firecracker, TAP, vsock) passes
164 under every option above except `ProtectHome`, which hides the home directory164 under every option above except `ProtectHome`, which hides the home directory
@@ -173,7 +173,8 @@ runner turns on `net.ipv4.ip_forward`), `PrivateDevices=` (`/dev/kvm`,
173 `CapabilityBoundingSet=` and `SystemCallFilter=` (network namespaces and173 `CapabilityBoundingSet=` and `SystemCallFilter=` (network namespaces and
174 devices, mounts, capabilities handed to the jailer and Docker),174 devices, mounts, capabilities handed to the jailer and Docker),
175 `MemoryDenyWriteExecute=` (Firecracker maps guest memory writable and175 `MemoryDenyWriteExecute=` (Firecracker maps guest memory writable and
176-executable). The boundary of a job is its micro-VM or container, not this unit;176+executable), `UMask=` (the drivers create directories that the job's user must
177+enter, with explicit modes; the state directory is made 0700 by the runner). The boundary of a job is its micro-VM or container, not this unit;
177 the unit cannot be tested end to end without a rootful host, so the options that178 the unit cannot be tested end to end without a rootful host, so the options that
178 would only break it silently are left out.179 would only break it silently are left out.
179 180
M contrib/ermite-runner.service +6 -1
@@ -38,7 +38,6 @@ TimeoutStopSec=120
3838 StateDirectory=ermite-runner
3939 StateDirectoryMode=0700
4040 RuntimeDirectory=ermite-runner
41-UMask=0077
4241
4342 # Jobs are many processes.
4443 TasksMax=infinity
@@ -96,3 +95,9 @@ WantedBy=multi-user.target
9695 # boundary of a job is the micro-VM or the container, not
9796 # this unit.
9897 # ProtectControlGroups= The jailer writes the cgroups of the VMs.
98+# UMask=0077 The state directory is made 0700 by the runner itself, and the
99+# drivers create directories that the job's user must be able
100+# to enter (the scratch disk's work and tmp directories are
101+# made with mode 0755): a restrictive umask would turn them
102+# into root-only directories, which cannot be tested without
103+# a rootful host.
@@ -38,7 +38,6 @@ TimeoutStopSec=120
38 StateDirectory=ermite-runner38 StateDirectory=ermite-runner
39 StateDirectoryMode=070039 StateDirectoryMode=0700
40 RuntimeDirectory=ermite-runner40 RuntimeDirectory=ermite-runner
41-UMask=0077
42 41
43 # Jobs are many processes.42 # Jobs are many processes.
44 TasksMax=infinity43 TasksMax=infinity
@@ -96,3 +95,9 @@ WantedBy=multi-user.target
96 # boundary of a job is the micro-VM or the container, not95 # boundary of a job is the micro-VM or the container, not
97 # this unit.96 # this unit.
98 # ProtectControlGroups= The jailer writes the cgroups of the VMs.97 # ProtectControlGroups= The jailer writes the cgroups of the VMs.
98+# UMask=0077 The state directory is made 0700 by the runner itself, and the
99+# drivers create directories that the job's user must be able
100+# to enter (the scratch disk's work and tmp directories are
101+# made with mode 0755): a restrictive umask would turn them
102+# into root-only directories, which cannot be tested without
103+# a rootful host.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 11

↑↓ moveenter openesc close