Re: [systemd-devel] sysusers and login.defs checks

2014-08-14 Thread Lennart Poettering
On Thu, 24.07.14 13:32, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 I guess my main concern still remains that uid range settings for system
 users would now be in two places - one used by sysusers and another by
 adduser (I now accept your argument that the other two places are
 different configuration data even if it's conceptually similar). I want
 to be able to tell a user that the configuration is in one place not
 explain that package system users ranges are in one place and
 adduser's system user range is in another.

Well, here's the thing: I reall don't think the boundary should be a user
configuration thing. It should be a vendor configuration thing. And thus
you shouldn't tell your users about how to configure it at all.

I think communicating how to select the users that get split up journals
makes a lot of sense, but not how to shift the boundary in general. And
that's kinda the key of the issue here... 

I am still convinced that adding a range command to sysusers and a
SplitUserRange= setting to journald is the right way to go...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-24 Thread Lennart Poettering
On Wed, 23.07.14 20:50, Zbigniew Jędrzejewski-Szmek (zbys...@in.waw.pl) wrote:

 
 On Wed, Jul 23, 2014 at 07:31:31PM +0200, Lennart Poettering wrote:
 
 [snip]
 
  Now, this alone wouldn't provide compatibility with the dreaded
  login.defs file. For that we'd then employ a postinst script that reads
  the range from the file, and then automatically generates a sysuers.d
  drop-in or a patches journald.conf and coredump.conf should the range
  not match the default.
  
  Does this make sense?
 Seems like a great big effort to avoid reading a simple configuration
 file.
 
 When people want to teach systemd to generate dynamic configuration
 based on some other configuration, to pass commandline options and/or
 environment variables to a daemon that is starting up, because the
 daemon cannot do it on its own, we always tell them: teach the daemon
 to do that on its own. We should apply the same principle here, and
 not spread the configuration over n automatically generated files.

Well, I'd feel easier about it if I actually believed that the
configuration file login.defs was well designed and not just completely
drowned in legacy UNIX cruft... 

Also note that the additions I propose actually don't just make the
boundary configurable, but are a lot more generic than that. They make a
subsystem-specific logic configurable, that is by default sourced from
the UID boundary, but it's not the UID boundary you configure.

Hence, the nature of the configuration changed quite a bit. Instead of
making the UID boundary configurable (which I find really wrong
conceptually, because it shouldn't be the choice of the admin, but of
the vendor), we explicitly allow the logic normally based on it to be
configured, natively.

It is philosphically quite a difference whether we expose SystemUIDMax= as
journald.conf option or whether we expose SplitUserRange= as I
propose. The former would be strictly a duplication of configuration
already existing in login.defs. The latter is much more generic...

Or try to see it from a different perspective: we already introduced
multiple SplitMode= settings, since people wanted to split up non-login
user journals too (we added that on request of David Strauss). A
weakness of those models so far was that this meant that either they get
everything split up, or just the login users, which is usually much too
unprecise. Usually what's actually desired is to split out login users
plus a certain additional range of users used to run multiple httpd
instances or so. With the configuration options I propose you can do
that.

  As a side effect this would actually even allow us to be closer to
  FEdora's current bheaviour, since it reserves UIDs  200 for static
  assignment, which we could then easily exclude from theis logic, too.
 In practice this might not be useful, because even if all the 800 UIDs
 starting from 999 were used up, it would be better to encroach on the
 static range than to fail.

Well, hopefully the static UIDs are static for a reason: they are UIDs
that might write files to NFS accessible shares. It might be a better
choice to fail the addition of the system users than to allow the wrong
networked users access...

But anyway, I personally wouldn't bother with statically assigned UIDs,
but then again, I can understand why Fedora has the policy on this it has.

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-24 Thread Lennart Poettering
On Wed, 23.07.14 21:22, Colin Guthrie (gm...@colin.guthr.ie) wrote:

  Does this make sense?
 
 To be frank, I really don't think it does make much sense at all. I
 mean, something which is currently configured in one place and then
 used

Well, no, it's not the same setting that is configured at three
places. It's different things you configure. There's conceptually quite
a difference between these settings:

 a) Numeric UID boundary

and
 
 1. ranges sysusers dynamically picks UIDs from
 2. ranges where journald splits up journals
 3. ranges where coredump grant users access to their own coredumps

While #1 configures the part that by default is the bit below the UID
boundray, #2 + #4 configure the part that by default is above the UID
boundary.

Also, we allow people to actually take benefit of this. As mentioned in
that other mail, being able to configure which users precisely get split
up journal files can be truely useful...

