+1 on the prompt for user creation if none-exists On Tue, 13 Sep 2016, 15:32 Aled Sage, <aled.s...@gmail.com> wrote:
> Hi all, > > I still think we really need to change the status quo. For me, there are > two very compelling arguments: > > 1. In karaf, it will always prompt for a username and password. > If running in localhost, you can enter any text and it will accept > it. But you do have to "log in". > 2. If running on a server, you need to find the auto-generated > username:password from the log or from stdout. > > (1) is a bad user experience - the user doesn't know what to type, and > then it turns out that it is a pointless login dialog! It happens > because the login is controlled by the jaas configuration, which then > delegates to Brooklyn code for checking the given username and password. > > For (2), I'd expect a fair number of users to go down this route. > Currently the Brooklyn docs are not good at telling you how to find this > username and password (partly because we have entirely different login > behaviour for localhost, vagrant and remote-server). We are also all in > agreement (I think) that it's a poor user experience. > > --- > I'd like a consistent way for us to handle initial login on both > localhost and server (and vagrant) - one that we are happy for users to > experience, and for us to document well. > > --- > _*New Proposal*_ > > On initial connection via the web-console, it asks the server if there > is any security configuration options set. If there is not, the > web-console immediately re-directs the user to a page for creating the > initial user:password. Once submitted, the username and hash of the > password are written to $KARAF_HOME/etc/brooklyn.cfg for subsequent use. > > Over time, we'd further improve this to allow someone to set up the > initial security configuration via this page (e.g. giving LDAP details, > etc). > > _Implementation Considerations_ > Not sure of the details. It would be a bit fiddly, but hopefully not too > hard. > > The web-console would need to do some initial requests to find out if a > new user needs to be created. It would then redirect, POST the > user-creation request, and automatically login with the new credentials. > > Server-side, we'd need some way for an unauthenticated user to submit > the is-security-configured request and the initial-login-user-creation > request. If we continue to use the existing Karaf jaas configuration, > then the web-console could have submitted some garbage credentials so we > get into the Brooklyn code (perhaps with default entitlements ensuring > that all other access is forbidden); or we could have an unauthenticated > REST endpoint that would handle its own security checks - always > rejecting requests if any security configuration exists (which sounds > scary). > > We'd need to extend the Brooklyn REST api for login-user-creation. > > For now, it would write to the $KARAF_HOME/etc/brooklyn.cfg file. Longer > term, we could store the security config in the Brooklyn persisted state. > > We could also extend the Brooklyn CLI to support doing the > initial-login-user-creation. > > --- > _*Alternative Proposal 1*_ > If consensus is that folk really love the default of > localhost-has-no-authentication, then we could look more into how to > configure Karaf jaas so that it doesn't prompt for a login. I personally > haven't been involved in that, so not sure how feasible/hard it is. > > --- > _*Alternative Proposal 2*_ > We could make the default be unauthenticated (including disabling jaas > in the default config files). > > Aled > > > On 08/09/2016 22:05, John McCabe wrote: > > By way of comparison, Jenkins deploys out of the box with no auth. > > > > On Thu, 8 Sep 2016 at 21:11 Svetoslav Neykov < > > svetoslav.ney...@cloudsoftcorp.com> wrote: > > > >> Letsencrypt (or any other certification) is a no go on localhost or on > >> remotes where you don't know the domain name used to access it. > >> Browsers are moving slowly to a place where even plain http will trigger > >> security warnings so self-signed won't be such a bad alternative at that > >> point. > >> > >> +1 for removing unauthenticated localhost access > >> > >>>> Are you strongly against the status quo as well (given that the > >> password may be "buried" when installing on a server)? > >>> It has always been ugly but has struck me as the least ugly option. > >> Here's an alternative which has a better user experience with the same > >> level of security. > >> When Brooklyn starts it sees that no password is configured so generates > >> one (as it does currently) and puts it in brooklyn.properties or > >> etc/brooklyn.cfg (btw straightforward to implement in Karaf). The > >> documentation points the user to look for the password in that file > which > >> is very easy to do as the file is minimally populated at this point - > way > >> easier than sorting through a log file - always at the same line. This > has > >> the possitive effect that the password remains the same between > restarts. > >> It's been discussed already - don't remember what the cons were? > >> > >>> Is there a way to pass metadata to rpm/deb? That would be nice, we > >> recommend running "yum install brooklyn -d admin.password=s3cr3t" > >> That's no different from telling the user in docs to do "yum install > >> brooklyn && echo admin.password=s3cr3t >> /etc/brooklyn.cfg". The former > >> feels like magic, the latter self-documents how to change the password > at > >> any point. > >> As for the question itself - won't be surprised if passing an > environment > >> variable will let the postinstall script access it and do whatever it > needs > >> to (as a subshell to the current session). > >> > >> > >> Svet. > >> > >> > >>> On 8.09.2016 г., at 22:18, John McCabe <j...@johnmccabe.net> wrote: > >>> > >>> re: letsencrypt, their flow requires the node requesting the cert be > >>> publicly accessible, a problem for getting started, but super useful in > >>> most other cases. > >>> > >>> On Thu, 8 Sep 2016 at 20:17 John McCabe <j...@johnmccabe.net> wrote: > >>> > >>>> -1 on removing it unless it can be reproduced in some form for the > >> getting > >>>> started envs, the vagrant envs for example are local to the users > system > >>>> and don't need to be secured as they are *not* intended for use in a > >>>> production capacity (perhaps worth adding a note pointing the user to > >> the > >>>> section on securing a deploy (users/ssl etc)). The getting started ask > >> on > >>>> the user should be absolutely minimal, even default passwords aren't > >> great > >>>> UX in this context. > >>>> > >>>> Alternatively I've seen flows where on a fresh install/first startup > you > >>>> are prompted to create an admin account when first accessing the UI. I > >>>> would personally prefer that to default passwords (which is just as > >>>> insecure as no password, maybe even less so). > >>>> > >>>> ps. hello ::) > >>>> > >>>> On Thu, 8 Sep 2016 at 17:19 Geoff Macartney < > >>>> geoff.macart...@cloudsoftcorp.com> wrote: > >>>> > >>>>>> Is there a way to pass metadata to rpm/deb? That would be nice, we > >>>>> recommend running "yum install brooklyn -d admin.password=s3cr3t" > >>>>> > >>>>> as far as I understand that’s not possible. I think there are > >>>>> workarounds but they go against the intent of RPM. > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> ———————————————————— > >>>>> Gnu PGP key - http://is.gd/TTTTuI > >>>>> > >>>>> > >>>>>> On 8 Sep 2016, at 17:11, Alex Heneveld < > >> alex.henev...@cloudsoftcorp.com> > >>>>> wrote: > >>>>>> > >>>>>>> Are you strongly against the status quo as well (given that the > >>>>> password may be "buried" when installing on a server)? > >>>>>> It has always been ugly but has struck me as the least ugly option. > >>>>>> > >>>>>> Is there a way to pass metadata to rpm/deb? That would be nice, we > >>>>> recommend running "yum install brooklyn -d admin.password=s3cr3t" > >>>>>> > >>>>>> In general though I think this area of the product is good. > >>>>>> > >>>>>> > >>>>>>> HTTPS > >>>>>> This has also been mentioned and while I would like it in an ideal > >>>>> world, the scare-the-daylights splash screen that browsers show if > you > >> have > >>>>> a self-signed cert is a compelling reason in my mind to adopt the > same > >>>>> philosophy, start easy and document security, rather than start > secure > >> but > >>>>> hard-to-use. > >>>>>> > >>>>>> --A > >>>>>> > >>>>>> > >>>>>> > >>>>>> On 08/09/2016 16:58, Aled Sage wrote: > >>>>>>> Hi Alex, > >>>>>>> > >>>>>>> Good points. > >>>>>>> > >>>>>>> Are you strongly against the status quo as well (given that the > >>>>> password may be "buried" when installing on a server)? > >>>>>>> --- > >>>>>>> It feels like your objections are mostly about the auto-generated > >>>>> password, rather than about whether we have unauthenticating > localhost. > >>>>>>> Do you think we should change the behavior so that it sets up an > >>>>> initial default well-known credential of admin:password (which we log > >> and > >>>>> document), and have localhost login require the same authentication? > >>>>>>> (I'd be hesitant about that, given the server may be publicly > >>>>> reachable and is opening an easily guessable password on a > predictable > >>>>> port.) > >>>>>>> However, that would give consistency for all ways of launching > >>>>> Brooklyn. There are several use-cases to consider: > >>>>>>> * Vagrant (we already auto-populate brooklyn.properties with > >>>>>>> admin:password, I believe). > >>>>>>> * Install on a server > >>>>>>> o using RPM/DEB > >>>>>>> o manually running karaf (with `./bin/start`) > >>>>>>> o manually running `./bin/brooklyn launch` > >>>>>>> * Install on localhost (using any of the three ways listed above) > >>>>>>> > >>>>>>> --- > >>>>>>> I was hoping to separate the work into two parts: making localhost > >> and > >>>>> server behaviour consistent; and proper user/credential management. > >>>>>>> Longer term, options include: > >>>>>>> > >>>>>>> * Installing the rpm/deb doesn't start the service (giving the > user a > >>>>>>> chance to configure security first) > >>>>>>> * Force the user to change the initial password on first login, > etc. > >>>>>>> > >>>>>>> Aled > >>>>>>> > >>>>>>> > >>>>>>> On 08/09/2016 16:09, Alex Heneveld wrote: > >>>>>>>> Aled- > >>>>>>>> > >>>>>>>> I'm strongly against this. Nearly all OSS software puts a > priority > >>>>> of making it easy to get started, at the expense of pre-configured > >> password > >>>>> (karaf's admin:admin) or no auth (most nosql datastores). The good > OSS > >>>>> software then describes clearly what's needed to make it secure. I > >> think > >>>>> we do a pretty good job of both. > >>>>>>>> I'd welcome any install process tweak which encourages setting a > >>>>> password in an easy way (and this would help vagrant) But I think > it's > >>>>> unacceptable for the default to be a password buried in a log file > ... > >> or > >>>>> anything which makes it significantly harder to get started. > >>>>>>>> (And do people really evaluate software on a shared server, in > this > >>>>> day and age???) > >>>>>>>> Best > >>>>>>>> Alex > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On 08/09/2016 15:42, Aled Sage wrote: > >>>>>>>>> I'd expect a lot of folk evaluating Brooklyn for real use-cases > to > >>>>> install Brooklyn on a server, rather than their laptop owned by their > >>>>> employer. Or for them to use Vagrant. > >>>>>>>>> For Vagrant, we can auto-populate it with an initial > >>>>> username:password in the brooklyn.properties file. > >>>>>>>>> And for Brooklyn on a server, I think we should taking security > >>>>> seriously so not allow unauthenticated access from any user who does > a > >> curl > >>>>> command from that server! > >>>>>>>>> Aled > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On 08/09/2016 15:35, Aled Sage wrote: > >>>>>>>>>> Hi Mike, > >>>>>>>>>> > >>>>>>>>>> That touches on a bigger piece of work: to look at the runtime > >>>>> management of user logins (e.g. if using HA, how are the user > >> credentials > >>>>> shared with the other HA servers; where do we write to for changes in > >>>>> credentials; etc). > >>>>>>>>>> We don't support changing user passwords on-the-fly (one has to > >>>>> modify the brooklyn.properties file, and then trigger a reload via > the > >> rest > >>>>> api or ui). > >>>>>>>>>> Currently, for production use-cases we'd recommend use of > >> something > >>>>> like LDAP for that. We don't want to re-implement a lot of what LDAP > >> does, > >>>>> but we do want a reasonable out-of-the-box experience. > >>>>>>>>>> Aled > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On 08/09/2016 15:15, Mike Zaccardo wrote: > >>>>>>>>>>> +0. My hesitation is the con of more difficult first user > >>>>> experience. > >>>>>>>>>>> Could a compromise be that localhost login works > unauthenticated > >>>>> the first > >>>>>>>>>>> time but immediately prompts the user to set a username and > >>>>> password? > >>>>>>>>>>> On Thu, Sep 8, 2016 at 10:12 AM Aled Sage <aled.s...@gmail.com > > > >>>>> wrote: > >>>>>>>>>>>> Hi all, > >>>>>>>>>>>> > >>>>>>>>>>>> I'd like to remove from Brooklyn the feature where you can > login > >>>>>>>>>>>> authenticated from localhost. > >>>>>>>>>>>> _* > >>>>>>>>>>>> Current Situation*_ > >>>>>>>>>>>> When you first start Brooklyn on a new machine (so no > >>>>>>>>>>>> brooklyn.properties etc), it will auto-generate an initial > >>>>> username + > >>>>>>>>>>>> password and log that. For example: > >>>>>>>>>>>> > >>>>>>>>>>>> 2016-09-08 15:03:48,631 INFO No security provider options > >>>>>>>>>>>> specified. Define a security provider or users to prevent > a > >>>>> random > >>>>>>>>>>>> password being created and logged. > >>>>>>>>>>>> 2016-09-08 15:03:48,632 INFO Starting Brooklyn > web-console > >>>>> with > >>>>>>>>>>>> passwordless access on localhost and protected access from > >>>>> any other > >>>>>>>>>>>> interfaces (no bind address specified) > >>>>>>>>>>>> 2016-09-08 15:03:48,633 INFO Allowing access to web > console > >>>>> from > >>>>>>>>>>>> localhost or with brooklyn:sgZZL9qqBd > >>>>>>>>>>>> 2016-09-08 15:03:50,572 INFO Started Brooklyn console at > >>>>>>>>>>>> http://127.0.0.1:8083/, running classpath://brooklyn.war@ > >>>>>>>>>>>> > >>>>>>>>>>>> If you connect from localhost, you can login without any > >>>>> credentials. > >>>>>>>>>>>> If you connect from an external IP, you will need to use those > >>>>> credentials. > >>>>>>>>>>>> _*Pros and Cons*_ > >>>>>>>>>>>> This is convenient for first-time users (they don't need to > >> worry > >>>>> about > >>>>>>>>>>>> setting up a username/password if running Brooklyn on their > >> local > >>>>>>>>>>>> machine). We have to explain a little less before they can try > >>>>> out AMP. > >>>>>>>>>>>> But it will also feel like a security hole. > >>>>>>>>>>>> > >>>>>>>>>>>> It will makes the experience of installing Brooklyn on a > server > >>>>> very > >>>>>>>>>>>> different from the localhost experience. This is particularly > >>>>> true as we > >>>>>>>>>>>> encourage the use of RPM/DEB for installing Brooklyn. > >>>>>>>>>>>> > >>>>>>>>>>>> _*Proposal*_ > >>>>>>>>>>>> I propose removing this, so localhost logins also require > >>>>> credentials. > >>>>>>>>>>>> We'd also ensure the docs point at the username:password for > >>>>> accessing > >>>>>>>>>>>> the web-console. It is a problem that we don't already call > this > >>>>> out > >>>>>>>>>>>> (e.g. at > >>>>>>>>>>>> > >>>>>>>>>>>> > >> > http://brooklyn.apache.org/v/latest/start/running.html#control-apache-brooklyn > >>>>>>>>>>>> and http://brooklyn.apache.org/v/latest/ops/gui/running.html) > >>>>> because > >>>>>>>>>>>> users installing on a server will not know what to do. > >>>>>>>>>>>> > >>>>>>>>>>>> Aled > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>> > >>>>> > >> > >