Just to be clear: the wizard exists in master/2.0, all it needs is a “CORS 
button” :)

Any takers? https://github.com/apache/couchdb-fauxton 
<https://github.com/apache/couchdb-fauxton>

Best
Jan
--

> On 19 Apr 2016, at 16:53, Nolan Lawson <no...@nolanlawson.com> wrote:
> 
> Thanks Jan, a setup wizard sounds awesome. Believe me, no one would be
> happier than me to deprecate add-cors-to-couchdb! :)
> 
> - Nolan
> 
> On Tue, Apr 19, 2016 at 3:09 AM, Jan Lehnardt <j...@apache.org> wrote:
> 
>> From this thread alone, it should be obvious that this is a contentious
>> topic.
>> 
>> CouchDB 2.0 will have a happy-path setup that requires a setup. You can get
>> out of it, if you run a single-node instance, but for a cluster, you have
>> to
>> have an admin user. Discussions about this are about two years old and now
>> is not the time to revisit them.
>> 
>> This is a good default security that CouchDB has been dinged for over the
>> years
>> and the devs generally agree that having a server admin at least is a good
>> idea.
>> Note that this means regular doc r/w is still open to anyone, just db and
>> ddoc
>> creation is limited to admins.
>> 
>> Then we have to balance this with user-friendliness of course, and I think
>> things like the setup wizard (thanks Robert!) in Fauxton here can help.
>> This
>> is what normal users* and especially beginners will go through to set up
>> one
>> or more 2.0 nodes. As part of the setup procedure, Fauxton could offer a
>> button “enable CORS for dev purposes“, or something else that helps them
>> set
>> it up correctly that would replace
>> https://github.com/pouchdb/add-cors-to-couchdb
>> that effectively all PouchDB users will just use without learning the
>> consequences (FWIW, I’ve used this myself, configuring CORS is too hard in
>> CouchDB).
>> 
>> In addition: we have agreed last summer that we are not going to offer the
>> /_config endpoint in 2.0 because that’d require to build a CP system on top
>> of an AP one and we didn’t want to delay 2.0 because of that (imagine!) We
>> made per-node /_config available under /_node/<node-fqdn>/_config and I’d
>> be happy to have Fauxton use this to make CORS a simple setup. This
>> wouldn’t
>> work well for larger clusters, but that’s not the target audience here.
>> 
>> * expert users will use deploy scripts and other ways to deploy
>> pre-configured
>> instances, they will know what they are doing.
>> 
>> Best
>> Jan
>> --
>> 
>> 
>> 
>> 
>> 
>>> On 19 Apr 2016, at 08:39, Eli Stevens (Gmail) <wickedg...@gmail.com>
>> wrote:
>>> 
>>> Honestly, the entire topic feels over-thought to me. If someone sets
>>> up a database, has it listen to a port that's open to the internet,
>>> and doesn't set a password... The situation is pretty much hopeless.
>>> There's zero chance that *this* is the only security hole that they
>>> have, and IMO it's kinda silly to think that adding some CouchDB
>>> nanny-state will result in a now-airtight system. Obviously, sane
>>> defaults and documentation in the default config are great.
>>> 
>>> I've been running into this with some other tools that I use - I want
>>> to do a certain thing, but the tools prevent me, since the author of
>>> the tool apparently has a philosophical disagreement with the workflow
>>> I prefer (to the point of actively inserting somewhat arbitrary
>>> precondition checks before performing operations that would otherwise
>>> succeed).
>>> 
>>> Needless to say, when I need to do something, and the tool has gone
>>> out of it's way to block the thing that I'd like to do, it's quite
>>> frustrating. Please trust me to do my job, and to know my use cases.
>>> 
>>> FWIW, all of my CouchDB instances are in admin party, and were an
>>> attacker to penetrate deep into our systems enough to access CouchDB,
>>> we'd have been so hopelessly compromised that "oh, they can access the
>>> DB too" wouldn't meaningfully increase the severity of the event.
>>> Making me play an obfuscation shell game with a password or auth token
>>> so that the various programs I have can access the DB isn't going to
>>> actually make my systems more secure.
>>> 
>>> Thanks,
>>> Eli
>>> 
>>> On Mon, Apr 18, 2016 at 6:32 PM, Michael Fair <mich...@daclubhouse.net>
>> wrote:
>>>> SMTP open relays; wikis; and comment/bulletin board systems have taught
>> us
>>>> that if there's any hope of monetizing something an ip scanner can
>> attack,
>>>> they will.
>>>> 
>>>> This includes a default admin password.  The problem isn't really admin
>>>> party mode; it's a trivially automated type of default attack profile.
>>>> 
>>>> I agree with Nolan that people (myself included) succeed in getting
>>>> started/familiar with Couch largely because of a text editor, admin
>> party
>>>> mode, curl, and futon.  Following the breadcrumb tutorials and
>> immediately
>>>> creating/destroying databases; Editing data docs and design docs
>> quickly,
>>>> directly "on the server"; and practicing replication; without having to
>>>> first understand the security model/settings to grant oneself permission
>>>> (or write curl command lines embedding the passwords straight into
>>>> bash_history).
>>>> 
>>>> 1)
>>>> What about only allowing admin party from a machine with the same ip
>>>> addresses Couch is listening on.  So listen to 0.0.0.0 but make source
>> ip a
>>>> factor in the privileges assignment.
>>>> 
>>>> So in a sense, it's multifactor authorization defaulted to only allow
>>>> certain source ips admin party access (role="admin", connection="source
>>>> ip/port").
>>>> 
>>>> 2)
>>>> Make modes enumerable: "Admin Party", "Production", "Development",
>> "Client"
>>>> (for clients connecting to server hosts and the default when not
>> supplied),
>>>> "<User Defined/Added>" (like "Internal Production" which would mean the
>>>> "Client" request mode isn't allowed)
>>>> And then by default prevent servers in different modes from
>>>> replicating/querying each other (add "req_mode" field (the mode of the
>>>> thing requesting); and "rep_mode" field (the mode the database replying
>>>> should be in) to the request parameters).
>>>> 
>>>> Make database operational settings for which request modes are enabled
>> for
>>>> which reply modes.
>>>> By default:
>>>> "Admin Party" only allows requests from "Admin Party" and "Client"
>>>> "Production" allows "Production" and "Client"
>>>> "Development" allows "Development" and "Client"
>>>> 
>>>> 3)
>>>> Reuse Erlang's magic cookie concept for any access sourced remotely.
>> If I
>>>> can, by default, access an admin party database remotely by adding a
>> "magic
>>>> cookie" (that the server generated) to the URL header in place of a
>> login;
>>>> and I can only get that cookie by querying the database from the same
>> local
>>>> machine the server is running, and the server/database must be in admin
>>>> party mode.  That's A) pretty easy to look up and get the copy/paste
>>>> instructions to do for a default; B) a clearly placed magic cookie can
>> be
>>>> retrieved (because it got added to the default server/database json
>>>> response) by any appropriately authorized user; and C) is not easy for
>> an
>>>> automated scanner to exploit unless it's already on the same host.
>>>> 
>>>> A different token would be generated for each server mode; or these
>> magic
>>>> cookies would be purely an "Admin Party" mode thing.
>>>> 
>>>> Thoughts?
>>>> 
>>>> Mike
>>>> 
>>>> A hosted service would need to have a way to communicate the magic
>> cookies
>>>> of new databases to their users, or require authentication; but
>>>> 
>>>> Embedding my server's "Admin Party" <magic cookie> on a client command
>> line
>>>> On Apr 18, 2016 8:01 AM, "Nolan Lawson" <no...@nolanlawson.com> wrote:
>>>> 
>>>>> I do think that there's a tension between the needs of first-timers and
>>>>> production users. First-timers are already stymied by the lack of CORS
>> by
>>>>> default, and if we remove the Admin party from the default
>> installation,
>>>>> it's going to be even more impenetrable for them.
>>>>> 
>>>>> This is why for PouchDB Server we not only made Admin Party the
>> default,
>>>>> but also completely-open CORS. If I were to go one step further, I
>> might
>>>>> even make it bind to 0.0.0.0. That has bitten me many many times
>> before on
>>>>> a fresh install.
>>>>> 
>>>>> Is this something that can be done with Docker? Or maybe by adding
>> presets
>>>>> to the config UI? (Think Babel presets - e.g. "playground mode" or
>>>>> "production-ready".)
>>>>> 
>>>>> Cheers,
>>>>> Nolan
>>>>> 
>>>>> 
>>>>> 
>>>>> On Sun, Apr 17, 2016 at 12:16 PM, Jan Lehnardt <j...@apache.org> wrote:
>>>>> 
>>>>>> 
>>>>>>> On 17 Apr 2016, at 16:43, Paul Hammant <p...@hammant.org> wrote:
>>>>>>> 
>>>>>>> I wasn't being snide, or insulting
>>>>>> 
>>>>>> I’m glad to hear that you didn’t mean to be snide.
>>>>>> 
>>>>>>> If I
>>>>>>> wanted to write "I find the security system poorly documented,
>>>>>>> can someone explain this to me" (your suggestion), I would have
>> written
>>>>>> it
>>>>>>> as "I find the documentation of the security could be expanded for
>>>>>> newbies, can
>>>>>>> someone explain this to me" and avoid a reference to "poorly".
>>>>>>> 
>>>>>>> I'm an Apache member - 'hammant' - and wouldn't do what you're
>> claiming
>>>>>> I'm
>>>>>>> doing.
>>>>>> 
>>>>>> I’m not claiming anything, I’m just telling you how this reads to me.
>>>>>> 
>>>>>> Best
>>>>>> Jan
>>>>>> --
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> - Paul
>>>>>>> 
>>>>>>> On Sun, Apr 17, 2016 at 8:24 AM, Jan Lehnardt <j...@apache.org>
>> wrote:
>>>>>>> 
>>>>>>>> 
>>>>>>>>> On 17 Apr 2016, at 05:09, Paul Hammant <p...@hammant.org> wrote:
>>>>>>>>> 
>>>>>>>>> (Cultural ref: https://en.wikipedia.org/wiki/Considered_harmful)
>>>>>>>>> 
>>>>>>>>> So AdminParty is fun for there 2 minute "hey this stuff is great"
>>>>> tour
>>>>>> of
>>>>>>>>> CouchDB, but it leaves me (and others) worried that we don't know
>> the
>>>>>> 52
>>>>>>>>> specialist knowledge things to do to lock down a couch install
>>>>>>>> completely.
>>>>>>>>> You know: 443-only, a top-level administrator, sub administrators,
>>>>>>>> regular
>>>>>>>>> accounts, different read vs write permissions, etc etc. We can't
>>>>>> imagine
>>>>>>>>> going live with a CouchDB solution without that, and it makes us
>>>>> think
>>>>>> we
>>>>>>>>> should look for other technologies when there is no cohesive 100%
>>>>>>>> dev-team
>>>>>>>>> endorsed page on how to close down the party once and for all.
>>>>> Sooooo -
>>>>>>>> *if
>>>>>>>>> that page exists, I can't find it*.
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> Is the comummunity even in agreement - is it changes to
>> default.ini,
>>>>>>>> local.ini
>>>>>>>>> (server side), or is it a series of curl statements over the wire
>>>>> (and
>>>>>>>> why)?
>>>>>>>> 
>>>>>>>> No need to be snide about this. A “Why are there two ways to
>> configure
>>>>>>>> CouchDB?” would have sufficed.
>>>>>>>> 
>>>>>>>> CouchDB has a config system. It is persisted in two .ini files. You
>>>>> can
>>>>>>>> change settings by editing local.ini and [re]starting CouchDB or
>>>>> without
>>>>>>>> restarting CouchDB using curl. The latter is rather beneficial in
>>>>>>>> production
>>>>>>>> systems that don’t want to incur downtimes.
>>>>>>>> 
>>>>>>>> Changes done at runtime are stored in local.ini. When you install a
>>>>>> newer
>>>>>>>> version of CouchDB new config variables can appear in default.ini.
>> If
>>>>>> the
>>>>>>>> install procedure finds an existing local.ini it will not replace
>> it,
>>>>> so
>>>>>>>> local changes (hence the name) survive software upgrades.
>>>>>>>> 
>>>>>>>> As Bob pointed out, there is a security consideration with ini vs.
>>>>> curl:
>>>>>>>> 
>>>>>>>> If you were to start a CouchDB instance and then add an
>> administrator
>>>>>> via
>>>>>>>> curl, there is an ever so slight chance that someone else gets there
>>>>>> before
>>>>>>>> you. The exact scenario is somewhat convoluted, so I won’t bore you
>>>>> with
>>>>>>>> it.
>>>>>>>> Suffice it to say, creating an admin in local.ini before the first
>>>>>> launch
>>>>>>>> of CouchDB completely avoids said issue.
>>>>>>>> 
>>>>>>>> * * *
>>>>>>>> 
>>>>>>>> If you don’t feel confident using CouchDB then I suggest you look
>> for
>>>>>>>> alternative technology, or ask someone nicely to explain this to
>> you,
>>>>>>>> but pressuring the dev team with an somewhat insulting email is not
>>>>>>>> appreciated here. Again, a “I find the security system poorly
>>>>>> documented,
>>>>>>>> can someone explain this to me?” would have been much more
>> productive.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Best
>>>>>>>> Jan
>>>>>>>> --
>>>>>>>> Apache CouchDB PMC Chair
>>>>>>>> http://couchdb.apache.org/conduct.html
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Professional Support for Apache CouchDB:
>>>>>> https://neighbourhood.ie/couchdb-support/
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Nolan Lawson
>>>>> nolanlawson.com
>>>>> github.com/nolanlawson
>>>>> 
>> 
>> --
>> Professional Support for Apache CouchDB:
>> https://neighbourhood.ie/couchdb-support/
>> 
>> 
> 
> 
> -- 
> Nolan Lawson
> nolanlawson.com
> github.com/nolanlawson

-- 
Professional Support for Apache CouchDB:
https://neighbourhood.ie/couchdb-support/

Reply via email to