From 303f53af0f920e7dea4a4c6cde6f373b540f85bd Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Sun, 8 Dec 2024 15:41:24 +0100 Subject: [PATCH] chore: Apply the abstraction to ap01 --- hive.nix | 19 ++-- .../{ => liminix}/ap01/_configuration.nix | 1 - machines/{ => liminix}/ap01/addresses.nix | 0 machines/{ => liminix}/ap01/dns.nix | 0 machines/{ => liminix}/ap01/ipc.nix | 0 machines/{ => liminix}/ap01/lan.nix | 0 machines/{ => liminix}/ap01/management.nix | 0 machines/{ => liminix}/ap01/metadata.nix | 0 machines/{ => liminix}/ap01/recovery.nix | 0 machines/{ => liminix}/ap01/system.nix | 0 machines/{ => liminix}/ap01/wlan.nix | 0 modules/liminix/default.nix | 6 ++ modules/liminix/dgn-access-control.nix | 89 +++++++++++++++++++ modules/nixos/dgn-access-control.nix | 32 +++---- 14 files changed, 120 insertions(+), 27 deletions(-) rename machines/{ => liminix}/ap01/_configuration.nix (96%) rename machines/{ => liminix}/ap01/addresses.nix (100%) rename machines/{ => liminix}/ap01/dns.nix (100%) rename machines/{ => liminix}/ap01/ipc.nix (100%) rename machines/{ => liminix}/ap01/lan.nix (100%) rename machines/{ => liminix}/ap01/management.nix (100%) rename machines/{ => liminix}/ap01/metadata.nix (100%) rename machines/{ => liminix}/ap01/recovery.nix (100%) rename machines/{ => liminix}/ap01/system.nix (100%) rename machines/{ => liminix}/ap01/wlan.nix (100%) create mode 100644 modules/liminix/default.nix create mode 100644 modules/liminix/dgn-access-control.nix diff --git a/hive.nix b/hive.nix index 8aea0c8..b3e9e54 100644 --- a/hive.nix +++ b/hive.nix @@ -102,11 +102,20 @@ in }) args; - defaults = _: { - # It's impure, but who cares? - # Can Flakes even do that? :) - nixpkgs.buildPlatform = builtins.currentSystem; - }; + defaults = + { name, nodePath, ... }: + { + # Import the default modules + imports = [ + # Import the base configuration for each node + ./${nodePath}/_configuration.nix + ./modules/generic + ./modules/${category name} + ]; + # It's impure, but who cares? + # Can Flakes even do that? :) + nixpkgs.buildPlatform = builtins.currentSystem; + }; }; nixos = { diff --git a/machines/ap01/_configuration.nix b/machines/liminix/ap01/_configuration.nix similarity index 96% rename from machines/ap01/_configuration.nix rename to machines/liminix/ap01/_configuration.nix index ebdd302..e7766f0 100644 --- a/machines/ap01/_configuration.nix +++ b/machines/liminix/ap01/_configuration.nix @@ -15,7 +15,6 @@ "${modulesPath}/jitter-rng" "${modulesPath}/pki" "${modulesPath}/ubus" - ../../modules/dgn-access-control.nix # System-level configuration ./system.nix # Configures our own WLAN. diff --git a/machines/ap01/addresses.nix b/machines/liminix/ap01/addresses.nix similarity index 100% rename from machines/ap01/addresses.nix rename to machines/liminix/ap01/addresses.nix diff --git a/machines/ap01/dns.nix b/machines/liminix/ap01/dns.nix similarity index 100% rename from machines/ap01/dns.nix rename to machines/liminix/ap01/dns.nix diff --git a/machines/ap01/ipc.nix b/machines/liminix/ap01/ipc.nix similarity index 100% rename from machines/ap01/ipc.nix rename to machines/liminix/ap01/ipc.nix diff --git a/machines/ap01/lan.nix b/machines/liminix/ap01/lan.nix similarity index 100% rename from machines/ap01/lan.nix rename to machines/liminix/ap01/lan.nix diff --git a/machines/ap01/management.nix b/machines/liminix/ap01/management.nix similarity index 100% rename from machines/ap01/management.nix rename to machines/liminix/ap01/management.nix diff --git a/machines/ap01/metadata.nix b/machines/liminix/ap01/metadata.nix similarity index 100% rename from machines/ap01/metadata.nix rename to machines/liminix/ap01/metadata.nix diff --git a/machines/ap01/recovery.nix b/machines/liminix/ap01/recovery.nix similarity index 100% rename from machines/ap01/recovery.nix rename to machines/liminix/ap01/recovery.nix diff --git a/machines/ap01/system.nix b/machines/liminix/ap01/system.nix similarity index 100% rename from machines/ap01/system.nix rename to machines/liminix/ap01/system.nix diff --git a/machines/ap01/wlan.nix b/machines/liminix/ap01/wlan.nix similarity index 100% rename from machines/ap01/wlan.nix rename to machines/liminix/ap01/wlan.nix diff --git a/modules/liminix/default.nix b/modules/liminix/default.nix new file mode 100644 index 0000000..0eb1ae6 --- /dev/null +++ b/modules/liminix/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + # List of modules to import + ./dgn-access-control.nix + ]; +} diff --git a/modules/liminix/dgn-access-control.nix b/modules/liminix/dgn-access-control.nix new file mode 100644 index 0000000..49cf8ae --- /dev/null +++ b/modules/liminix/dgn-access-control.nix @@ -0,0 +1,89 @@ +# Copyright : +# - Tom Hubrecht 2023 +# +# Ce logiciel est un programme informatique servant à déployer des +# configurations de serveurs via NixOS. +# +# Ce logiciel est régi par la licence CeCILL soumise au droit français et +# respectant les principes de diffusion des logiciels libres. Vous pouvez +# utiliser, modifier et/ou redistribuer ce programme sous les conditions +# de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA +# sur le site "http://www.cecill.info". +# +# En contrepartie de l'accessibilité au code source et des droits de copie, +# de modification et de redistribution accordés par cette licence, il n'est +# offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, +# seule une responsabilité restreinte pèse sur l'auteur du programme, le +# titulaire des droits patrimoniaux et les concédants successifs. +# +# A cet égard l'attention de l'utilisateur est attirée sur les risques +# associés au chargement, à l'utilisation, à la modification et/ou au +# développement et à la reproduction du logiciel par l'utilisateur étant +# donné sa spécificité de logiciel libre, qui peut le rendre complexe à +# manipuler et qui le réserve donc à des développeurs et des professionnels +# avertis possédant des connaissances informatiques approfondies. Les +# utilisateurs sont donc invités à charger et tester l'adéquation du +# logiciel à leurs besoins dans des conditions permettant d'assurer la +# sécurité de leurs systèmes et ou de leurs données et, plus généralement, +# à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. +# +# Le fait que vous puissiez accéder à cet en-tête signifie que vous avez +# pris connaissance de la licence CeCILL, et que vous en avez accepté les +# termes. + +{ + config, + lib, + dgn-keys, + meta, + nodeMeta, + ... +}: + +let + inherit (lib) + mkDefault + mkEnableOption + mkIf + mkOption + + types + ; + + admins = + meta.organization.groups.root + ++ nodeMeta.admins + ++ (builtins.concatMap (g: meta.organization.groups.${g}) nodeMeta.adminGroups); + + cfg = config.dgn-access-control; +in + +{ + options.dgn-access-control = { + enable = mkEnableOption "DGNum access control." // { + default = true; + }; + + users = mkOption { + type = with types; attrsOf (listOf str); + default = { }; + description = '' + Attribute set describing which member has access to which user on the node. + Members must be declared in `meta/members.nix`. + ''; + example = '' + { + user1 = [ "member1" "member2" ]; + } + ''; + }; + }; + + config = mkIf cfg.enable { + # Admins have root access to the node + dgn-access-control.users.root = mkDefault admins; + users = builtins.mapAttrs (_: members: { + openssh.authorizedKeys.keys = dgn-keys.getKeys members; + }) cfg.users; + }; +} diff --git a/modules/nixos/dgn-access-control.nix b/modules/nixos/dgn-access-control.nix index 8ecb67b..9306eba 100644 --- a/modules/nixos/dgn-access-control.nix +++ b/modules/nixos/dgn-access-control.nix @@ -45,7 +45,6 @@ let mkDefault mkEnableOption mkIf - mkMerge mkOption optionalAttrs @@ -81,25 +80,16 @@ in }; }; - config = mkIf cfg.enable (mkMerge [ - { - # Admins have root access to the node - dgn-access-control.users.root = mkDefault admins; - } - (optionalAttrs (nodeMeta.nixpkgs.system == "nixos") { - users.mutableUsers = false; - users.users = builtins.mapAttrs ( - username: members: - { - openssh.authorizedKeys.keys = dgn-keys.getKeys members; - } - // optionalAttrs (username == "root") { inherit (nodeMeta) hashedPassword; } - ) cfg.users; - }) - (optionalAttrs (nodeMeta.nixpkgs.system == "zyxel-nwa50ax") { - users = builtins.mapAttrs (_: members: { + config = mkIf cfg.enable { + # Admins have root access to the node + dgn-access-control.users.root = mkDefault admins; + users.mutableUsers = false; + users.users = builtins.mapAttrs ( + username: members: + { openssh.authorizedKeys.keys = dgn-keys.getKeys members; - }) cfg.users; - }) - ]); + } + // optionalAttrs (username == "root") { inherit (nodeMeta) hashedPassword; } + ) cfg.users; + }; }