Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
4296-Clarify-documentation-of-cookie-handling.p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 4296-Clarify-documentation-of-cookie-handling.patch of Package erlang
From e3bbd5d97857e9c83c61785276fb85267316a2ea Mon Sep 17 00:00:00 2001 From: Raimo Niskanen <raimo@erlang.org> Date: Wed, 11 Aug 2021 12:43:13 +0200 Subject: [PATCH 6/9] Clarify documentation of cookie handling --- system/doc/reference_manual/distributed.xml | 87 ++++++++++++++++----- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/system/doc/reference_manual/distributed.xml b/system/doc/reference_manual/distributed.xml index 832a87c2d4..0ef5d3edc3 100644 --- a/system/doc/reference_manual/distributed.xml +++ b/system/doc/reference_manual/distributed.xml @@ -140,40 +140,91 @@ dilbert@uab</pre> <section> <title>Security</title> + <note> + <p> + "Security" here does <em>not</em> mean + cryptographically secure, but rather + security against accidental misuse, + such as preventing a node from connecting + to a cluster with which it is not intended to communicate. + </p> + <p> + Furthermore, the communication between nodes + is per default in clear text. + If you need strong security, please see + <seeguide marker="ssl:ssl_distribution"> + Using TLS for Erlang Distribution + </seeguide> + in the SSL application's User's Guide. + </p> + <p> + Also, the default random cookie mentioned + in the following text is not very unpredictable. + A better one can be generated using primitives + in the <c>crypto</c> module, though this still does not make + the inital handshake cryptographically secure. + And inter-node communication is still in clear text. + </p> + </note> <p>Authentication determines which nodes are allowed to communicate with each other. In a network of different Erlang nodes, it is - built into the system at the lowest possible level. Each node has - its own <em>magic cookie</em>, which is an Erlang atom.</p> - <p>When a node tries to connect to another node, the magic cookies - are compared. If they do not match, the connected node rejects - the connection.</p> - <p>At start-up, a node has a random atom assigned as its magic - cookie and the cookie of other nodes is assumed to be + built into the system at the lowest possible level. + All nodes use a <em>magic cookie</em>, + which is an Erlang atom, when connecting another node.</p> + <p>During the connection setup, after node names have been exchanged, + the magic cookies the nodes present to each other are compared. + If they do not match, the connection is rejected. + The cookies themselves are never transferred, + instead they are compared using hashed challenges, + although not in a cryptographically secure manner.</p> + <p>At start-up, a node has a random atom assigned as its default + magic cookie and the cookie of other nodes is assumed to be <c>nocookie</c>. The first action of the Erlang network authentication server (<c>auth</c>) is then to read a file named <c>$HOME/.erlang.cookie</c>. If the file does not exist, it is created. The UNIX permissions mode of the file is set to octal - 400 (read-only by user) and its contents are a random string. An + 400 (read-only by user) and its content is a random string. An atom <c>Cookie</c> is created from the contents of the file and the cookie of the local node is set to this using - <c>erlang:set_cookie(node(), Cookie)</c>. This also makes - the local node assume that all other nodes have the same cookie - <c>Cookie</c>.</p> + <c>erlang:set_cookie(node(), Cookie)</c>. This is + the default cookie that the local node will use towards + all other nodes.</p> <p>Thus, groups of users with identical cookie files get Erlang - nodes that can communicate freely and without interference from - the magic cookie system. Users who want to run nodes on separate - file systems must make certain that their cookie files are - identical on the different file systems.</p> + nodes that can communicate freely since they have the same + magic cookie. Users who want to run nodes + where the cookie files are on different file systems + must make certain that their cookie files are identical.</p> <p>For a node <c>Node1</c> with magic cookie <c>Cookie</c> to be - able to connect to, or accept a connection from, another node - <c>Node2</c> with a different cookie <c>DiffCookie</c>, + able to connect to, and to accept a connection from, another node + <c>Node2</c> that uses a different cookie <c>DiffCookie</c>, the function <c>erlang:set_cookie(Node2, DiffCookie)</c> must first be called at <c>Node1</c>. Distributed systems with - multiple user IDs can be handled in this way.</p> + multiple home directories (differing cookie files) + can be handled in this way.</p> + <note> + <p>With this setup <c>Node1</c> and <c>Node2</c> agree + on which cookie to use: <c>Node1</c> uses its explicitly + configured <c>DiffCookie</c> for <c>Node2</c>, + and <c>Node2</c> uses its default cookie <c>DiffCookie</c>.</p> + <p>You can also use a <c>DiffCookie</c> that neither + <c>Node1</c> nor <c>Node2</c> has as its default cookie, + if you also call <c>erlang:set_cookie(Node1, DiffCookie)</c> + in <c>Node2</c> before establishing connection</p> + <p>Because node names are exchanged during connection setup + before cookies are selected, the setup works regardless + of which node that initiates the connection</p> + <p>Note that to configure <c>Node1</c> to use <c>Node2</c>'s + default cookie when communicating with <c>Node2</c>, + <em>and vice versa</em> results in a broken configuration + (if the cookies are different) because then both nodes + use the other node's (differing) cookie.</p> + </note> <p>The default when a connection is established between two nodes, is to immediately connect all other visible nodes as well. This way, there is always a fully connected network. If there are nodes with different cookies, this method can be inappropriate + (since it may not be feasible to configure + different cookies for all possible nodes) and the command-line flag <c>-connect_all false</c> must be set, see the <seecom marker="erts:erl">erl(1)</seecom> manual page in ERTS.</p> -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor