Skip to content

Commit 934455f

Browse files
authored
Fix silent failures in SELinux enabled distros and when keyring is not available (#114)
In order for qubesome to work in environments where SELinux is enforced the container execution needs to opt-out from SELinux. For profiles, it is likely that this will be reverse once we ship a qubesome-specific SELinux policy. For general workloads that is less likely. This changes will also ensure that mtls data storage errors does not cause a hard failure.
2 parents 4ea9f5e + 5c0c63d commit 934455f

File tree

3 files changed

+35
-20
lines changed

3 files changed

+35
-20
lines changed

internal/profiles/profiles.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,8 @@ func createNewDisplay(bin string, ca, cert, key []byte, profile *types.Profile,
557557
"-e", "Q_MTLS_CERT",
558558
"-e", "Q_MTLS_KEY",
559559
"--device", "/dev/dri",
560-
"--security-opt=no-new-privileges:true",
560+
"--security-opt=no-new-privileges=true",
561+
"--security-opt=label=disable",
561562
"--cap-drop=ALL",
562563
}
563564

@@ -687,7 +688,7 @@ func createNewDisplay(bin string, ca, cert, key []byte, profile *types.Profile,
687688

688689
err = storeMtlsData(profile.Name, string(ca), string(cert), string(key))
689690
if err != nil {
690-
return err
691+
slog.Error("failed storing mtls data", "error", err)
691692
}
692693

693694
output, err := cmd.CombinedOutput()

internal/runners/docker/run.go

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func Run(ew types.EffectiveWorkload) error {
6060
"--rm",
6161
"-d",
6262
"--security-opt=seccomp=unconfined",
63+
"--security-opt=label=disable",
6364
"--security-opt=no-new-privileges=true",
6465
}
6566

@@ -271,27 +272,16 @@ func Run(ew types.EffectiveWorkload) error {
271272
// Since the implementation of mTLS, workloads granted mime handling
272273
// need the mTLS creds so that they can communicate with the inception
273274
// server.
274-
ks := keyring.New(ew.Profile.Name, backend.New())
275-
ca, err := ks.Get(keyring.MtlsCA)
276-
if err != nil {
277-
return err
278-
}
279275

280-
cert, err := ks.Get(keyring.MtlsClientCert)
281-
if err != nil {
282-
return err
283-
}
276+
if ca, cert, key, ok := mtlsData(ew.Profile.Name); ok {
277+
slog.Debug("mime access: enabled")
284278

285-
key, err := ks.Get(keyring.MtlsClientKey)
286-
if err != nil {
287-
return err
279+
cmd.Env = append(os.Environ(), "Q_MTLS_CA="+ca)
280+
cmd.Env = append(cmd.Env, "Q_MTLS_CERT="+cert)
281+
cmd.Env = append(cmd.Env, "Q_MTLS_KEY="+key)
282+
} else {
283+
slog.Debug("mime access: skipped")
288284
}
289-
290-
slog.Debug("enabling mime access")
291-
292-
cmd.Env = append(os.Environ(), "Q_MTLS_CA="+ca)
293-
cmd.Env = append(cmd.Env, "Q_MTLS_CERT="+cert)
294-
cmd.Env = append(cmd.Env, "Q_MTLS_KEY="+key)
295285
}
296286

297287
cmd.Stderr = os.Stderr
@@ -301,6 +291,29 @@ func Run(ew types.EffectiveWorkload) error {
301291
return cmd.Run()
302292
}
303293

294+
func mtlsData(name string) (string, string, string, bool) {
295+
ks := keyring.New(name, backend.New())
296+
ca, err := ks.Get(keyring.MtlsCA)
297+
if err != nil {
298+
slog.Error("failed to fetch mtls-ca", "error", err)
299+
return "", "", "", false
300+
}
301+
302+
cert, err := ks.Get(keyring.MtlsClientCert)
303+
if err != nil {
304+
slog.Error("failed to fetch mtls-client-cert", "error", err)
305+
return "", "", "", false
306+
}
307+
308+
key, err := ks.Get(keyring.MtlsClientKey)
309+
if err != nil {
310+
slog.Error("failed to fetch mtls-client-key", "error", err)
311+
return "", "", "", false
312+
}
313+
314+
return ca, cert, key, true
315+
}
316+
304317
func getHomeDir(image string) (string, error) {
305318
args := []string{"run", "--rm", image, "ls", "/home"}
306319

internal/runners/podman/run.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func Run(ew types.EffectiveWorkload) error {
6161
"-d",
6262
"--security-opt=seccomp=unconfined",
6363
"--security-opt=no-new-privileges=true",
64+
"--security-opt=label=disable",
6465
"--group-add=keep-groups",
6566
}
6667

0 commit comments

Comments
 (0)