credentials: add policy that can allow key=null creds from the ESP (#42555)
This PR only sets the default to "relaxed" - I can change the default to "tofu" if desired. But for that we will also need to update the NEWS file to ensure everyone is aware of this new default. --- This PR adds a new `systemd.credentials-boot=` kernel commandline that allows to control if credentials with a `null` key are accepted. The possible options are: * strict: always insist on tpm encryption * tofu: allow null encryption in firstboot mode and when no tpm is available * relaxed: allow null encryption when sb is off, or no tpm is available * off: allow null encryption always The default is `relaxed` which is exactly the behavior we had before. This replaces the initial idea of using plaintext credentials at firstboot (thanks to Lennart for this nicer and simpler design). --- With that we can drop `- firstboot: optionally accept credentials at firstboot without authentication` from TODO.md
This commit is contained in:
+1
-23
@@ -966,28 +966,6 @@ static int condition_test_needs_update(Condition *c, char **env) {
|
||||
return timespec_load_nsec(&usr.st_mtim) > timestamp;
|
||||
}
|
||||
|
||||
static bool in_first_boot(void) {
|
||||
static int first_boot = -1;
|
||||
int r;
|
||||
|
||||
if (first_boot >= 0)
|
||||
return first_boot;
|
||||
|
||||
const char *e = secure_getenv("SYSTEMD_FIRST_BOOT");
|
||||
if (e) {
|
||||
r = parse_boolean(e);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to parse $SYSTEMD_FIRST_BOOT, ignoring: %m");
|
||||
else
|
||||
return (first_boot = r);
|
||||
}
|
||||
|
||||
r = RET_NERRNO(access("/run/systemd/first-boot", F_OK));
|
||||
if (r < 0 && r != -ENOENT)
|
||||
log_debug_errno(r, "Failed to check if /run/systemd/first-boot exists, assuming no: %m");
|
||||
return r >= 0;
|
||||
}
|
||||
|
||||
static int condition_test_first_boot(Condition *c, char **env) {
|
||||
int r;
|
||||
|
||||
@@ -1002,7 +980,7 @@ static int condition_test_first_boot(Condition *c, char **env) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return in_first_boot() == r;
|
||||
return (in_first_boot() > 0) == r;
|
||||
}
|
||||
|
||||
static int condition_test_environment(Condition *c, char **env) {
|
||||
|
||||
Reference in New Issue
Block a user