The tools that made use of the UID boundary actually derived very
different things from it. sysusers defined the range to pick dynamic UIDs
from as 1..BOUNDARY. journald picked the range to split of journals
for as BOUNDARY+1..MAXINT-3. The former was simple but not even correct for
Debian nor Fedora. The latter is probably what we should do, but don't
even do (because the nobody user shouldn'get his private journal file).

With making the respective ranges explicitly configurable we hence allow
distributions to properly enforce their own policies, and we add true
value to admins. All that while not blessing the crufty /etc/login.defs
file as something we officially want to support in legacy-free systems.

The more I think about all of this the more I actually get convinced
that making the ranges explicitly configurable for their respective
purpose is the right thing to do. I mean, the concept of numeric 32bit
UIDs on UNIX is seriously broken, in particular when it comes to
assigning meaning to specific ranges. Any better designed OS would have
used a namespace that requires no explicit managing (such as UUIDs), and
defined context via true metadata about the users, rather than
mathematical range expressions.

Now, because the namespace is so small, and because semantics have to be
derived from the numeric range a UID is in, I really find it beneficial
if we expose all that logic to the admin/vendor/user, then to strictly
enforce a way too simple view on things, where everything below some
value is one thing and everything above is another thing. In particular
since such a model cannot cover the special cases of UID 0, MAXINT-1,
MAXINT-2.

We have seen now that Debian defines at least 5 ranges with specific
semantics, and Fedora has at least 3 too. In the future we'll probably
see even more ranges, for example for dynamic UID allocation for things
like containers. Trying to cram this all into a single value can never
work.

Or to make this more explicit: somewhere on my TODO list is adding a
mini daemon and NSS module that can dynamically hand out UID ranges for
tools like nspawn for usage in UID namespacing. That daemon would also
have a configuration file. In that configuration file we'd have to
configure an explicit range it shall use. That range is probably going
to be something like 4-5 by default, i.e. very far away from the
boundary...

 in tools such as shadow-utils when creating users (both with and without
 -s) now has to be configured in three *additional* places. That hardly
 seems like an improvement and sounds like a recipe for misconfiguration.
 It just makes it more convoluted, where essentially the same data is
 repeated in multiple places and then you have some crazy config file
 patching system on top of that to distribute it to all those places.

It's very different data actually.

 If you were to suggest some new shared configuration file and we could
 update shadow-utils and friends to use it then fine (seems kinda
 pointless tho'), but I really don't get the logic here.

Well, login.defs might have configuration options to tell adduser from
which range to allocate regular and system users from, but it doesn't
have options to configure in which ranges to split up journal files,
in which ranges to provide access to your own coredump files, and from
which ranges to allocate dynamic throw-away UIDs for user namespacing
from. And it shouldn't have, as much of that is logic specific to the
subsystem, and is not orthogonal (by which I mean, that where to split
up journal files might or might not have overlapping ranges with where
to allocate system users from, if you follow what i mean).

 I'd rather we just refactored systemd to have a utility function
 is_system_uid() or such like which just does the compiled in default
 check as it does now (no functional change to how it works now, just
 centralised) and then I can just hack in reading and honouring
 login.defs into that utility function in a downstream patch. It would be
 a couple lines of code and 

Re: [systemd-devel] sysusers and login.defs checks

2014-07-24 Thread Colin Guthrie
Lennart Poettering wrote on 24/07/14 11:59:
 ...
 snip
 ...
 I am pretty sure you will find people who will defend some of this
 non-sense, but honestly, this is all is stuff that shouldn't exist.

OK, that was a fairly convincing message! Many thanks for taking the
time and being so explicit.

I now appreciate why the journal/coredump splitting is desirable and why
it can/should be different from the sysusers range (and from each other
too).


That said, I'm still not convinced that it should be a simple setting in
journald.conf only. If a package wants to install a service with it's
own user and explicitly wants it to have it's own journal (is apache
httpd a good example of this? Dunno, but it's conceivable either way!),
then they would need the appropriate sysusers.d snippet but then they'd
also have to either manipulate the journald.conf file's SplitUserRange
line or use a dropin file that some generator uses to manipulate and
configure the line accordingly. This just feels a bit too clunky.

Would there be a a way to somehow keep SplitUserRange for basic
(administrator) overrides, but also parse e.g. a column in the sysusers
file to specify whether or not that user wants it's own journal [and
another column for coredump]? The SplitUserRange setting could have
syntax that allowed the admin to either extend the info found in
sysusers (which would be the default), or explicitly override some
setting. e.g.

Say I wanted a split journal for UID 99 (a manually created system
user), I could just say:

  SplitUserRange=99

and all the packaged preferences in sysusers files would still be
honoured in addition to UID 99.

If the sysusers file for apache's httpd had:

  u httpd 440 HTTP User y

where y is the new split journal column, but I, as an admin, wanted
to override that, I could just specify:

  SplitUserRange=99,-440

The leading - means remove range.

Of course an alternative would be to just override the sysusers file in
/etc and put an n instead of the y (or leave it out), but there may
be a desire for the admin to override all the journal splitting easily
by doing something like:

  SplitUserRange=-1-65535
or
  SplitUserRange=-*



It's maybe crossing a boundary (i.e. journald should maybe not be
parsing sysuser's config files?), but it would certainly simplify
packaging and avoid the need for the config patching generator thingy.



Iff it's OK to parse sysusers config from journal [and coredump] stuff,
then perhaps it's also OK to parse it from shadow-utils? If so, then
this is one step closer to your goal of killing login.defs. If direct
parsing is NAKed perhaps it could just shell out to a
systemd-sysusers-getnewuserdetails command which spat out a uid:gid pair
(and took an optional --system argument), that way the parsing logic
only needs to live in one place. This is obviously pretty racey, but I
guess shadow-utils should really do some kind of locking on the files
anyway. I've no idea if/how all of this would work when hooking things
up to e.g. LDAP (I'm not even sure adduser+friends can do that?)


I guess my main concern still remains that uid range settings for system
users would now be in two places - one used by sysusers and another by
adduser (I now accept your argument that the other two places are
different configuration data even if it's conceptually similar). I want
to be able to tell a user that the configuration is in one place not
explain that package system users ranges are in one place and
adduser's system user range is in another.

Of course I'm assuming here that shadow-utils and it's adduser commands
are still expected to be around for a while... perhaps this is
considered legacy too these days (not sure what the replacement would be
tho'!)?


Sorry if this thread is getting a bit annoying, but I am convinced by
most of the arguments now!

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-24 Thread Colin Guthrie
Colin Guthrie wrote on 24/07/14 13:32:
 If direct
 parsing is NAKed perhaps it could just shell out to a
 systemd-sysusers-getnewuserdetails command which spat out a uid:gid pair
 (and took an optional --system argument), that way the parsing logic
 only needs to live in one place.

This bit, of course, is braindead! If this is done at all, it should be
via an API in libsystemd. I think my brain was suggesting that a binary
was somehow OK if such a library API didn't want to be officially
blessed, but that's just broken reasoning - such a binary is an API as
much as a library call would be.

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Reindl Harald

Am 22.07.2014 22:47, schrieb Colin Walters:
 On Mon, Jul 21, 2014, at 09:43 AM, Lennart Poettering wrote:

 I am pretty strongly against this. Making this administrator
 configurable apepars very wrong, this really should be a decision for
 the distribution vendor, and that's it.
 
 You list one concern below, are there others?
 
  We shouldn't design a system
 that comes to completely different results if you boot it up with and
 without /etc populated...
 
 If that's the only issue, surely we could just have it in the
 /usr/share/factory dir?
 
 As far as the rationale for having it administrator configurable - I
 think the idea is more that upgraded systems have a login.defs file with
 a min of 500, so humans in the midrange are still identified as such.
 
 This is called out on
 http://fedoraproject.org/wiki/Features/1000SystemAccounts
 
 Making the boundary configurable also allows some users to stay with the
 old boundary of 500, if they wish:
 
 Because /etc/login.defs is %config(noreplace), upgrades will retain
 the boundary value 500, and nothing should break.
 New installations in setups where the UIDs are centrally allocated
 (e.g. using LDAP) from 500 could be likewise configured to use the
 boundary value 500 by creating /etc/login.defs in a kickstart %pre
 script

there are *a lot* of systems out there installed long before systemd
was introduced and you can't safely dig around on dozens of machines
and re-assign the owners of files

there are data far away from /home

don't fix things which ain't broken
all that machines will *never* need dynamic user-id's abvoe 500



signature.asc
Description: OpenPGP digital signature
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Colin Guthrie
'Twas brillig, and Colin Guthrie at 23/07/14 11:29 did gyre and gimble:
 If there was a /usr/share/factory/etc/login.defs with e.g. 500 boundary
 point, then this file would presumably be copied in by tmpfiles to
 populate /etc/login.defs

Of course one thing that makes this argument slightly invalid is that if
you DO have a /usr/share/factory/etc/login.defs, then this file *should*
be configured with the same boundary as systemd's built in defaults, so
there should be no problem in the context of bootstrapping /etc.

Therefore, if this is the case, then the argument for not reading and
honouring /etc/login.defs if it exists is, IMO, invalid.

Have I won Lennart? Are you now convinced that such a patch would be in
the same category as Zbigniew's sysusers reading /etc/sysusers.d/ patch
that already went in? :p

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Kay Sievers
On Wed, Jul 23, 2014 at 1:11 PM, Colin Guthrie gm...@colin.guthr.ie wrote:
 'Twas brillig, and Colin Guthrie at 23/07/14 11:29 did gyre and gimble:
 If there was a /usr/share/factory/etc/login.defs with e.g. 500 boundary
 point, then this file would presumably be copied in by tmpfiles to
 populate /etc/login.defs

 Of course one thing that makes this argument slightly invalid is that if
 you DO have a /usr/share/factory/etc/login.defs, then this file *should*
 be configured with the same boundary as systemd's built in defaults, so
 there should be no problem in the context of bootstrapping /etc.

 Therefore, if this is the case, then the argument for not reading and
 honouring /etc/login.defs if it exists is, IMO, invalid.

 Have I won Lennart? Are you now convinced that such a patch would be in
 the same category as Zbigniew's sysusers reading /etc/sysusers.d/ patch
 that already went in? :p

I don't see the rather artificially constructed case of an
/usr/share/factory/etc/login.defs + tmpfiles snippet to copy to /etc
as a valid argument for reading login.defs.

Configuring our own base bootstrap tools with /usr/share/factory/ + a
tmpfiles snippet to copy the stuff over to /etc is a cyclic loop we
just do not support, and which makes not much sense anyway.

Bootstrap-/etc-population is intended for broken tools that cannot
be fixed properly, not our own stuff, which does not need /etc
populated.

Kay
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Colin Guthrie
Kay Sievers wrote on 23/07/14 12:36:
 I don't see the rather artificially constructed case of an
 /usr/share/factory/etc/login.defs + tmpfiles snippet to copy to /etc
 as a valid argument for reading login.defs.

Well, my point was that one of Lennart's original arguments for NOT
reading login.defs was that /etc/ wouldn't have it when bootstrapping.

But as you've just confirmed if you *are* bootstrapping /etc, then using
the compiled in defaults makes sense as you are very unlikely to be
copying across a factory version of login.defs anyway. My point was that
if you WERE copying across of a factory version of login.defs it should
really be setup with the same defaults that systemd has compiled in anyway.

So again, this is just furthering the argument that we *should* read
/etc/login.defs at runtime and the bootstrapping argument for not
doing so is not really valid.

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Kay Sievers
On Wed, Jul 23, 2014 at 1:49 PM, Colin Guthrie gm...@colin.guthr.ie wrote:
 Kay Sievers wrote on 23/07/14 12:36:
 I don't see the rather artificially constructed case of an
 /usr/share/factory/etc/login.defs + tmpfiles snippet to copy to /etc
 as a valid argument for reading login.defs.

 Well, my point was that one of Lennart's original arguments for NOT
 reading login.defs was that /etc/ wouldn't have it when bootstrapping.

The main point was that it should not be *configurable*, but be a *static*
OS property.

Unix/Linux is just so insufficient and broken regarding the uid
namespace and handling, that we should limit ourselves to the simplest
rules possible and live with it, instead of trying to fix something that is so
broken that it can never work properly with all the options people like to
throw at it.

 But as you've just confirmed if you *are* bootstrapping /etc, then using
 the compiled in defaults makes sense as you are very unlikely to be
 copying across a factory version of login.defs anyway. My point was that
 if you WERE copying across of a factory version of login.defs it should
 really be setup with the same defaults that systemd has compiled in anyway.

Right, anything else would just be broken. Copying login.defs at bootstrap time
would not make any sense in the first place. But, hey, it would be just one of
thousand ways to break a setup. It's nothing we need to care about.

 So again, this is just furthering the argument that we *should* read
 /etc/login.defs at runtime and the bootstrapping argument for not
 doing so is not really valid.

No, I still think we should limit the options of the conceptually completely
broken idea of unix uids to the absolute minimum, and not try to fix things
in any way here with layering even more broken options on top.

If we want uids that have meaning and can be managed, they should
become 128 (uuid) or at least 64 bit, so they can be statically
allocated and moved
from one machine to another.

The sysuser vs. normal user is really not significantly more that a convenience
feature, it is not used for authorization or anything. Legacy setups
on new systems
might end up with fewer convenience features, but there are no
features lost really,
which they had before systemd was used.

Kay
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Zbigniew Jędrzejewski-Szmek
On Wed, Jul 23, 2014 at 11:29:20AM +0100, Colin Guthrie wrote:
 'Twas brillig, and Colin Walters at 22/07/14 21:47 did gyre and gimble:
  On Mon, Jul 21, 2014, at 09:43 AM, Lennart Poettering wrote:
 
  I am pretty strongly against this. Making this administrator
  configurable apepars very wrong, this really should be a decision for
  the distribution vendor, and that's it.
  
  You list one concern below, are there others?
  
   We shouldn't design a system
  that comes to completely different results if you boot it up with and
  without /etc populated...
  
  If that's the only issue, surely we could just have it in the
  /usr/share/factory dir?
 
 While I'm (personally) wanting to support login.defs here, there is
 still a chicken+egg that is not really resolvable here (AFAICT)
 
 If there was a /usr/share/factory/etc/login.defs with e.g. 500 boundary
 point, then this file would presumably be copied in by tmpfiles to
 populate /etc/login.defs
I totally agree with Kay here, that /usr/share/factory is *only* for
programs which are broken and have neither compiled-in defaults nor
the ability to read /usr/share for their defaults. We should 
aim for empty /usr/share/factory/etc (*), and systemd certainly should
not depend or use anything in it.

And anyway, the file in /usr/share/factory/etc would have the same
defaults as compiled-in into systemd, so it is not useful. I think
that your angry chicken is not a problem.

(*) Empty files containing commented-out directives as a way of
documentation are fine.

 This was pretty much the same concern I had when Zbigniew patched
 sysusers to also look in /etc/sysusers.d/. The same chicken and egg
 scenario exists there, but Lennart was OK with it in that context.
 
 To be honest, I'm not really sure why this chicken+egg is different from
 the sysusers one, so I'd expect either both to be rejected or both
 accepted but I'm not crazy fussed in this case as it should be easy
 enough to hack in /etc/login.defs parsing downstream where our primary
 use case is supporting normal installs where /etc/ is persistent and
 often upgraded from older releases.
The fallacy here is trying to support stateless systems with users.
Users (account numbers, their passwords, privileges) are state,
and the most important one at that. But the admin cannot expect to
nuke /etc and have working users, unless the users are defined
remotely.

I think it is fine to have locally defined users, and some way to
determine which of those users are human. If the admin purges /etc,
the interpretation of which users are human resets to the compiled in
default. IMHO this is fine.

I like Lennarts idea of using 'user' group, since it is more flexible than
static ranges. It might be nice to support in the future if we work out
the details. But there's also a need for backwards compatibility. I know
from my own admin experience and agree with Reindl that UID changes are a
huge pain, and we have to support existing setups without requiring any
renumbering. This basically means that any distribution which supports
upgrades from previous versions will add /etc/login.defs support.

On Wed, Jul 23, 2014 at 02:22:59PM +0200, Kay Sievers wrote:
 No, I still think we should limit the options of the conceptually completely
 broken idea of unix uids to the absolute minimum, and not try to fix things
 in any way here with layering even more broken options on top.
Well, systemd uses the user/systemd boundary split in journald and coredump
permissions code, so we *are* layering on top. Even more importantly, we
are using it to allocate numbers in sysusers. Even with distribution
support, it is not possible to arbitrarily redefine UID ranges,
because users' UIDs are something that can be only changed by admin
intervention. I don't see how we can skip /etc/login.defs support
without doing a disservice to our users.

Previously we added the systemd-journal group. It was fine, because
it worked in a backwards-compatible way, and we could document that giving
users access to the journal can be done following a few simple steps.

Anyway, I think that /etc/login.defs support is made out to be something
much more complicated than it really is. IMHO we should:

- read /etc/login.defs and fall back to the compiled in value
- use whatever result we get in coredump, journald, and sysusers

It's not like the implementation would be hard, intrusive, or slow. It'd be
probably +3 lines in one or two places.

If we come up with additional heuristics or rules to determine human
accounts, we can safely add them in a backwards compatible way.

Zbyszek
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Kay Sievers
On Wed, Jul 23, 2014 at 5:17 PM, Zbigniew Jędrzejewski-Szmek
zbys...@in.waw.pl wrote:
 On Wed, Jul 23, 2014 at 04:55:59PM +0200, Kay Sievers wrote:
 On Wed, Jul 23, 2014 at 4:28 PM, Zbigniew Jędrzejewski-Szmek
 zbys...@in.waw.pl wrote:

  Anyway, I think that /etc/login.defs support is made out to be something
  much more complicated than it really is. IMHO we should:
 
  - read /etc/login.defs and fall back to the compiled in value
  - use whatever result we get in coredump, journald, and sysusers
 
  It's not like the implementation would be hard, intrusive, or slow. It'd be
  probably +3 lines in one or two places.

 It is not about the effort *how* to do it, it is *why*. And I still
 don't think we should have dynamic configuration options for this, it
 is all just a huge mess that needs to be limited to the bare minimum,
 it is just too broken as a concept to be supported that way.

  If we come up with additional heuristics or rules to determine human
  accounts, we can safely add them in a backwards compatible way.

 We cannot do any normal user queries from journald, so none of the
 metadata like the primary group is easily for a user is available.
 I know.

 Sysusers is, and probably always will be, limited to the classic
 passwd, group file. Maybe we can just read the files ourselves and
 find out that a certain uid is a normal user? Like:
   - uid = 1000 -- normal user
   - lookup uid in passwd
   - user not found -- normal user
   - user  1000  group == users -- normal user
   - everything else would be a system user
 But please add to this (at the top)
 - parse SYS_GID_MIN and SYS_GID_MAX from /etc/login.defs and if
   found and users falls within -- system user

 This is safe as soon as /etc is accessible and provides backwards
 compatibillity.

Well, the point is to make the rules in this broken model simpler, not
more complicated as they already are. :)

If we would read login.defs, we should probably not do any magic
heuristics. And at the moment, I still think we should ignore
login.defs.

 Also, I'd modify
 - user  1000  group == users -- normal user
 to
 - group == users -- normal user
 not to make things too complicated.

 I see another angry chicken and broken egg problem now:
 - We want to get rid of /etc/login.defs, *but*
 - we read /etc/login.defs at compilation time.
 This means that we probably should stop looking at that file during
 compilation time and stick to an internal default, possibly allowing
 overriding with ./configure switch.

Maybe, yes. It was just to init the build sys with the current distro defaults.

Kay
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Zbigniew Jędrzejewski-Szmek
On Wed, Jul 23, 2014 at 05:30:53PM +0200, Kay Sievers wrote:
 On Wed, Jul 23, 2014 at 5:17 PM, Zbigniew Jędrzejewski-Szmek
 zbys...@in.waw.pl wrote:
  On Wed, Jul 23, 2014 at 04:55:59PM +0200, Kay Sievers wrote:
  On Wed, Jul 23, 2014 at 4:28 PM, Zbigniew Jędrzejewski-Szmek
  zbys...@in.waw.pl wrote:
 
   Anyway, I think that /etc/login.defs support is made out to be something
   much more complicated than it really is. IMHO we should:
  
   - read /etc/login.defs and fall back to the compiled in value
   - use whatever result we get in coredump, journald, and sysusers
  
   It's not like the implementation would be hard, intrusive, or slow. It'd 
   be
   probably +3 lines in one or two places.
 
  It is not about the effort *how* to do it, it is *why*. And I still
  don't think we should have dynamic configuration options for this, it
  is all just a huge mess that needs to be limited to the bare minimum,
  it is just too broken as a concept to be supported that way.
 
   If we come up with additional heuristics or rules to determine human
   accounts, we can safely add them in a backwards compatible way.
 
  We cannot do any normal user queries from journald, so none of the
  metadata like the primary group is easily for a user is available.
  I know.
 
  Sysusers is, and probably always will be, limited to the classic
  passwd, group file. Maybe we can just read the files ourselves and
  find out that a certain uid is a normal user? Like:
- uid = 1000 -- normal user
- lookup uid in passwd
- user not found -- normal user
- user  1000  group == users -- normal user
- everything else would be a system user
  But please add to this (at the top)
  - parse SYS_GID_MIN and SYS_GID_MAX from /etc/login.defs and if
found and users falls within -- system user
 
  This is safe as soon as /etc is accessible and provides backwards
  compatibillity.
 
 Well, the point is to make the rules in this broken model simpler, not
 more complicated as they already are. :)
 
 If we would read login.defs, we should probably not do any magic
 heuristics. And at the moment, I still think we should ignore
 login.defs.
If we find it, then certainly, it should override other considerations.

  Also, I'd modify
  - user  1000  group == users -- normal user
  to
  - group == users -- normal user
  not to make things too complicated.
 
  I see another angry chicken and broken egg problem now:
  - We want to get rid of /etc/login.defs, *but*
  - we read /etc/login.defs at compilation time.
  This means that we probably should stop looking at that file during
  compilation time and stick to an internal default, possibly allowing
  overriding with ./configure switch.
 
 Maybe, yes. It was just to init the build sys with the current distro 
 defaults.
Right, but it makes login.defs even more entrenched.

Zbyszek
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Lennart Poettering
On Tue, 22.07.14 18:35, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 
 'Twas brillig, and Lennart Poettering at 22/07/14 12:10 did gyre and gimble:
   I guess it's OK to do this kind of user lookup stuff from the journal
   code (i.e. server_fix_perms())?
  Hmm, yuck. Actually it is really difficult
  ...
  Bummer, not sure if we can save this idea...
 
 Yeah, I did wonder about it when you suggested it!

Talked to Kay about this a bit more. Here's an idea:

There are basically three areas where the system vs. regular user UID
boundary matters:

a) in journald for splitting up journals for individual users
b) in the coredump hook, for similar purposes
c) in sysusers when creating new system users

