refact dovecot,auth: tmpfiles, minor renames, config-paths-needed.json

This commit is contained in:
Alexander Tomokhov
2025-04-17 13:12:23 +04:00
parent 90758a2652
commit eb200cb792
2 changed files with 17 additions and 19 deletions

View File

@@ -13,15 +13,9 @@ let
is-auth-enabled
;
runtime-directory = group;
runtime-folder = group;
keysPath = auth-passthru.keys-path;
kanidmExecStartPreScriptRoot = pkgs.writeShellScript
"mailserver-kanidm-ExecStartPre-root-script.sh"
''
# set-group-ID bit allows for kanidm user to create files inheriting group
mkdir -p -v --mode=u+rwx,g+rs,g-w,o-rwx /run/keys/${group}
chown kanidm:${group} /run/keys/${group}
'';
# create service account token, needed for LDAP
kanidmExecStartPostScript = pkgs.writeShellScript
"mailserver-kanidm-ExecStartPost-script.sh"
@@ -71,7 +65,7 @@ let
fi
'';
ldapConfFile = "/run/${runtime-directory}/dovecot-ldap.conf.ext";
ldapConfFile = "/run/${runtime-folder}/dovecot-ldap.conf.ext";
mkLdapSearchScope = scope: (
if scope == "sub" then "subtree"
else if scope == "one" then "onelevel"
@@ -108,14 +102,14 @@ let
};
oauth-client-id = "mailserver";
oauth-client-secret-fp =
"/run/keys/${group}/kanidm-oauth-client-secret";
"${keysPath}/${group}/kanidm-oauth-client-secret";
oauth-secret-ExecStartPreScript = pkgs.writeShellScript
"${oauth-client-id}-kanidm-ExecStartPre-script.sh" ''
set -o xtrace
[ -f "${oauth-client-secret-fp}" ] || \
"${lib.getExe pkgs.openssl}" rand -base64 32 | tr "\n:@/+=" "012345" > "${oauth-client-secret-fp}"
'';
dovecot-oauth2-conf-fp = "/run/${runtime-directory}/dovecot-oauth2.conf.ext";
dovecot-oauth2-conf-fp = "/run/${runtime-folder}/dovecot-oauth2.conf.ext";
write-dovecot-oauth2-conf = appendSetting {
name = "oauth2-conf-file";
file = builtins.toFile "dovecot-oauth2.conf.ext.template" ''
@@ -136,8 +130,13 @@ let
};
in
{
# for dovecot2 to have access to get through /run/keys directory
# for dovecot2 to have access to get through ${keysPath} directory
users.groups.keys.members = [ group ];
systemd.tmpfiles.settings."kanidm-secrets"."${keysPath}/${group}".d = {
user = "kanidm";
inherit group;
mode = "2750";
};
mailserver.ldap = {
# note: in `ldapsearch` first comes filter, then attributes
@@ -189,24 +188,19 @@ in
'';
services.dovecot2.enablePAM = false;
systemd.services.dovecot2 = {
# TODO does it merge with existing preStart?
preStart = setPwdInLdapConfFile + "\n" + write-dovecot-oauth2-conf + "\n";
# FIXME pass dependant services to auth module option instead?
after = [ auth-passthru.oauth2-systemd-service ];
requires = [ auth-passthru.oauth2-systemd-service ];
serviceConfig.RuntimeDirectory = lib.mkForce [ runtime-directory ];
serviceConfig.RuntimeDirectory = lib.mkForce [ runtime-folder ];
};
# FIXME set auth module option instead
systemd.services.kanidm.serviceConfig.ExecStartPre = lib.mkBefore [
("-+" + kanidmExecStartPreScriptRoot)
("-" + oauth-secret-ExecStartPreScript)
];
systemd.services.kanidm.serviceConfig.ExecStartPost = lib.mkAfter [
("-" + kanidmExecStartPostScript)
];
# does it merge with existing restartTriggers?
systemd.services.postfix.restartTriggers = [
setPwdInLdapConfFile
write-dovecot-oauth2-conf

View File

@@ -7,6 +7,7 @@
[ "selfprivacy", "modules", "simple-nixos-mailserver" ],
[ "selfprivacy", "passthru", "auth", "admins-group" ],
[ "selfprivacy", "passthru", "auth", "full-users-group" ],
[ "selfprivacy", "passthru", "auth", "keys-path" ],
[ "selfprivacy", "passthru", "auth", "ldap-base-dn" ],
[ "selfprivacy", "passthru", "auth", "ldap-port" ],
[ "selfprivacy", "passthru", "auth", "oauth2-discovery-url" ],
@@ -20,7 +21,10 @@
[ "selfprivacy", "username" ],
[ "selfprivacy", "users" ],
[ "services", "dovecot2", "user" ],
[ "services", "opendkim" ],
[ "services", "opendkim", "configFile" ],
[ "services", "opendkim", "group" ],
[ "services", "opendkim", "socket" ],
[ "services", "opendkim", "user" ],
[ "services", "postfix", "group" ],
[ "services", "postfix", "user" ],
[ "services", "redis", "servers", "rspamd", "bind" ],