Skip to content

Commit

Permalink
Merge pull request #262583 from ElvishJerricco/systemd-stage-1-shells
Browse files Browse the repository at this point in the history
systemd-stage-1: Support for user shells
  • Loading branch information
ElvishJerricco committed Oct 29, 2023
2 parents b9d8a73 + 22325ce commit 5cea7ee
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
17 changes: 14 additions & 3 deletions nixos/modules/config/users-groups.nix
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,14 @@ in {
defaultText = literalExpression "config.users.users.\${name}.group";
default = cfg.users.${name}.group;
};
options.shell = mkOption {
type = types.passwdEntry types.path;
description = ''
The path to the user's shell in initrd.
'';
default = "${pkgs.shadow}/bin/nologin";
defaultText = literalExpression "\${pkgs.shadow}/bin/nologin";
};
}));
};

Expand Down Expand Up @@ -750,17 +758,20 @@ in {
boot.initrd.systemd = lib.mkIf config.boot.initrd.systemd.enable {
contents = {
"/etc/passwd".text = ''
${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: { uid, group }: let
${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: { uid, group, shell }: let
g = config.boot.initrd.systemd.groups.${group};
in "${n}:x:${toString uid}:${toString g.gid}::/var/empty:") config.boot.initrd.systemd.users)}
in "${n}:x:${toString uid}:${toString g.gid}::/var/empty:${shell}") config.boot.initrd.systemd.users)}
'';
"/etc/group".text = ''
${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: { gid }: "${n}:x:${toString gid}:") config.boot.initrd.systemd.groups)}
'';
"/etc/shells".text = lib.concatStringsSep "\n" (lib.unique (lib.mapAttrsToList (_: u: u.shell) config.boot.initrd.systemd.users)) + "\n";
};

storePaths = [ "${pkgs.shadow}/bin/nologin" ];

users = {
root = {};
root = { shell = lib.mkDefault "/bin/bash"; };
nobody = {};
};

Expand Down
11 changes: 6 additions & 5 deletions nixos/modules/system/boot/initrd-ssh.nix
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,12 @@ in
for instructions.
'';
}

{
assertion = config.boot.initrd.systemd.enable -> cfg.shell == null;
message = "systemd stage 1 does not support boot.initrd.network.ssh.shell";
}
];

warnings = lib.optional (config.boot.initrd.systemd.enable -> cfg.shell != null) ''
Please set 'boot.initrd.systemd.users.root.shell' instead of 'boot.initrd.network.ssh.shell'
'';

boot.initrd.extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
copy_bin_and_libs ${package}/bin/sshd
cp -pv ${pkgs.glibc.out}/lib/libnss_files.so.* $out/lib
Expand Down Expand Up @@ -235,6 +234,8 @@ in
users.sshd = { uid = 1; group = "sshd"; };
groups.sshd = { gid = 1; };

users.root.shell = mkIf (config.boot.initrd.network.ssh.shell != null) config.boot.initrd.network.ssh.shell;

contents."/etc/ssh/authorized_keys.d/root".text =
concatStringsSep "\n" config.boot.initrd.network.ssh.authorizedKeys;
contents."/etc/ssh/sshd_config".text = sshdConfig;
Expand Down

0 comments on commit 5cea7ee

Please sign in to comment.