Solution for a): add a new configuration option to journald.conf for
declaring the UID range to split up journals in. Usage like this:
  
  SplitUserRange=1000-65533

Solution for b): similar, but an option for coredump.conf

Solution for c): a new r directive or so for the sysusers snippets
that declares ranges to allocate new system users from:

 r - 200-999

In all three cases, if the setting is not set, we default to the
configure time boundary (1000) as before.

To make this generic, we'd actually allow people to configure multiple
ranges freely:

   SplitUserRange=1000-2000,1-6533

or for sysusers.d

r - 200-700
r - 800-999

Now, this alone wouldn't provide compatibility with the dreaded
login.defs file. For that we'd then employ a postinst script that reads
the range from the file, and then automatically generates a sysuers.d
drop-in or a patches journald.conf and coredump.conf should the range
not match the default.

Does this make sense?

As a side effect this would actually even allow us to be closer to
FEdora's current bheaviour, since it reserves UIDs  200 for static
assignment, which we could then easily exclude from theis logic, too.

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-23 Thread Zbigniew Jędrzejewski-Szmek
On Wed, Jul 23, 2014 at 07:31:31PM +0200, Lennart Poettering wrote:

[snip]

 Now, this alone wouldn't provide compatibility with the dreaded
 login.defs file. For that we'd then employ a postinst script that reads
 the range from the file, and then automatically generates a sysuers.d
 drop-in or a patches journald.conf and coredump.conf should the range
 not match the default.
 
 Does this make sense?
