* bug#24275: Misnamed directory in GuixSD @ 2016-08-20 20:11 John Darrington 2016-08-21 23:14 ` Leo Famulari 0 siblings, 1 reply; 11+ messages in thread From: John Darrington @ 2016-08-20 20:11 UTC (permalink / raw) To: 24275 [-- Attachment #1: Type: text/plain, Size: 390 bytes --] Installing GuixSD 0.11.0 creates a directory called /nonexistent Despite its name, it does actually exist. I suggest that we rename it or delete it. J' -- Avoid eavesdropping. Send strong encryted email. PGP Public key ID: 1024D/2DE827B3 fingerprint = 8797 A26D 0854 2EAB 0285 A290 8A67 719C 2DE8 27B3 See http://sks-keyservers.net or any PGP keyserver for public key. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-20 20:11 bug#24275: Misnamed directory in GuixSD John Darrington @ 2016-08-21 23:14 ` Leo Famulari 2016-08-22 8:21 ` Alex Kost 0 siblings, 1 reply; 11+ messages in thread From: Leo Famulari @ 2016-08-21 23:14 UTC (permalink / raw) To: John Darrington; +Cc: 24275 [-- Attachment #1: Type: text/plain, Size: 661 bytes --] On Sat, Aug 20, 2016 at 10:11:00PM +0200, John Darrington wrote: > Installing GuixSD 0.11.0 creates a directory called /nonexistent > Despite its name, it does actually exist. I checked, and it's the 'nobody' user's home directory: http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/shadow.scm#n125 > I suggest that we rename it or delete it. I think it's very appropriate for nobody to live in a nonexistent directory ;) But, I noticed that the directory doesn't exist on my GuixSD system, which has been reconfigured since the commit that introduced this directory (2d94702ff). My nobody is still using '/var/empty'. I wonder if that's a problem? [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-21 23:14 ` Leo Famulari @ 2016-08-22 8:21 ` Alex Kost 2016-08-22 8:47 ` Vincent Legoll 0 siblings, 1 reply; 11+ messages in thread From: Alex Kost @ 2016-08-22 8:21 UTC (permalink / raw) To: Leo Famulari; +Cc: 24275, John Darrington Leo Famulari (2016-08-22 02:14 +0300) wrote: > On Sat, Aug 20, 2016 at 10:11:00PM +0200, John Darrington wrote: >> Installing GuixSD 0.11.0 creates a directory called /nonexistent >> Despite its name, it does actually exist. > > I checked, and it's the 'nobody' user's home directory: > http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/shadow.scm#n125 > >> I suggest that we rename it or delete it. > > I think it's very appropriate for nobody to live in a nonexistent > directory ;) > > But, I noticed that the directory doesn't exist on my GuixSD system, > which has been reconfigured since the commit that introduced this > directory (2d94702ff). My nobody is still using '/var/empty'. The same for me. > I wonder if that's a problem? IIUC it happens because the home directory is created only when a user is added, and is not changed when the user is modified. See (gnu build activation) module: - 'add-user' runs "useradd" with "-d" option to create home dir - 'modify-user' runs "usermod" without "-d" (and without "--move-home") So the home of nobody was not changed for us to '/nonexistent' when the nobody user was changed. As for me, I wouldn't like to have this directory, and I think it shouldn't be created (if it is not really needed for nobody user). -- Alex ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-22 8:21 ` Alex Kost @ 2016-08-22 8:47 ` Vincent Legoll 2016-08-22 18:09 ` Leo Famulari 0 siblings, 1 reply; 11+ messages in thread From: Vincent Legoll @ 2016-08-22 8:47 UTC (permalink / raw) To: Alex Kost; +Cc: 24275, John Darrington Hello, > IIUC it happens because the home directory is created only when a user > is added, and is not changed when the user is modified. See (gnu build > activation) module: > > - 'add-user' runs "useradd" with "-d" option to create home dir Maybe the nobody user should be special cased, not to run useradd with -d, the non existent directory, should really not exist for nobody. This is a (very small ?) security enhancement, I think... If this is the way to go, I can have a shot at it... > - 'modify-user' runs "usermod" without "-d" (and without "--move-home") > > So the home of nobody was not changed for us to '/nonexistent' when the > nobody user was changed. > > As for me, I wouldn't like to have this directory, and I think it > shouldn't be created (if it is not really needed for nobody user). Ditto. -- Vincent Legoll ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-22 8:47 ` Vincent Legoll @ 2016-08-22 18:09 ` Leo Famulari 2016-08-23 11:04 ` Vincent Legoll 0 siblings, 1 reply; 11+ messages in thread From: Leo Famulari @ 2016-08-22 18:09 UTC (permalink / raw) To: Vincent Legoll; +Cc: Alex Kost, 24275, John Darrington On Mon, Aug 22, 2016 at 10:47:51AM +0200, Vincent Legoll wrote: > Hello, > > > IIUC it happens because the home directory is created only when a user > > is added, and is not changed when the user is modified. See (gnu build > > activation) module: > > > > - 'add-user' runs "useradd" with "-d" option to create home dir > > Maybe the nobody user should be special cased, not to run useradd with > -d, the non existent directory, should really not exist for nobody. This is a > (very small ?) security enhancement, I think... My Debian system uses '/nonexistent' for the nobody user's passwd entry, but the directory does not actually exist. > If this is the way to go, I can have a shot at it... > > > - 'modify-user' runs "usermod" without "-d" (and without "--move-home") > > > > So the home of nobody was not changed for us to '/nonexistent' when the > > nobody user was changed. > > > > As for me, I wouldn't like to have this directory, and I think it > > shouldn't be created (if it is not really needed for nobody user). > > Ditto. I don't fully understand the implications of the change, but it seems like a worthwhile thing to try doing. At least you might learn something while implementing it :) I'll let more experienced people decide if it's the right thing to do. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-22 18:09 ` Leo Famulari @ 2016-08-23 11:04 ` Vincent Legoll 2016-08-27 23:32 ` Ludovic Courtès 0 siblings, 1 reply; 11+ messages in thread From: Vincent Legoll @ 2016-08-23 11:04 UTC (permalink / raw) To: Leo Famulari; +Cc: Alex Kost, 24275, John Darrington [-- Attachment #1: Type: text/plain, Size: 1741 bytes --] Hello, On Mon, Aug 22, 2016 at 8:09 PM, Leo Famulari <leo@famulari.name> wrote: > On Mon, Aug 22, 2016 at 10:47:51AM +0200, Vincent Legoll wrote: >> >> > IIUC it happens because the home directory is created only when a user >> > is added, and is not changed when the user is modified. See (gnu build >> > activation) module: >> > >> > - 'add-user' runs "useradd" with "-d" option to create home dir >> >> Maybe the nobody user should be special cased, not to run useradd with >> -d, the non existent directory, should really not exist for nobody. This is a >> (very small ?) security enhancement, I think... > > My Debian system uses '/nonexistent' for the nobody user's passwd entry, > but the directory does not actually exist. > >> If this is the way to go, I can have a shot at it... >> >> > - 'modify-user' runs "usermod" without "-d" (and without "--move-home") >> > >> > So the home of nobody was not changed for us to '/nonexistent' when the >> > nobody user was changed. >> > >> > As for me, I wouldn't like to have this directory, and I think it >> > shouldn't be created (if it is not really needed for nobody user). >> >> Ditto. > > I don't fully understand the implications of the change, but it seems > like a worthwhile thing to try doing. At least you might learn something > while implementing it :) > > I'll let more experienced people decide if it's the right thing to do. I came with the attached patch, totally untested, probably wrong for some cases... The following is what I think I have implemented: At account creation time, do not create directories for system? accounts. At account modification, do not create directories, nor move existing ones, but change them in /etc/passwd WDYT ? -- Vincent Legoll [-- Attachment #2: 0001-Avoid-creating-system-user-s-home-directories.patch --] [-- Type: text/x-patch, Size: 2346 bytes --] From 8c83d8cebc3b440a523e714e652b266f7c37b380 Mon Sep 17 00:00:00 2001 From: Vincent Legoll <vincent.legoll@idgrilles.fr> Date: Tue, 23 Aug 2016 12:37:57 +0200 Subject: [PATCH] Avoid creating system-user's home directories * gnu/build/activation.scm (modify-user): pass -d to usermod command (add-user): add system? condition to home dir creation. Signed-off-by: Vincent Legoll <vincent.legoll@idgrilles.fr> --- gnu/build/activation.scm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index 6666cb4..c0f54ae 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -140,9 +140,13 @@ properties. Return #t on success." '()) ,@(if comment `("-c" ,comment) '()) ,@(if home - (if (file-exists? home) - `("-d" ,home) ; avoid warning from 'useradd' - `("-d" ,home "--create-home")) + ;; system? accounts may have non existent home + ;; directories (for example, user nobody) + (if system? + `("-d" ,home) + (if (file-exists? home) + `("-d" ,home) ; avoid warning from 'useradd' + `("-d" ,home "--create-home"))) '()) ,@(if shell `("-s" ,shell) '()) ,@(if password `("-p" ,password) '()) @@ -169,7 +173,10 @@ properties. Return #t on success." `("-G" ,(string-join supplementary-groups ",")) '()) ,@(if comment `("-c" ,comment) '()) - ;; Don't use '--move-home', so ignore HOME. + ;; The home directory could have changed, but may be a + ;; nonexistent one, so don't use '--move-home'. Manually + ;; cleaning things up may be needed in such a case + ,@(if home `("-d" ,home) '()) ,@(if shell `("-s" ,shell) '()) ,name))) (zero? (apply system* "usermod" args)))) -- 1.9.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-23 11:04 ` Vincent Legoll @ 2016-08-27 23:32 ` Ludovic Courtès 2016-08-27 23:49 ` Vincent Legoll 0 siblings, 1 reply; 11+ messages in thread From: Ludovic Courtès @ 2016-08-27 23:32 UTC (permalink / raw) To: Vincent Legoll; +Cc: Alex Kost, 24275, John Darrington [-- Attachment #1: Type: text/plain, Size: 754 bytes --] Hello! What an embarrassing bug. :-) Vincent Legoll <vincent.legoll@gmail.com> skribis: > I came with the attached patch, totally untested, probably wrong for some > cases... > > The following is what I think I have implemented: > > At account creation time, do not create directories for system? accounts. > > At account modification, do not create directories, nor move existing ones, > but change them in /etc/passwd > > WDYT ? We currently lack a way to specify whether the home directory should be created, which would be useful for ‘nobody’. So what about a patch along these lines instead? It adds a ‘create-home-directory?’ field to <user-account> and sets it to #f for ‘nobody’. Thanks, Ludo’. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 3981 bytes --] diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index 6666cb4..10aa58d 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -110,7 +110,8 @@ owner-writable in HOME." files))) (define* (add-user name group - #:key uid comment home shell password system? + #:key uid comment home create-home? + shell password system? (supplementary-groups '()) (log-port (current-error-port))) "Create an account for user NAME part of GROUP, with the specified @@ -139,7 +140,7 @@ properties. Return #t on success." `("-G" ,(string-join supplementary-groups ",")) '()) ,@(if comment `("-c" ,comment) '()) - ,@(if home + ,@(if (and home create-home?) (if (file-exists? home) `("-d" ,home) ; avoid warning from 'useradd' `("-d" ,home "--create-home")) @@ -158,7 +159,8 @@ properties. Return #t on success." #t))))) (define* (modify-user name group - #:key uid comment home shell password system? + #:key uid comment home create-home? + shell password system? (supplementary-groups '()) (log-port (current-error-port))) "Modify user account NAME to have all the given settings." @@ -186,7 +188,8 @@ logged in." (zero? (system* "groupdel" name))) (define* (ensure-user name group - #:key uid comment home shell password system? + #:key uid comment home create-home? + shell password system? (supplementary-groups '()) (log-port (current-error-port)) #:rest rest) @@ -207,7 +210,8 @@ numeric gid or #f." (define activate-user (match-lambda - ((name uid group supplementary-groups comment home shell password system?) + ((name uid group supplementary-groups comment home create-home? + shell password system?) (let ((profile-dir (string-append "/var/guix/profiles/per-user/" name))) (ensure-user name group @@ -216,6 +220,7 @@ numeric gid or #f." #:supplementary-groups supplementary-groups #:comment comment #:home home + #:create-home? create-home? #:shell shell #:password password) diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index c394890..be08646 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -78,6 +78,8 @@ (default '())) ; list of strings (comment user-account-comment (default "")) (home-directory user-account-home-directory) + (create-home-directory? user-account-create-home-directory? ;Boolean + (default #f)) (shell user-account-shell ; gexp (default #~(string-append #$bash "/bin/bash"))) (system? user-account-system? ; Boolean @@ -128,6 +130,7 @@ (group "nogroup") (shell #~(string-append #$shadow "/sbin/nologin")) (home-directory "/nonexistent") + (create-home-directory? #f) (system? #t)))) (define (default-skeletons) @@ -255,6 +258,7 @@ of user '~a' is undeclared") #$(user-account-supplementary-groups account) #$(user-account-comment account) #$(user-account-home-directory account) + #$(user-account-create-home-directory? account) ,#$(user-account-shell account) ; this one is a gexp #$(user-account-password account) #$(user-account-system? account))) ^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-27 23:32 ` Ludovic Courtès @ 2016-08-27 23:49 ` Vincent Legoll 2016-08-28 13:48 ` Ludovic Courtès 0 siblings, 1 reply; 11+ messages in thread From: Vincent Legoll @ 2016-08-27 23:49 UTC (permalink / raw) To: Ludovic Courtès; +Cc: Alex Kost, 24275, John Darrington On Sun, Aug 28, 2016 at 1:32 AM, Ludovic Courtès <ludo@gnu.org> wrote: > Vincent Legoll <vincent.legoll@gmail.com> skribis: > >> I came with the attached patch, totally untested, probably wrong for some >> cases... My patch was heuristic, so bound to be wrong sometimes... > We currently lack a way to specify whether the home directory should be > created, which would be useful for ‘nobody’. This is the alternative solution, specifying it, always right. > So what about a patch along these lines instead? It adds a > ‘create-home-directory?’ field to <user-account> and sets it to #f for > ‘nobody’. LGTM, but do I understand correctly: the default value being false, we will have to always specify the added param as true in system definitions ? Why not the other way around, that would not need any modifications of current configs. -- Vincent Legoll ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-27 23:49 ` Vincent Legoll @ 2016-08-28 13:48 ` Ludovic Courtès 2016-08-28 14:44 ` Vincent Legoll 0 siblings, 1 reply; 11+ messages in thread From: Ludovic Courtès @ 2016-08-28 13:48 UTC (permalink / raw) To: Vincent Legoll; +Cc: Alex Kost, 24275-done, John Darrington Hello! Vincent Legoll <vincent.legoll@gmail.com> skribis: > On Sun, Aug 28, 2016 at 1:32 AM, Ludovic Courtès <ludo@gnu.org> wrote: >> Vincent Legoll <vincent.legoll@gmail.com> skribis: >> >>> I came with the attached patch, totally untested, probably wrong for some >>> cases... > > My patch was heuristic, so bound to be wrong sometimes... > >> We currently lack a way to specify whether the home directory should be >> created, which would be useful for ‘nobody’. > > This is the alternative solution, specifying it, always right. Yeah, that’s what I thought. It may be useful in other situations too. >> So what about a patch along these lines instead? It adds a >> ‘create-home-directory?’ field to <user-account> and sets it to #f for >> ‘nobody’. > > LGTM, but do I understand correctly: the default value being false, we > will have to always specify the added param as true in system definitions ? > > Why not the other way around, that would not need any modifications of > current configs. Oops, I meant it to be #t by default, of course. Good catch! Pushed as commits eb56ee027b4c6b5682f69fa885d16e55c4495bd8 and d03db7434b5b2f1e588c65805d38faea973c3cf0. Thanks! Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-28 13:48 ` Ludovic Courtès @ 2016-08-28 14:44 ` Vincent Legoll 2016-08-29 8:04 ` Ludovic Courtès 0 siblings, 1 reply; 11+ messages in thread From: Vincent Legoll @ 2016-08-28 14:44 UTC (permalink / raw) To: Ludovic Courtès; +Cc: Alex Kost, 24275-done, John Darrington BTW, I think this may be related to this subject, so... I've found some user account (other than nobody) that have /var/empty as their home directory, f.e.: gnu/services/networking.scm:301 (define %ntp-accounts (list (user-account (name "ntpd") (group "nogroup") (system? #t) (comment "NTP daemon user") (home-directory "/var/empty") (shell #~(string-append #$shadow "/sbin/nologin"))))) Is that a glitch, and they can be moved to /nonexistent or do they really require an existing directory to work ? -- Vincent Legoll ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#24275: Misnamed directory in GuixSD 2016-08-28 14:44 ` Vincent Legoll @ 2016-08-29 8:04 ` Ludovic Courtès 0 siblings, 0 replies; 11+ messages in thread From: Ludovic Courtès @ 2016-08-29 8:04 UTC (permalink / raw) To: Vincent Legoll; +Cc: Alex Kost, 24275-done, John Darrington Hi, Vincent Legoll <vincent.legoll@gmail.com> skribis: > I've found some user account (other than nobody) > that have /var/empty as their home directory, f.e.: > > gnu/services/networking.scm:301 > > (define %ntp-accounts > (list (user-account > (name "ntpd") > (group "nogroup") > (system? #t) > (comment "NTP daemon user") > (home-directory "/var/empty") > (shell #~(string-append #$shadow "/sbin/nologin"))))) > > Is that a glitch, and they can be moved to /nonexistent or do > they really require an existing directory to work ? I don’t know. /var/empty is a widespread convention. But it probably doesn’t matter much in fact. :-) Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2016-08-29 8:06 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-08-20 20:11 bug#24275: Misnamed directory in GuixSD John Darrington 2016-08-21 23:14 ` Leo Famulari 2016-08-22 8:21 ` Alex Kost 2016-08-22 8:47 ` Vincent Legoll 2016-08-22 18:09 ` Leo Famulari 2016-08-23 11:04 ` Vincent Legoll 2016-08-27 23:32 ` Ludovic Courtès 2016-08-27 23:49 ` Vincent Legoll 2016-08-28 13:48 ` Ludovic Courtès 2016-08-28 14:44 ` Vincent Legoll 2016-08-29 8:04 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).