diff options
| author | Chris Lemmer-Webber <cwebber@dustycloud.org> | 2021-07-06 22:03:19 +0200 |
|---|---|---|
| committer | Christopher Lemmer Webber <cwebber@dustycloud.org> | 2021-07-29 11:32:08 -0400 |
| commit | a7ac19851baab3fbcc40c4b2cf5b00a6ac9cd2f3 (patch) | |
| tree | 3731cb92eecc360ecc886b6cffb1153b4c5ab9a6 /gnu/services.scm | |
| parent | 5a1ce6cf70fcd386e56a325efafd7d73ea6cdfcf (diff) | |
services: setuid: More configurable setuid support.
New record <setuid-program> with fields for setting the specific user
and group, as well as specifically selecting the setuid and setgid bits,
for a program within the setuid-program-service.
* gnu/services.scm (setuid-program-file-like-deprecated): New function.
(setuid-program-service-type): Make use of
setuid-program->activation-gexp. Adjust the extend property to handle
<setuid-program>.
* gnu/build/activation.scm (activate-setuid-programs): Update to expect a
<setuid-record> list for each program entry.
* gnu/system.scm: (operating-system-setuid-programs): Renamed to
%operating-system-setuid-programs and replace it with new procedure.
(operating-system-default-essential-services,
hurd-default-essential-services): Replace
operating-system-setuid-programs with
%operating-system-setuid-programs.
* gnu/system/setuid.scm: New file.
* doc/guix.texi (Setuid Programs): Document <setuid-program>.
Co-authored-by: Brice Waegeneire <brice@waegenei.re>
Diffstat (limited to 'gnu/services.scm')
| -rw-r--r-- | gnu/services.scm | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/gnu/services.scm b/gnu/services.scm index 8d413e198e6..2a8114a2196 100644 --- a/gnu/services.scm +++ b/gnu/services.scm | |||
| @@ -4,6 +4,8 @@ | |||
| 4 | ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> | 4 | ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> |
| 5 | ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net> | 5 | ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net> |
| 6 | ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com> | 6 | ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com> |
| 7 | ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org> | ||
| 8 | ;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re> | ||
| 7 | ;;; | 9 | ;;; |
| 8 | ;;; This file is part of GNU Guix. | 10 | ;;; This file is part of GNU Guix. |
| 9 | ;;; | 11 | ;;; |
| @@ -40,6 +42,7 @@ | |||
| 40 | #:use-module (gnu packages base) | 42 | #:use-module (gnu packages base) |
| 41 | #:use-module (gnu packages bash) | 43 | #:use-module (gnu packages bash) |
| 42 | #:use-module (gnu packages hurd) | 44 | #:use-module (gnu packages hurd) |
| 45 | #:use-module (gnu system setuid) | ||
| 43 | #:use-module (srfi srfi-1) | 46 | #:use-module (srfi srfi-1) |
| 44 | #:use-module (srfi srfi-9) | 47 | #:use-module (srfi srfi-9) |
| 45 | #:use-module (srfi srfi-9 gnu) | 48 | #:use-module (srfi srfi-9 gnu) |
| @@ -801,15 +804,49 @@ directory." | |||
| 801 | FILES must be a list of name/file-like object pairs." | 804 | FILES must be a list of name/file-like object pairs." |
| 802 | (service etc-service-type files)) | 805 | (service etc-service-type files)) |
| 803 | 806 | ||
| 807 | (define (setuid-program->activation-gexp programs) | ||
| 808 | "Return an activation gexp for setuid-program from PROGRAMS." | ||
| 809 | (let ((programs (map (lambda (program) | ||
| 810 | ;; FIXME This is really ugly, I didn't managed to use | ||
| 811 | ;; "inherit" | ||
| 812 | (let ((program-name (setuid-program-program program)) | ||
| 813 | (setuid? (setuid-program-setuid? program)) | ||
| 814 | (setgid? (setuid-program-setgid? program)) | ||
| 815 | (user (setuid-program-user program)) | ||
| 816 | (group (setuid-program-group program)) ) | ||
| 817 | #~(setuid-program | ||
| 818 | (setuid? #$setuid?) | ||
| 819 | (setgid? #$setgid?) | ||
| 820 | (user #$user) | ||
| 821 | (group #$group) | ||
| 822 | (program #$program-name)))) | ||
| 823 | programs))) | ||
| 824 | (with-imported-modules (source-module-closure | ||
| 825 | '((gnu system setuid))) | ||
| 826 | #~(begin | ||
| 827 | (use-modules (gnu system setuid)) | ||
| 828 | |||
| 829 | (activate-setuid-programs (list #$@programs)))))) | ||
| 830 | |||
| 831 | (define (setuid-program-file-like-deprecated file-like) | ||
| 832 | (match file-like | ||
| 833 | ((? file-like? program) | ||
| 834 | (warning | ||
| 835 | (G_ "representing setuid programs with '~a' is \ | ||
| 836 | deprecated; use 'setuid-program' instead~%") program) | ||
| 837 | (setuid-program (program program))) | ||
| 838 | ((? setuid-program? program) | ||
| 839 | program))) | ||
| 840 | |||
| 804 | (define setuid-program-service-type | 841 | (define setuid-program-service-type |
| 805 | (service-type (name 'setuid-program) | 842 | (service-type (name 'setuid-program) |
| 806 | (extensions | 843 | (extensions |
| 807 | (list (service-extension activation-service-type | 844 | (list (service-extension activation-service-type |
| 808 | (lambda (programs) | 845 | setuid-program->activation-gexp))) |
| 809 | #~(activate-setuid-programs | ||
| 810 | (list #$@programs)))))) | ||
| 811 | (compose concatenate) | 846 | (compose concatenate) |
| 812 | (extend append) | 847 | (extend (lambda (config extensions) |
| 848 | (map setuid-program-file-like-deprecated | ||
| 849 | (append config extensions)))) | ||
| 813 | (description | 850 | (description |
| 814 | "Populate @file{/run/setuid-programs} with the specified | 851 | "Populate @file{/run/setuid-programs} with the specified |
| 815 | executables, making them setuid-root."))) | 852 | executables, making them setuid-root."))) |