Seems like a great big effort to avoid reading a simple configuration
file.

When people want to teach systemd to generate dynamic configuration
based on some other configuration, to pass commandline options and/or
environment variables to a daemon that is starting up, because the
daemon cannot do it on its own, we always tell them: teach the daemon
to do that on its own. We should apply the same principle here, and
not spread the configuration over n automatically generated files.

 As a side effect this would actually even allow us to be closer to
 FEdora's current bheaviour, since it reserves UIDs  200 for static
 assignment, which we could then easily exclude from theis logic, too.
In practice this might not be useful, because even if all the 800 UIDs
starting from 999 were used up, it would be better to encroach on the
static range than to fail.

Zbyszek
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-22 Thread Lennart Poettering
On Mon, 21.07.14 23:44, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 
 'Twas brillig, and Lennart Poettering at 21/07/14 23:28 did gyre and gimble:
  On Mon, 21.07.14 15:43, Lennart Poettering (lenn...@poettering.net) wrote:
  
  While I appreciate sysusers is intended primarily for bootstrapping
  /etc, I guess the general consensus is to move package pre/post scripts
  over to use sysusers instead anyway. Thus the tool should really check
  /etc/login.defs at runtime if it's present before falling back to its
  defaults. Those defaults could be set from a compile time check of
  login.defs too.
 
  I am pretty strongly against this. Making this administrator
  configurable apepars very wrong, this really should be a decision for
  the distribution vendor, and that's it.  We shouldn't design a system
  that comes to completely different results if you boot it up with and
  without /etc populated...
  
  Here's another idea: maybe we can bind this to the users group. Many
  distributions (not all...) have this group and add regular users to
  it. Maybe that's what we should use on top of the numeric UID boundary
  check: if some user is either = 1000 or is a member of the users
  group we will consider him or her a regular user instead of a system
  user. In many cases this should magically make things work. And even where
  this isn't sufficient we at least have a nice solution to tell people:
  make your user a member of users and it will properly be recognised as
  regular user.
  
  Happy to add a patch for this!
 
 And I guess this heuristic would be easy enough to add to
 accountsservice too.
 
 I guess it's OK to do this kind of user lookup stuff from the journal
 code (i.e. server_fix_perms())?

