On 2013-04-25 at 12:19 -0400, Will Dennis wrote:
> Intrigued... I'd like to hear a (reasoned) argument against using Salt,
> especially for those of us on the cusp of rolling out a new config mgmt.
> system...

Here's a slightly redacted version of an analysis I wrote on Jan 2nd for
a different audience.

----------------------------8< cut here >8------------------------------
http://www.saltstack.org/
Overview: http://docs.saltstack.org/en/latest/topics/index.html
License: Apache 2.0

Synopsis: system configuration management (a la Puppet) but using ZeroMQ
as a messaging substrate to be able to scale up well.  Written in
Python.  On top of the messaging, it adds remote execution and config
management.  Expectation is that configuration files will be kept in a
VCS such as Git (so it's theoretically designed to work with that
instead of fight it).

    salt '*' cmd.exec_code python 'import sys; print sys.version'
    salt -C 'G@os:Debian and webser* or E@db.*' test.ping

Unlike Puppet's custom languages, configuration is (by default) YAML,
with the existing Jinja2 templating system.  So, probably fewer bugs.
;)  Easy to use an arbitrary Python script as a source of configuration
data.

Supplies a file-server for the master nodes, distributing over ZeroMQ.
Has hierarchical masters, so that you can scale by having an overall
master which distributes to "Salt syndics" which then handle the clients
(don't know if this is pure hierarchy (ie breakable) or a set of
available servers).

Uses pubkey crypto from client machines (minions) with the master
collecting the pubkeys (not normally accepting "any key", good).
There's the ability to let minions run peer commands, also disabled by
default (good, since otherwise that's a fast compromise contagion
vector).

Unfortunately, the key management docs:
http://docs.saltstack.org/en/latest/topics/configuration.html#key-management
state that it's all AES keys, which is symmetric and if each minion
really is getting an AES key from the master, that had better be a
per-minion AES key.  :/

http://docs.saltstack.org/en/latest/ref/configuration/master.html
http://docs.saltstack.org/en/latest/ref/configuration/minion.html

https://github.com/saltstack/salt

A bit more reassuring is:
  https://github.com/saltstack/salt/blob/develop/salt/crypt.py
which claims to be all of the crypto-level code, and shows stuff like
`verify_master()`.  Note though that their message encryption/decryption
contains no replay protection.  Each message has a random IV, and is
sent as IV+AES_CBC(payload)+HMAC(the_preceding)

And yes, the AES key for this message, plus the HMAC key, are supplied
by the master, when the minion successfully authenticates.  And yes, it
looks as though each client gets the one AES key generated by the master
on start-up [salt/master.py AESFuncs._auth()], and cached on disk on the
minions, so it looks suspiciously as though a compromised machine can
impersonate the master on the common message-bus.

I'm hoping I'm wrong on that; it needs more time to investigate than I'm
willing to give it now.
----------------------------8< cut here >8------------------------------
_______________________________________________
Discuss mailing list
Discuss@lists.lopsa.org
https://lists.lopsa.org/cgi-bin/mailman/listinfo/discuss
This list provided by the League of Professional System Administrators
 http://lopsa.org/

Reply via email to