summaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
authorJosselin Poiret <dev@jpoiret.xyz>2023-05-09 18:45:07 +0200
committerLudovic Courtès <ludo@gnu.org>2023-05-11 13:21:45 +0200
commit2df5d4fd18a2fbcb8066a50e2da8ec64635f5162 (patch)
treeecfc8aae744998169e2b38c2e756abeb4210d9f9 /gnu/services
parentb2a65b4c8cfe06eb48e0db83a408dd84175e07dc (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.scm28
-rw-r--r--gnu/services/base.scm54
-rw-r--r--gnu/services/desktop.scm44
-rw-r--r--gnu/services/kerberos.scm44
-rw-r--r--gnu/services/lightdm.scm2
-rw-r--r--gnu/services/mail.scm4
-rw-r--r--gnu/services/pam-mount.scm23
-rw-r--r--gnu/services/sddm.scm2
-rw-r--r--gnu/services/ssh.scm10
-rw-r--r--gnu/services/xorg.scm4
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)