Hmm, yuck. Actually it is really difficult

It's not OK to do NSS calls from journald, as that might cause
communication with local daemons which in turn want to log, which might
result in a cyclic dep and hence a deadlock.

So if this is implemented, then we'd have to read the auxiliary group
list from the sending process (via /proc/$PID/status) directly, so that
we don't have to involve NSS This is awfully racy however.

Bummer, not sure if we can save this idea...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-22 Thread Colin Walters
On Mon, Jul 21, 2014, at 09:43 AM, Lennart Poettering wrote:

 I am pretty strongly against this. Making this administrator
 configurable apepars very wrong, this really should be a decision for
 the distribution vendor, and that's it.

You list one concern below, are there others?

  We shouldn't design a system
 that comes to completely different results if you boot it up with and
 without /etc populated...

If that's the only issue, surely we could just have it in the
/usr/share/factory dir?

As far as the rationale for having it administrator configurable - I
think the idea is more that upgraded systems have a login.defs file with
a min of 500, so humans in the midrange are still identified as such.

This is called out on
http://fedoraproject.org/wiki/Features/1000SystemAccounts

Making the boundary configurable also allows some users to stay with the
old boundary of 500, if they wish:

Because /etc/login.defs is %config(noreplace), upgrades will retain
the boundary value 500, and nothing should break.
New installations in setups where the UIDs are centrally allocated
(e.g. using LDAP) from 500 could be likewise configured to use the
boundary value 500 by creating /etc/login.defs in a kickstart %pre
script. 
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Colin Guthrie
'Twas brillig, and Zbigniew Jędrzejewski-Szmek at 21/07/14 03:16 did
gyre and gimble:
 I agree. Not reading /etc/login.defs makes the tool troublesome for
 existing installations.
 
 I've experienced a related problem, where coredumps would not be
 visible for my user on a Fedora machine which has been upgraded over
 many versions.  It turns out that the user had uid 500 or something
 like that, and systemd-coredump treated the account as as a system
 account.

