* 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).