diff --git a/modules/nixos/base/ssh.nix b/modules/nixos/base/ssh.nix index d5b0517d..3aaf2900 100644 --- a/modules/nixos/base/ssh.nix +++ b/modules/nixos/base/ssh.nix @@ -11,7 +11,7 @@ # in modules/nixos/desktop/ssh.nix (needed for GUI forwarding). X11Forwarding = lib.mkDefault false; # root user is used for remote deployment, so we need to allow it - PermitRootLogin = "prohibit-password"; + PermitRootLogin = lib.mkDefault "prohibit-password"; PasswordAuthentication = false; # disable password login }; openFirewall = true; diff --git a/modules/nixos/desktop/networking/remote-desktop.nix b/modules/nixos/desktop/networking/remote-desktop.nix index 60581c5a..181f4c6e 100644 --- a/modules/nixos/desktop/networking/remote-desktop.nix +++ b/modules/nixos/desktop/networking/remote-desktop.nix @@ -1,7 +1,5 @@ { - config, lib, - myvars, pkgs, ... }: @@ -34,7 +32,7 @@ services.sunshine = { enable = lib.mkDefault false; # default to false, for security reasons. autoStart = true; - capSysAdmin = true; # only needed for Wayland -- omit this when using with Xorg + capSysAdmin = false; openFirewall = true; settings = { # pc - Only localhost may access the web ui @@ -45,6 +43,4 @@ wan_encryption_mode = 2; }; }; - - users.users."${myvars.username}".extraGroups = lib.mkIf config.services.sunshine.enable [ "input" ]; } diff --git a/modules/nixos/desktop/ssh.nix b/modules/nixos/desktop/ssh.nix index 5e000e1d..26bc5258 100644 --- a/modules/nixos/desktop/ssh.nix +++ b/modules/nixos/desktop/ssh.nix @@ -1,5 +1,8 @@ { # Desktops keep X11 forwarding (current behavior, needed for GUI forwarding); # servers default to off (see modules/nixos/base/ssh.nix). - services.openssh.settings.X11Forwarding = true; + services.openssh.settings = { + PermitRootLogin = "no"; + X11Forwarding = true; + }; } diff --git a/outputs/aarch64-linux/tests/security-ssh-x11/expected.nix b/outputs/aarch64-linux/tests/security-ssh-x11/expected.nix index 6ca2c34e..994d3888 100644 --- a/outputs/aarch64-linux/tests/security-ssh-x11/expected.nix +++ b/outputs/aarch64-linux/tests/security-ssh-x11/expected.nix @@ -3,5 +3,12 @@ outputs, }: lib.genAttrs (builtins.attrNames outputs.nixosConfigurations) ( - name: name == "ai-niri" || name == "shoukei-niri" + name: + let + isDesktop = name == "ai-niri" || name == "shoukei-niri"; + in + { + X11Forwarding = isDesktop; + PermitRootLogin = if isDesktop then "no" else "prohibit-password"; + } ) diff --git a/outputs/aarch64-linux/tests/security-ssh-x11/expr.nix b/outputs/aarch64-linux/tests/security-ssh-x11/expr.nix index 5905f493..8fbf18e7 100644 --- a/outputs/aarch64-linux/tests/security-ssh-x11/expr.nix +++ b/outputs/aarch64-linux/tests/security-ssh-x11/expr.nix @@ -3,5 +3,11 @@ outputs, }: lib.genAttrs (builtins.attrNames outputs.nixosConfigurations) ( - name: outputs.nixosConfigurations.${name}.config.services.openssh.settings.X11Forwarding + name: + let + settings = outputs.nixosConfigurations.${name}.config.services.openssh.settings; + in + { + inherit (settings) PermitRootLogin X11Forwarding; + } ) diff --git a/outputs/x86_64-linux/tests/idols-ai-gpu/expected.nix b/outputs/x86_64-linux/tests/idols-ai-gpu/expected.nix index 2a00a1c4..13b77e7f 100644 --- a/outputs/x86_64-linux/tests/idols-ai-gpu/expected.nix +++ b/outputs/x86_64-linux/tests/idols-ai-gpu/expected.nix @@ -2,7 +2,8 @@ loadsVirtualDisplay = true; createsVirtualDisplay = true; niriUsesIntelRenderer = true; - sunshineUserHasInputAccess = true; + sunshineUserHasInputAccess = false; + sunshineHasSysAdmin = false; sunshineStartsAfterNiri = true; sunshineWaitsForNiriOutput = true; } diff --git a/outputs/x86_64-linux/tests/idols-ai-gpu/expr.nix b/outputs/x86_64-linux/tests/idols-ai-gpu/expr.nix index ebe0f64c..7c3063a6 100644 --- a/outputs/x86_64-linux/tests/idols-ai-gpu/expr.nix +++ b/outputs/x86_64-linux/tests/idols-ai-gpu/expr.nix @@ -12,6 +12,7 @@ in createsVirtualDisplay = lib.hasInfix "options vkms create_default_dev=1" cfg.boot.extraModprobeConfig; niriUsesIntelRenderer = lib.hasInfix "/dev/dri/by-path/pci-0000:00:02.0-render" niriHardware; sunshineUserHasInputAccess = builtins.elem "input" cfg.users.users.ryan.extraGroups; + sunshineHasSysAdmin = cfg.services.sunshine.capSysAdmin; sunshineStartsAfterNiri = builtins.elem "niri.service" cfg.systemd.user.services.sunshine.after; sunshineWaitsForNiriOutput = lib.hasInfix "niri msg outputs" cfg.systemd.user.services.sunshine.preStart; } diff --git a/outputs/x86_64-linux/tests/security-ssh-x11/expected.nix b/outputs/x86_64-linux/tests/security-ssh-x11/expected.nix index 6ca2c34e..994d3888 100644 --- a/outputs/x86_64-linux/tests/security-ssh-x11/expected.nix +++ b/outputs/x86_64-linux/tests/security-ssh-x11/expected.nix @@ -3,5 +3,12 @@ outputs, }: lib.genAttrs (builtins.attrNames outputs.nixosConfigurations) ( - name: name == "ai-niri" || name == "shoukei-niri" + name: + let + isDesktop = name == "ai-niri" || name == "shoukei-niri"; + in + { + X11Forwarding = isDesktop; + PermitRootLogin = if isDesktop then "no" else "prohibit-password"; + } ) diff --git a/outputs/x86_64-linux/tests/security-ssh-x11/expr.nix b/outputs/x86_64-linux/tests/security-ssh-x11/expr.nix index 5905f493..8fbf18e7 100644 --- a/outputs/x86_64-linux/tests/security-ssh-x11/expr.nix +++ b/outputs/x86_64-linux/tests/security-ssh-x11/expr.nix @@ -3,5 +3,11 @@ outputs, }: lib.genAttrs (builtins.attrNames outputs.nixosConfigurations) ( - name: outputs.nixosConfigurations.${name}.config.services.openssh.settings.X11Forwarding + name: + let + settings = outputs.nixosConfigurations.${name}.config.services.openssh.settings; + in + { + inherit (settings) PermitRootLogin X11Forwarding; + } )