Yeah, I see that the SYSTEM_UID_MAX define is used in a few places
(namely the journal and sysusers).

I guess this should be abstracted out and changed such that it reads
login.defs and uses that value at runtime.

That said, it's also not inconceivable that the login.defs is updated
but user accounts still exist that are in the 500-1000 range. So perhaps
we should consider adding the same kind of heuristics for handling the
500-1000 jump that accountsservice has[1]? i.e. we add a
is_system_user() utility function or similar where this heuristic can be
an optional thing (like in accountsservice). What are the thoughts here?
IMO, I'd say that we should just honour login.defs and forget about
heuristics - anything upgraded should keep it's old login.defs values
and not update them. Only if you do a fresh install or manually renumber
your users should you change login.defs otherwise strange things will
happen to you (e.g. on login screen user lists, in user editing GUIs, in
coredump handling and other places). WDYT?




Also, while SYS_[UG]ID_MAX is currently parsed from login.defs during
configure, and I proposed to fall back to [UG]ID_MIN-1, I notice a few
things...

[I'll drop my [UG]ID syntax from now on... assume it's there!]

1. When the bump from 500 to 1000 was done in Fedora[2], SYS_UID_MAX was
added. But SYS_UID_MIN was also added. We do not currently parse this,
but perhaps we should and sysusers should refuse to work if we cannot
find a suitable UID to allocate?

2. Or perhaps we should consider whether the SYS_UID_MIN/MAX is useful
at all? Perhaps if not much uses it, it should just be killed off and we
should always just use UID_MIN-1?

Personally, I'd just go with 2 - the fact there are two settings to
represent a boundary point makes no sense to me - although there may be
valid reasons to leave a gap there?

Col


[1] http://cgit.freedesktop.org/accountsservice/tree/src/user-classify.c#n84

[2]
http://pkgs.fedoraproject.org/cgit/shadow-utils.git/commit/shadow-utils.login.defs?id=5d7612da5b7be0c7ce8bad72c4d69a8f347696db


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Lennart Poettering
On Sun, 20.07.14 22:31, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 Hi,
 
 We're still using 500 as our [UG]ID_MIN in /etc/login.defs, but I'm
 looking to change that to be more in line with what everyone else seems
 to do.
 
 One thing I found while looking at the sysusers code was that the only
 values read from /etc/login.defs were SYSTEM_[UG]ID_MAX and they were
 only read a compile (or rather configure) time, not at runtime.

Yeah, that's an intended design decision.

 While I appreciate sysusers is intended primarily for bootstrapping
 /etc, I guess the general consensus is to move package pre/post scripts
 over to use sysusers instead anyway. Thus the tool should really check
 /etc/login.defs at runtime if it's present before falling back to its
 defaults. Those defaults could be set from a compile time check of
 login.defs too.

I am pretty strongly against this. Making this administrator
configurable apepars very wrong, this really should be a decision for
the distribution vendor, and that's it.  We shouldn't design a system
that comes to completely different results if you boot it up with and
without /etc populated...

Also, the specific configuration file contains more configuration
options that are obsolete, than configuration options that aren't. From
chfn settings, to pam_console support, to the ability to override the
timezone or erase characters. Yuck!

