modules/sss: init

This commit is contained in:
Max Headroom 2021-10-16 14:24:41 +02:00
parent c11d322b5f
commit 0569bdb95b
2 changed files with 72 additions and 0 deletions

View file

@ -12,6 +12,7 @@ let
nix-register-flakes = import ./nix-register-flakes; nix-register-flakes = import ./nix-register-flakes;
shell-config = import ./shell-config; shell-config = import ./shell-config;
ssh = import ./ssh; ssh = import ./ssh;
sss = import ./sss;
}; };
in rec { in rec {
modules = aspects; modules = aspects;

71
modules/sss/default.nix Normal file
View file

@ -0,0 +1,71 @@
{ config, lib, hosts, tools, utils, ... }:
let
inherit (tools.meta) domain;
inherit (tools) identity;
inherit (config.networking) hostName;
inherit (hosts.${hostName}) enterprise interfaces;
toINI = content: lib.generators.toINI {} (iniFilter content);
# apply some extra transformations for INI generation
# 2 layers deep because the attrset for the INI generator does it
iniFilter = builtins.mapAttrs iniFilter';
iniFilter' = k: v: builtins.mapAttrs iniFilter'' v;
iniFilter'' = k: v:
if builtins.isList v then builtins.concatStringsSep ", " v
else if builtins.isBool v then (if v then "True" else "False")
else v;
ipaProvide = services: lib.genAttrs (map (x: "${x}_provider") services) (_: "ipa");
defaultShell = utils.toShellPath config.users.defaultUserShell;
in
{
security.pam.services = lib.genAttrs [ "login" "sshd" ] (_: {
makeHomeDir = true;
sssdStrictAccess = true;
});
services.sssd.enable = true;
services.sssd.sshAuthorizedKeysIntegration = true;
services.sssd.config = toINI {
"domain/${domain}" = {
dns_discovery_domain = domain;
ipa_domain = domain;
ipa_server = [ "_srv_" identity.ldap.server.hostname ];
ipa_hostname = "${lib.toLower hostName}.${enterprise.subdomain}.${domain}";
# TODO: replace with proper cert
ldap_tls_cacert = "${../../data/ca.crt}";
cache_credentials = true;
krb5_store_password_if_offline = true;
dyndns_update = interfaces ? primary.link;
dyndns_iface = interfaces.primary.link or "";
fallback_homedir = "/home/%u@%d";
default_shell = defaultShell;
shell_fallback = defaultShell;
use_fully_qualified_names = false;
} // ipaProvide [
"access"
"auth"
"autofs"
"chpass"
"hostid"
"id"
"session"
"subdomains"
"sudo"
];
sssd = {
domains = domain;
services = [ "nss" "pam" "ssh" "sudo" "autofs" ];
};
nss.homedir_substring = "/home";
pam.pam_cert_auth = true;
};
}