diff options
| author | Josselin Poiret <dev@jpoiret.xyz> | 2023-05-09 18:45:07 +0200 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2023-05-11 13:21:45 +0200 |
| commit | 2df5d4fd18a2fbcb8066a50e2da8ec64635f5162 (patch) | |
| tree | ecfc8aae744998169e2b38c2e756abeb4210d9f9 /gnu/services | |
| parent | b2a65b4c8cfe06eb48e0db83a408dd84175e07dc (diff) | |
system: pam: Let PAM extensions add shepherd requirements.
* gnu/system/pam.scm (<pam-extension>): New record type.
(pam-shepherd-service): Add Shepherd synchronization point.
* gnu/services/mail.scm (dovecot-shepherd-service)
* gnu/services/lightdm.scm (lightdm-shepherd-service)
* gnu/services/mail.scm (opensmtpd-shepherd-service)
* gnu/services/sddm.scm (sddm-shepherd-service)
* gnu/services/ssh.scm (lsh-shepherd-service, openssh-shepherd-service)
* gnu/services/xorg.scm (slim-shepherd-service, gdm-shepherd-service)
* gnu/services/base.scm (greetd-shepherd-services): Add PAM requirement.
* gnu/system/pam.scm (/etc-entry, extend-configuration,
pam-root-service-type, pam-root-service)
* gnu/services/authentication.scm (pam-ldap-pam-service)
* gnu/services/base.scm (pam-limits-service-type)
(greetd-pam-service)
* gnu/services/desktop.scm (pam-gnome-keyring)
* gnu/services/kerberos.scm (pam-krb5-pam-service)
* gnu/services/pam-mount.scm (pam-mount-pam-service): Adapt to use
pam-extension.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/services')
| -rw-r--r-- | gnu/services/authentication.scm | 28 | ||||
| -rw-r--r-- | gnu/services/base.scm | 54 | ||||
| -rw-r--r-- | gnu/services/desktop.scm | 44 | ||||
| -rw-r--r-- | gnu/services/kerberos.scm | 44 | ||||
| -rw-r--r-- | gnu/services/lightdm.scm | 2 | ||||
| -rw-r--r-- | gnu/services/mail.scm | 4 | ||||
| -rw-r--r-- | gnu/services/pam-mount.scm | 23 | ||||
| -rw-r--r-- | gnu/services/sddm.scm | 2 | ||||
| -rw-r--r-- | gnu/services/ssh.scm | 10 | ||||
| -rw-r--r-- | gnu/services/xorg.scm | 4 |
10 files changed, 116 insertions, 99 deletions
diff --git a/gnu/services/authentication.scm b/gnu/services/authentication.scm index f7becdfafbc..f1ad1b1afe3 100644 --- a/gnu/services/authentication.scm +++ b/gnu/services/authentication.scm | |||
| @@ -506,19 +506,21 @@ password.") | |||
| 506 | (define pam-ldap-module | 506 | (define pam-ldap-module |
| 507 | #~(string-append #$(nslcd-configuration-nss-pam-ldapd config) | 507 | #~(string-append #$(nslcd-configuration-nss-pam-ldapd config) |
| 508 | "/lib/security/pam_ldap.so")) | 508 | "/lib/security/pam_ldap.so")) |
| 509 | (lambda (pam) | 509 | (pam-extension |
| 510 | (if (member (pam-service-name pam) | 510 | (transformer |
| 511 | (nslcd-configuration-pam-services config)) | 511 | (lambda (pam) |
| 512 | (let ((sufficient | 512 | (if (member (pam-service-name pam) |
| 513 | (pam-entry | 513 | (nslcd-configuration-pam-services config)) |
| 514 | (control "sufficient") | 514 | (let ((sufficient |
| 515 | (module pam-ldap-module)))) | 515 | (pam-entry |
| 516 | (pam-service | 516 | (control "sufficient") |
| 517 | (inherit pam) | 517 | (module pam-ldap-module)))) |
| 518 | (auth (cons sufficient (pam-service-auth pam))) | 518 | (pam-service |
| 519 | (session (cons sufficient (pam-service-session pam))) | 519 | (inherit pam) |
| 520 | (account (cons sufficient (pam-service-account pam))))) | 520 | (auth (cons sufficient (pam-service-auth pam))) |
| 521 | pam))) | 521 | (session (cons sufficient (pam-service-session pam))) |
| 522 | (account (cons sufficient (pam-service-account pam))))) | ||
| 523 | pam))))) | ||
| 522 | 524 | ||
| 523 | (define (pam-ldap-pam-services config) | 525 | (define (pam-ldap-pam-services config) |
| 524 | (list (pam-ldap-pam-service config))) | 526 | (list (pam-ldap-pam-service config))) |
diff --git a/gnu/services/base.scm b/gnu/services/base.scm index a4005fc4fdc..fdc2c8c764d 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm | |||
| @@ -1603,20 +1603,22 @@ information on the configuration file syntax." | |||
| 1603 | 1603 | ||
| 1604 | (define pam-limits-service-type | 1604 | (define pam-limits-service-type |
| 1605 | (let ((pam-extension | 1605 | (let ((pam-extension |
| 1606 | (lambda (pam) | 1606 | (pam-extension |
| 1607 | (let ((pam-limits (pam-entry | 1607 | (transformer |
| 1608 | (control "required") | 1608 | (lambda (pam) |
| 1609 | (module "pam_limits.so") | 1609 | (let ((pam-limits (pam-entry |
| 1610 | (arguments | 1610 | (control "required") |
| 1611 | '("conf=/etc/security/limits.conf"))))) | 1611 | (module "pam_limits.so") |
| 1612 | (if (member (pam-service-name pam) | 1612 | (arguments |
| 1613 | '("login" "greetd" "su" "slim" "gdm-password" "sddm" | 1613 | '("conf=/etc/security/limits.conf"))))) |
| 1614 | "sudo" "sshd")) | 1614 | (if (member (pam-service-name pam) |
| 1615 | (pam-service | 1615 | '("login" "greetd" "su" "slim" "gdm-password" |
| 1616 | (inherit pam) | 1616 | "sddm" "sudo" "sshd")) |
| 1617 | (session (cons pam-limits | 1617 | (pam-service |
| 1618 | (pam-service-session pam)))) | 1618 | (inherit pam) |
| 1619 | pam)))) | 1619 | (session (cons pam-limits |
| 1620 | (pam-service-session pam)))) | ||
| 1621 | pam)))))) | ||
| 1620 | 1622 | ||
| 1621 | ;; XXX: Using file-like objects is deprecated, use lists instead. | 1623 | ;; XXX: Using file-like objects is deprecated, use lists instead. |
| 1622 | ;; This is to be reduced into the list? case when the deprecated | 1624 | ;; This is to be reduced into the list? case when the deprecated |
| @@ -3264,16 +3266,18 @@ to handle." | |||
| 3264 | (greetd-allow-empty-passwords? config) | 3266 | (greetd-allow-empty-passwords? config) |
| 3265 | #:motd | 3267 | #:motd |
| 3266 | (greetd-motd config)) | 3268 | (greetd-motd config)) |
| 3267 | (lambda (pam) | 3269 | (pam-extension |
| 3268 | (if (member (pam-service-name pam) | 3270 | (transformer |
| 3269 | '("login" "greetd" "su" "slim" "gdm-password")) | 3271 | (lambda (pam) |
| 3270 | (pam-service | 3272 | (if (member (pam-service-name pam) |
| 3271 | (inherit pam) | 3273 | '("login" "greetd" "su" "slim" "gdm-password")) |
| 3272 | (auth (append (pam-service-auth pam) | 3274 | (pam-service |
| 3273 | (list optional-pam-mount))) | 3275 | (inherit pam) |
| 3274 | (session (append (pam-service-session pam) | 3276 | (auth (append (pam-service-auth pam) |
| 3275 | (list optional-pam-mount)))) | 3277 | (list optional-pam-mount))) |
| 3276 | pam)))) | 3278 | (session (append (pam-service-session pam) |
| 3279 | (list optional-pam-mount)))) | ||
| 3280 | pam)))))) | ||
| 3277 | 3281 | ||
| 3278 | (define (greetd-shepherd-services config) | 3282 | (define (greetd-shepherd-services config) |
| 3279 | (map | 3283 | (map |
| @@ -3285,7 +3289,7 @@ to handle." | |||
| 3285 | (greetd-vt (greetd-terminal-vt tc))) | 3289 | (greetd-vt (greetd-terminal-vt tc))) |
| 3286 | (shepherd-service | 3290 | (shepherd-service |
| 3287 | (documentation "Minimal and flexible login manager daemon") | 3291 | (documentation "Minimal and flexible login manager daemon") |
| 3288 | (requirement '(user-processes host-name udev virtual-terminal)) | 3292 | (requirement '(pam user-processes host-name udev virtual-terminal)) |
| 3289 | (provision (list (symbol-append | 3293 | (provision (list (symbol-append |
| 3290 | 'term-tty | 3294 | 'term-tty |
| 3291 | (string->symbol (greetd-terminal-vt tc))))) | 3295 | (string->symbol (greetd-terminal-vt tc))))) |
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index adea5b38dd8..6b1b21cf807 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm | |||
| @@ -1187,10 +1187,12 @@ seats.)" | |||
| 1187 | (module (file-append (elogind-package config) | 1187 | (module (file-append (elogind-package config) |
| 1188 | "/lib/security/pam_elogind.so")))) | 1188 | "/lib/security/pam_elogind.so")))) |
| 1189 | 1189 | ||
| 1190 | (list (lambda (pam) | 1190 | (list (pam-extension |
| 1191 | (pam-service | 1191 | (transformer |
| 1192 | (inherit pam) | 1192 | (lambda (pam) |
| 1193 | (session (cons pam-elogind (pam-service-session pam))))))) | 1193 | (pam-service |
| 1194 | (inherit pam) | ||
| 1195 | (session (cons pam-elogind (pam-service-session pam))))))))) | ||
| 1194 | 1196 | ||
| 1195 | (define (elogind-shepherd-service config) | 1197 | (define (elogind-shepherd-service config) |
| 1196 | "Return a Shepherd service to start elogind according to @var{config}." | 1198 | "Return a Shepherd service to start elogind according to @var{config}." |
| @@ -1703,22 +1705,24 @@ dispatches events from it."))) | |||
| 1703 | (arguments arguments))) | 1705 | (arguments arguments))) |
| 1704 | 1706 | ||
| 1705 | (list | 1707 | (list |
| 1706 | (lambda (service) | 1708 | (pam-extension |
| 1707 | (case (assoc-ref (gnome-keyring-pam-services config) | 1709 | (transformer |
| 1708 | (pam-service-name service)) | 1710 | (lambda (service) |
| 1709 | ((login) | 1711 | (case (assoc-ref (gnome-keyring-pam-services config) |
| 1710 | (pam-service | 1712 | (pam-service-name service)) |
| 1711 | (inherit service) | 1713 | ((login) |
| 1712 | (auth (append (pam-service-auth service) | 1714 | (pam-service |
| 1713 | (list (%pam-keyring-entry)))) | 1715 | (inherit service) |
| 1714 | (session (append (pam-service-session service) | 1716 | (auth (append (pam-service-auth service) |
| 1715 | (list (%pam-keyring-entry "auto_start")))))) | 1717 | (list (%pam-keyring-entry)))) |
| 1716 | ((passwd) | 1718 | (session (append (pam-service-session service) |
| 1717 | (pam-service | 1719 | (list (%pam-keyring-entry "auto_start")))))) |
| 1718 | (inherit service) | 1720 | ((passwd) |
| 1719 | (password (append (pam-service-password service) | 1721 | (pam-service |
| 1720 | (list (%pam-keyring-entry)))))) | 1722 | (inherit service) |
| 1721 | (else service))))) | 1723 | (password (append (pam-service-password service) |
| 1724 | (list (%pam-keyring-entry)))))) | ||
| 1725 | (else service))))))) | ||
| 1722 | 1726 | ||
| 1723 | (define gnome-keyring-service-type | 1727 | (define gnome-keyring-service-type |
| 1724 | (service-type | 1728 | (service-type |
diff --git a/gnu/services/kerberos.scm b/gnu/services/kerberos.scm index c3c78727342..1a1b37f8905 100644 --- a/gnu/services/kerberos.scm +++ b/gnu/services/kerberos.scm | |||
| @@ -428,27 +428,29 @@ generates such a file. It does not cause any daemon to be started."))) | |||
| 428 | 428 | ||
| 429 | (define (pam-krb5-pam-service config) | 429 | (define (pam-krb5-pam-service config) |
| 430 | "Return a PAM service for Kerberos authentication." | 430 | "Return a PAM service for Kerberos authentication." |
| 431 | (lambda (pam) | 431 | (pam-extension |
| 432 | (define pam-krb5-module | 432 | (transformer |
| 433 | #~(string-append #$(pam-krb5-configuration-pam-krb5 config) | 433 | (lambda (pam) |
| 434 | "/lib/security/pam_krb5.so")) | 434 | (define pam-krb5-module |
| 435 | 435 | #~(string-append #$(pam-krb5-configuration-pam-krb5 config) | |
| 436 | (let ((pam-krb5-sufficient | 436 | "/lib/security/pam_krb5.so")) |
| 437 | (pam-entry | 437 | |
| 438 | (control "sufficient") | 438 | (let ((pam-krb5-sufficient |
| 439 | (module pam-krb5-module) | 439 | (pam-entry |
| 440 | (arguments | 440 | (control "sufficient") |
| 441 | (list | 441 | (module pam-krb5-module) |
| 442 | (format #f "minimum_uid=~a" | 442 | (arguments |
| 443 | (pam-krb5-configuration-minimum-uid config))))))) | 443 | (list |
| 444 | (pam-service | 444 | (format #f "minimum_uid=~a" |
| 445 | (inherit pam) | 445 | (pam-krb5-configuration-minimum-uid config))))))) |
| 446 | (auth (cons* pam-krb5-sufficient | 446 | (pam-service |
| 447 | (pam-service-auth pam))) | 447 | (inherit pam) |
| 448 | (session (cons* pam-krb5-sufficient | 448 | (auth (cons* pam-krb5-sufficient |
| 449 | (pam-service-session pam))) | 449 | (pam-service-auth pam))) |
| 450 | (account (cons* pam-krb5-sufficient | 450 | (session (cons* pam-krb5-sufficient |
| 451 | (pam-service-account pam))))))) | 451 | (pam-service-session pam))) |
| 452 | (account (cons* pam-krb5-sufficient | ||
| 453 | (pam-service-account pam))))))))) | ||
| 452 | 454 | ||
| 453 | (define (pam-krb5-pam-services config) | 455 | (define (pam-krb5-pam-services config) |
| 454 | (list (pam-krb5-pam-service config))) | 456 | (list (pam-krb5-pam-service config))) |
diff --git a/gnu/services/lightdm.scm b/gnu/services/lightdm.scm index 0b9094cda12..b966f402d66 100644 --- a/gnu/services/lightdm.scm +++ b/gnu/services/lightdm.scm | |||
| @@ -616,7 +616,7 @@ port=" (number->string vnc-server-port) "\n" | |||
| 616 | (list | 616 | (list |
| 617 | (shepherd-service | 617 | (shepherd-service |
| 618 | (documentation "LightDM display manager") | 618 | (documentation "LightDM display manager") |
| 619 | (requirement '(dbus-system user-processes host-name)) | 619 | (requirement '(pam dbus-system user-processes host-name)) |
| 620 | (provision '(lightdm display-manager xorg-server)) | 620 | (provision '(lightdm display-manager xorg-server)) |
| 621 | (respawn? #f) | 621 | (respawn? #f) |
| 622 | (start | 622 | (start |
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index bf4948dcfb6..12dcc8e71db 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm | |||
| @@ -1578,7 +1578,7 @@ greyed out, instead of only later giving \"not selectable\" popup error. | |||
| 1578 | (list (shepherd-service | 1578 | (list (shepherd-service |
| 1579 | (documentation "Run the Dovecot POP3/IMAP mail server.") | 1579 | (documentation "Run the Dovecot POP3/IMAP mail server.") |
| 1580 | (provision '(dovecot)) | 1580 | (provision '(dovecot)) |
| 1581 | (requirement '(networking)) | 1581 | (requirement '(pam networking)) |
| 1582 | (start #~(make-forkexec-constructor | 1582 | (start #~(make-forkexec-constructor |
| 1583 | (list (string-append #$dovecot "/sbin/dovecot") | 1583 | (list (string-append #$dovecot "/sbin/dovecot") |
| 1584 | "-F"))) | 1584 | "-F"))) |
| @@ -1676,7 +1676,7 @@ match from local for any action outbound | |||
| 1676 | (package config-file shepherd-requirement) | 1676 | (package config-file shepherd-requirement) |
| 1677 | (list (shepherd-service | 1677 | (list (shepherd-service |
| 1678 | (provision '(smtpd)) | 1678 | (provision '(smtpd)) |
| 1679 | (requirement `(loopback ,@shepherd-requirement)) | 1679 | (requirement `(pam loopback ,@shepherd-requirement)) |
| 1680 | (documentation "Run the OpenSMTPD daemon.") | 1680 | (documentation "Run the OpenSMTPD daemon.") |
| 1681 | (start (let ((smtpd (file-append package "/sbin/smtpd"))) | 1681 | (start (let ((smtpd (file-append package "/sbin/smtpd"))) |
| 1682 | #~(make-forkexec-constructor | 1682 | #~(make-forkexec-constructor |
diff --git a/gnu/services/pam-mount.scm b/gnu/services/pam-mount.scm index e60781d05bb..21c34ddd617 100644 --- a/gnu/services/pam-mount.scm +++ b/gnu/services/pam-mount.scm | |||
| @@ -88,16 +88,19 @@ | |||
| 88 | (pam-entry | 88 | (pam-entry |
| 89 | (control "optional") | 89 | (control "optional") |
| 90 | (module #~(string-append #$pam-mount "/lib/security/pam_mount.so")))) | 90 | (module #~(string-append #$pam-mount "/lib/security/pam_mount.so")))) |
| 91 | (list (lambda (pam) | 91 | (list |
| 92 | (if (member (pam-service-name pam) | 92 | (pam-extension |
| 93 | '("login" "greetd" "su" "slim" "gdm-password" "sddm")) | 93 | (transformer |
| 94 | (pam-service | 94 | (lambda (pam) |
| 95 | (inherit pam) | 95 | (if (member (pam-service-name pam) |
| 96 | (auth (append (pam-service-auth pam) | 96 | '("login" "greetd" "su" "slim" "gdm-password" "sddm")) |
| 97 | (list optional-pam-mount))) | 97 | (pam-service |
| 98 | (session (append (pam-service-session pam) | 98 | (inherit pam) |
| 99 | (list optional-pam-mount)))) | 99 | (auth (append (pam-service-auth pam) |
| 100 | pam)))) | 100 | (list optional-pam-mount))) |
| 101 | (session (append (pam-service-session pam) | ||
| 102 | (list optional-pam-mount)))) | ||
| 103 | pam)))))) | ||
| 101 | 104 | ||
| 102 | (define pam-mount-service-type | 105 | (define pam-mount-service-type |
| 103 | (service-type | 106 | (service-type |
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm index 9e02f1cc81d..c9a7ba96f41 100644 --- a/gnu/services/sddm.scm +++ b/gnu/services/sddm.scm | |||
| @@ -169,7 +169,7 @@ Relogin=" (if (sddm-configuration-relogin? config) | |||
| 169 | 169 | ||
| 170 | (list (shepherd-service | 170 | (list (shepherd-service |
| 171 | (documentation "SDDM display manager.") | 171 | (documentation "SDDM display manager.") |
| 172 | (requirement '(user-processes elogind)) | 172 | (requirement '(user-processes elogind pam)) |
| 173 | (provision '(xorg-server display-manager)) | 173 | (provision '(xorg-server display-manager)) |
| 174 | (start #~(make-forkexec-constructor #$sddm-command)) | 174 | (start #~(make-forkexec-constructor #$sddm-command)) |
| 175 | (stop #~(make-kill-destructor))))) | 175 | (stop #~(make-kill-destructor))))) |
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm index b76544c1a8e..de5afdaa1a8 100644 --- a/gnu/services/ssh.scm +++ b/gnu/services/ssh.scm | |||
| @@ -197,9 +197,11 @@ | |||
| 197 | interfaces))))) | 197 | interfaces))))) |
| 198 | 198 | ||
| 199 | (define requires | 199 | (define requires |
| 200 | (if (and daemonic? (lsh-configuration-syslog-output? config)) | 200 | `(networking |
| 201 | '(networking syslogd) | 201 | pam |
| 202 | '(networking))) | 202 | ,@(if (and daemonic? (lsh-configuration-syslog-output? config)) |
| 203 | '(syslogd) | ||
| 204 | '()))) | ||
| 203 | 205 | ||
| 204 | (list (shepherd-service | 206 | (list (shepherd-service |
| 205 | (documentation "GNU lsh SSH server") | 207 | (documentation "GNU lsh SSH server") |
| @@ -566,7 +568,7 @@ of user-name/file-like tuples." | |||
| 566 | 568 | ||
| 567 | (list (shepherd-service | 569 | (list (shepherd-service |
| 568 | (documentation "OpenSSH server.") | 570 | (documentation "OpenSSH server.") |
| 569 | (requirement '(syslogd loopback)) | 571 | (requirement '(pam syslogd loopback)) |
| 570 | (provision '(ssh-daemon ssh sshd)) | 572 | (provision '(ssh-daemon ssh sshd)) |
| 571 | 573 | ||
| 572 | (start #~(if #$inetd-style? | 574 | (start #~(if #$inetd-style? |
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 7295a45b598..8b6080fd264 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm | |||
| @@ -667,7 +667,7 @@ reboot_cmd " shepherd "/sbin/reboot\n" | |||
| 667 | 667 | ||
| 668 | (list (symbol-append 'xorg-server- | 668 | (list (symbol-append 'xorg-server- |
| 669 | (string->symbol vt))))) | 669 | (string->symbol vt))))) |
| 670 | (requirement '(user-processes host-name udev)) | 670 | (requirement '(pam user-processes host-name udev)) |
| 671 | (start | 671 | (start |
| 672 | #~(lambda () | 672 | #~(lambda () |
| 673 | ;; A stale lock file can prevent SLiM from starting, so remove it to | 673 | ;; A stale lock file can prevent SLiM from starting, so remove it to |
| @@ -1119,7 +1119,7 @@ argument."))) | |||
| 1119 | (list (shepherd-service | 1119 | (list (shepherd-service |
| 1120 | (documentation "Xorg display server (GDM)") | 1120 | (documentation "Xorg display server (GDM)") |
| 1121 | (provision '(xorg-server)) | 1121 | (provision '(xorg-server)) |
| 1122 | (requirement '(dbus-system user-processes host-name udev elogind)) | 1122 | (requirement '(dbus-system pam user-processes host-name udev elogind)) |
| 1123 | (start #~(lambda () | 1123 | (start #~(lambda () |
| 1124 | (fork+exec-command | 1124 | (fork+exec-command |
| 1125 | (list #$(file-append (gdm-configuration-gdm config) | 1125 | (list #$(file-append (gdm-configuration-gdm config) |