I am fully aware that many distributions are transitioning from from 500
system users to 1000 system users, but I also don't see how this
transition would be made any easier by keeping a user configuration file
around for this. I mean, ultimately you will still have the problem that
in the range 500-999 you might end uo with both users interleaved with
each other... The best thing to do is in this case is live with it, and
make sure we never bind strictly security-relevant decisions to the
boundary, but only use it as a hint...

 So, I propose the following:
 
 1. Modify configure to check /etc/login.defs for SYSTEM_[UG]ID_MAX but
 fall back to [UG]ID_MIN-1 if not found.
 2. Modify sysusers.c to do the same check at runtime
 
 If I cook up a patch will that be accepted?

I am totally not convinced that this would be a good idea, sorry.

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Lennart Poettering
On Sun, 20.07.14 22:38, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 
 'Twas brillig, and Colin Guthrie at 20/07/14 22:31 did gyre and gimble:
  Those defaults could be set from a compile time check of
  login.defs too.
 
 FWIW, at least here, /etc/login.defs is not readable by regular users so
 any build system that builds as non-root won't even get those defaults
 anyway, so that's probably another argument for runtime checks too...

That sounds snake-oilish and broken, really...

Either way, there's a configure option --with-system-uid-max= (as well
as --with-system-gid-max=) to make the right choice for your
distribution...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Lennart Poettering
On Mon, 21.07.14 04:16, Zbigniew Jędrzejewski-Szmek (zbys...@in.waw.pl) wrote:

  I can't really think of any reason as to why this would genuinely help,
  but then I can't think why a regular user.
  
  Not a big deal in this case really tho' - I think the original argument
  still stands.
 I agree. Not reading /etc/login.defs makes the tool troublesome for
 existing installations.
 
 I've experienced a related problem, where coredumps would not be
 visible for my user on a Fedora machine which has been upgraded over
 many versions.  It turns out that the user had uid 500 or something
 like that, and systemd-coredump treated the account as as a system
 account.

Sure, the transition will create problems, but it necessarily will. 

What matters really is that we don't allow things that we shouldn't
allow, but if things are not allowed that should be allowed, then that's
much less problematic, but simply a negative cosnequence of the
transition...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Lennart Poettering
On Mon, 21.07.14 13:11, Colin Guthrie (gm...@colin.guthr.ie) wrote:

 That said, it's also not inconceivable that the login.defs is updated
 but user accounts still exist that are in the 500-1000 range. So perhaps
 we should consider adding the same kind of heuristics for handling the
 500-1000 jump that accountsservice has[1]? i.e. we add a
 is_system_user() utility function or similar where this heuristic can be
 an optional thing (like in accountsservice). What are the thoughts here?
 IMO, I'd say that we should just honour login.defs and forget about
 heuristics - anything upgraded should keep it's old login.defs values
 and not update them. Only if you do a fresh install or manually renumber
 your users should you change login.defs otherwise strange things will
 happen to you (e.g. on login screen user lists, in user editing GUIs, in
 coredump handling and other places). WDYT?

I am much more open about code that magically detects where the boundary
is, when allocating a new system users... But I don't see how this could
work in real life. The accountssserice code doesn't appear too
convincing to me... There are system users with login sheels, and there
are normal accounts that have been disabled, I really don#t find a logic
bound to either of that particularly striking I must say...

What could work better is to check the home directory. If it is / or
something in /var we can be reasonably sure that something is a system
user, but if it isn't we have no clue...

 Also, while SYS_[UG]ID_MAX is currently parsed from login.defs during
 configure, and I proposed to fall back to [UG]ID_MIN-1, I notice a few
 things...
 
 [I'll drop my [UG]ID syntax from now on... assume it's there!]
 
 1. When the bump from 500 to 1000 was done in Fedora[2], SYS_UID_MAX was
 added. But SYS_UID_MIN was also added. We do not currently parse this,
 but perhaps we should and sysusers should refuse to work if we cannot
 find a suitable UID to allocate?
 
 2. Or perhaps we should consider whether the SYS_UID_MIN/MAX is useful
 at all? Perhaps if not much uses it, it should just be killed off and we
 should always just use UID_MIN-1?
 
 Personally, I'd just go with 2 - the fact there are two settings to
 represent a boundary point makes no sense to me - although there may be
 valid reasons to leave a gap there?

As i understand the current stuff in Fedora's login.defs, the idea is
that 1-200 is left for statically assigned system users, 201-999 for
dynamically assigned system users, and 1000-6 for normal users.

Based on this, static system users are allocated growing from 1 upwards,
dynamic system users are allocated growing from 999 downwards, and
normal users from 1000 upwards.

In sysusers we don't care much abotu the actual ranges, we just allocate
from some specified start value downards, and that start value is a
compile time option, that defaults to 999 or is SYS_UID_MAX from
login.defs, should that be available...

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Lennart Poettering
On Mon, 21.07.14 15:43, Lennart Poettering (lenn...@poettering.net) wrote:

  While I appreciate sysusers is intended primarily for bootstrapping
  /etc, I guess the general consensus is to move package pre/post scripts
  over to use sysusers instead anyway. Thus the tool should really check
  /etc/login.defs at runtime if it's present before falling back to its
  defaults. Those defaults could be set from a compile time check of
  login.defs too.
 
 I am pretty strongly against this. Making this administrator
 configurable apepars very wrong, this really should be a decision for
 the distribution vendor, and that's it.  We shouldn't design a system
 that comes to completely different results if you boot it up with and
 without /etc populated...

Here's another idea: maybe we can bind this to the users group. Many
distributions (not all...) have this group and add regular users to
it. Maybe that's what we should use on top of the numeric UID boundary
check: if some user is either = 1000 or is a member of the users
group we will consider him or her a regular user instead of a system
user. In many cases this should magically make things work. And even where
this isn't sufficient we at least have a nice solution to tell people:
make your user a member of users and it will properly be recognised as
regular user.

