On Fri, Feb 05, 2016 at 04:04:47PM +0100, Joerg Jung wrote:
> > On 05 Feb 2016, at 08:33, Peter N. M. Hansteen <pe...@bsdly.net> wrote:
> >
> > I'm assuming I'm not the first to encounter this -
> >
> > the scenario is a group of admins who have so far run mainly Linux and some
> Solaris,
> > and who have a fairly well developed Puppet setup for maintaining among
> other things
> > local users for admins to log in and fix, running sudo as required. For
> non-admin role
> > users, LDAP (AD) is considered good enough, but that's out of scope here.
> >
> > The interesting part is when we start introducing OpenBSD machines to the
> mix, and
> > creating users with the password hashes from Linux or Solaris fails,
> apparently because
> > the hashes are not bcrypt hashes.
> >
> > I see two obvious solutions to this. Either
> >
> > 1) skip password logins, require key logins for all local users (they're
> >   admins after all), tackle any extra privilege needs via specific sudo or
> >   doas config, or
> >
> > 2) maintain a separate set of user definitions with bcrypt hashes for the
> OpenBSD
> >   boxes in the puppet setup. Then supplement as before with sudo or doas
> tricks.
> >
> > My next question is, what other workable options are there? When you found
> yourself
> > in a similar situation, introducing OpenBSD to an existing environment of
> other
> > unixes, what did you do? Are there other solutions out there, possibly with
> more
> > sophisticated approaches than the ones I've mentioned here?
> 
> There is: 3) dynamically chose the pass hash string depending on OS.
> Last time I used puppet was with 2.x release, so I do not know the exact
> syntax,
> but something like this should work:
> 
> @user {
>     myuser:
>         comment => “my user”,
>         ensure = “present”,
>         password => case $operatingsystem {
>             OpenBSD: { “$2b$….” },
>             RedHat: { “$6$...” },
>             Solaris: { “...” }
>        }
> }
> 
> I do similar in Ansible, setting a dynamic variable “user_hash” to either
> “blowfish” or “sha512”
> depending on the OS, and the use this variable to choose the right hash string
> from an dict,
> which looks like this:
> 
> users:
>   root:
>     blowfish: $2b$...
>     sha512: $6$…
> 
> …referencing it later (in loops), like this:
> 
> user: name=root password=users[root][user_hash]
> 
> > Good suggestions may merit a beverage of choice (within reason) at the
> first
> > possible opportunity.
> > --
> > Peter N. M. Hansteen, member of the first RFC 1149 implementation team
> > http://bsdly.blogspot.com/ http://www.bsdly.net/ http://www.nuug.no/
> > "Remember to set the evil bit on all malicious network traffic"
> > delilah spamd[29949]: 85.152.224.147: disconnected after 42673 seconds.

+1 for Joerg's suggestion, he beat me to typing it but we do something
similar here.  We have a "local_user" wrapper class that has some logic
built in to determine the proper password hash to apply based on the OS
and some other things.
-- 
Joshua Smith
Lead Systems Administrator WVNET

Montani Semper Liberi

Reply via email to