+1 for "New Proposal"

Svet.


> On 13.09.2016 г., at 17:56, John McCabe <j...@johnmccabe.net> wrote:
> 
> +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
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>> 
>> 
>> 

Reply via email to