Happy to add a patch for this!

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-21 Thread Colin Guthrie
'Twas brillig, and Lennart Poettering at 21/07/14 23:28 did gyre and gimble:
 On Mon, 21.07.14 15:43, Lennart Poettering (lenn...@poettering.net) wrote:
 
 While I appreciate sysusers is intended primarily for bootstrapping
 /etc, I guess the general consensus is to move package pre/post scripts
 over to use sysusers instead anyway. Thus the tool should really check
 /etc/login.defs at runtime if it's present before falling back to its
 defaults. Those defaults could be set from a compile time check of
 login.defs too.

 I am pretty strongly against this. Making this administrator
 configurable apepars very wrong, this really should be a decision for
 the distribution vendor, and that's it.  We shouldn't design a system
 that comes to completely different results if you boot it up with and
 without /etc populated...
 
 Here's another idea: maybe we can bind this to the users group. Many
 distributions (not all...) have this group and add regular users to
 it. Maybe that's what we should use on top of the numeric UID boundary
 check: if some user is either = 1000 or is a member of the users
 group we will consider him or her a regular user instead of a system
 user. In many cases this should magically make things work. And even where
 this isn't sufficient we at least have a nice solution to tell people:
 make your user a member of users and it will properly be recognised as
 regular user.
 
 Happy to add a patch for this!

And I guess this heuristic would be easy enough to add to
accountsservice too.

I guess it's OK to do this kind of user lookup stuff from the journal
code (i.e. server_fix_perms())?

Col


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] sysusers and login.defs checks

2014-07-20 Thread Colin Guthrie
Hi,

We're still using 500 as our [UG]ID_MIN in /etc/login.defs, but I'm
looking to change that to be more in line with what everyone else seems
to do.

One thing I found while looking at the sysusers code was that the only
values read from /etc/login.defs were SYSTEM_[UG]ID_MAX and they were
only read a compile (or rather configure) time, not at runtime.

While I appreciate sysusers is intended primarily for bootstrapping
/etc, I guess the general consensus is to move package pre/post scripts
over to use sysusers instead anyway. Thus the tool should really check
/etc/login.defs at runtime if it's present before falling back to its
defaults. Those defaults could be set from a compile time check of
login.defs too.

So, I propose the following:

1. Modify configure to check /etc/login.defs for SYSTEM_[UG]ID_MAX but
fall back to [UG]ID_MIN-1 if not found.
2. Modify sysusers.c to do the same check at runtime

If I cook up a patch will that be accepted?

Col



-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-20 Thread Colin Guthrie
'Twas brillig, and Colin Guthrie at 20/07/14 22:31 did gyre and gimble:
 Those defaults could be set from a compile time check of
 login.defs too.

FWIW, at least here, /etc/login.defs is not readable by regular users so
any build system that builds as non-root won't even get those defaults
anyway, so that's probably another argument for runtime checks too...

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-20 Thread Reindl Harald

Am 20.07.2014 23:38, schrieb Colin Guthrie:
 'Twas brillig, and Colin Guthrie at 20/07/14 22:31 did gyre and gimble:
 Those defaults could be set from a compile time check of
 login.defs too.
 
 FWIW, at least here, /etc/login.defs is not readable by regular users so
 any build system that builds as non-root won't even get those defaults
 anyway, so that's probably another argument for runtime checks too...

why is it not readable?

[root@srv-rhsoft:~]$ rpm -q --file /etc/login.defs
shadow-utils-4.1.5.1-8.fc20.x86_64

[root@srv-rhsoft:~]$ stat /etc/login.defs
  File: '/etc/login.defs'
  Size: 1475Blocks: 8  IO Block: 4096   regular file
Device: 901h/2305d  Inode: 1179182 Links: 1
Access: (0644/-rw-r--r--)  Uid: (0/root)   Gid: (0/root)
Access: 2011-08-02 14:24:16.0 +0200
Modify: 2011-08-02 14:24:16.0 +0200
Change: 2014-03-01 21:20:57.113612115 +0100



signature.asc
Description: OpenPGP digital signature
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-20 Thread Colin Guthrie
'Twas brillig, and Reindl Harald at 20/07/14 22:52 did gyre and gimble:
 
 Am 20.07.2014 23:38, schrieb Colin Guthrie:
 'Twas brillig, and Colin Guthrie at 20/07/14 22:31 did gyre and gimble:
 Those defaults could be set from a compile time check of
 login.defs too.

 FWIW, at least here, /etc/login.defs is not readable by regular users so
 any build system that builds as non-root won't even get those defaults
 anyway, so that's probably another argument for runtime checks too...
 
 why is it not readable?

No idea. Probably some pseudo security related reason dating back many
years.

Perms here are:
-rw-r- 1 root shadow

I can't really think of any reason as to why this would genuinely help,
but then I can't think why a regular user.

Not a big deal in this case really tho' - I think the original argument
still stands.

Col

-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
  Tribalogic Limited http://www.tribalogic.net/
Open Source:
  Mageia Contributor http://www.mageia.org/
  PulseAudio Hacker http://www.pulseaudio.org/
  Trac Hacker http://trac.edgewall.org/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] sysusers and login.defs checks

2014-07-20 Thread Zbigniew Jędrzejewski-Szmek
On Sun, Jul 20, 2014 at 11:30:20PM +0100, Colin Guthrie wrote:
 'Twas brillig, and Reindl Harald at 20/07/14 22:52 did gyre and gimble:
  
  Am 20.07.2014 23:38, schrieb Colin Guthrie:
  'Twas brillig, and Colin Guthrie at 20/07/14 22:31 did gyre and gimble:
  Those defaults could be set from a compile time check of
  login.defs too.
 
  FWIW, at least here, /etc/login.defs is not readable by regular users so
  any build system that builds as non-root won't even get those defaults
  anyway, so that's probably another argument for runtime checks too...
  
  why is it not readable?
 
 No idea. Probably some pseudo security related reason dating back many
 years.
 
 Perms here are:
 -rw-r- 1 root shadow
 
 I can't really think of any reason as to why this would genuinely help,
 but then I can't think why a regular user.
 
 Not a big deal in this case really tho' - I think the original argument
 still stands.
I agree. Not reading /etc/login.defs makes the tool troublesome for
existing installations.

I've experienced a related problem, where coredumps would not be
visible for my user on a Fedora machine which has been upgraded over
many versions.  It turns out that the user had uid 500 or something
like that, and systemd-coredump treated the account as as a system
account.

Zbyszek
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel