A couple of days ago we informed you of the status of the CFEngine products and services with respect to Heartbleed. Today we would like to share with you some instructions and policies that you can use to check your systems for vulnerable versions of OpenSSL, and if needed upgrade it to its latest version. If you already have CFEngine deployed, adding this policy and deploying it to your systems takes only a few minutes, after which CFEngine will take care of performing the necessary checks and updates on your systems, whether you have a few or tens of thousands. If you are not using CFEngine yet, you can still use these policies to check it out, and run the fix by hand on your systems. These policies work for Ubuntu and RedHat-based systems (including CentOS). See below for some hints about how to customize it for other operating systems.
CFEngine is a proud sponsor of the Red Hat Summit next week in downtown San Francisco! If you are attending the event, be sure to visit us at Booth #116 to say hello and learn more about new features of CFEngine 3.6 as well as get special discounts for our upcoming user conference, Promise2014.
You can also join us for some drinks and snacks on Tuesday night at a Meetup we are hosting at Jillian’s next door to the conference. Be sure to visit our Meetup page for more information and to sign up.
As you may know, a serious vulnerability was recently announced in OpenSSL, commonly referred to as Heartbleed or more officially by its CVE ID CVE-2014-0160. This vulnerability affects the OpenSSL heartbeat mechanism and allows unauthorized access to private data including encryption keys, encrypted traffic and more.
At CFEngine we use OpenSSL both in our infrastructure and in our products. The security of our users and customers is one of our primary concerns, so we immediately began investigating the possible impact of this bug. Here are our findings:
We’re proud to release the first Beta package of CFEngine 3.6 to the Community for testing. The new version of CFEngine introduces a huge number of new features to the CFEngine language and a lot of improvements behind the scene. Some highlights from the ChangeLog file: - New promise type “users” for managing local user accounts. - TLS authentication and fully encrypted network protocol - New attributes in ‘bundle server access_rules’ - New variable type ‘data’ for handling of structured data - Tagging of classes and variables with meta data - Many new built-in variables - Many new functions You can download the beta packages for Debian and RedHat based Linux distributions from https://cfengine.com/inside/myspace. The documentation for CFEngine 3.6 lives at https://cfengine.com/docs/master/index.html and is work in progress. We’d like to invite everybody to help us improve CFEngine 3.6 by giving this first beta a trial run. However, this version of CFEngine is not yet ready for production environments, so do not upgrade your existing installation to these packages. Due to the network protocol and authentication changes, compatibility between 3.6 and previous CFEngine versions is limited at this point, and will be improved over the coming weeks as we get closer to the release. To report bugs, use our bug tracker at https://cfengine.com/dev. Contributions in form of pull requests can be made on GitHub at http://github.com/cfengine/core. A big shout-out to all the contributors in the community that have supported our work with feedback, bug reports, input to design discussions and code contributions!
Having joined CFEngine only a few months ago (and being new to the Open Source movement and culture), attending our Bay Area meetup allowed me to come face to face with our community and hear about CFEngine deployment from the people who use it as their main tool. And let me tell you, there are some serious CFEngine warriors out there! In this blog post I will feature two of them. By pure chance both of them are called Bruce, but don’t worry, it’s not a prerequisite to be called that to join our community!
Many users have been asking for ways to limit the amount of some function invocations in CFEngine, inparticular functions such as execresult and returnszero. First, let me try to explain why functions were called so many times to begin with, and how we have approached this for version 3.6.
Functions may be executed during checking with cf-promises, or during normal evaluation.
When cf-agent executes a policy, it first runs it through checking with cf-promises. Many policy checks are static in nature (types, keywords, etc.), but since CFEngine is a fairly dynamic language, certain problems may only arise at run-time. Therefore, cf-promises has traditionally attempted to find these problems by executing all functions. For 3.6, we have turned off function evaluation for cf-promises, but retained the old behavior optionally using the flag –eval-functions.
CFEngine 3.5.3 is now available for download. This is a maintenance release of CFEngine 3.5, and introduces a number of fixes and improvements to both Community and Enterprise editions.
Changes in the CFEngine Core: Improved security checks of symlink ownership. A symlink created by a user pointing to resources owned by a different user will no longer be followed.
Changed the way package versions are compared in package promises. (Redmine #3314) In previous versions the comparison was inconsistent. This has been fixed, but may also lead to behavior changes in certain cases. In CFEngine 3.5.3, the comparison works as follows: <package-being-considered> <package_select> <package_version> For instance: apache-2.2.31 “>=” “2.2.0” will result in the package being installed. Bug fixes:
sigurd.teigen@cfengine.com R&D, CFEngine CFEngine has previously had multiple ways of loading data from an external file into a policy. This has been useful for basing policy on tablular data. For example, importing a CSV file to create accounts. Once data has been imported, it may be used using the existing CFEngine scalar and list data types. In order to make this more flexible, we are introducing a new data type ‘data’ for version 3.6 of CFEngine. A data container variable is an arbitrarly nested data structure of CFEngine primitives. You may think of a data container as a JSON document, because initially we are only supporting importing from JSON. However, this may change in the future allowing for importing data from YAML, XML and other files. Let us examine the flexibility and ease of use of this data type by way of an example. bundle agent test { vars: “doc” data => parsejson(’{ “a”: [ 1, 2 ], “b”: true }’); reports: “Hello $(doc[a]) $(doc[b])”; } This will output the following. $ cf-agent/cf-agent test.cf 2013-11-25T15:18:32-0500 notice: /main: R: Hello 1 true 2013-11-25T15:18:32-0500 notice: /main: R: Hello 2 true In this example, we use the function parsejson to assign a new data container. A data container may either be iterated as a list or as a scalar, depending on how it’s indexed. Above, we see that we index into a list ‘a’ in ‘doc’. Meanwhile, ‘b’ in ‘doc’ refers to a scalar. A list may contain other container types (list or maps), but only sibling scalars will be iterated over. Indexing works as in JavaScript, for example $(doc[a][1]) would refer to the second element in the list ‘a’ in ‘doc’. Currently, there is no inline syntax for data containers, although this is being planned for. A function readjson is available to import file, while function mergedata may be used to join existing data container variables into a new variable. We hope that data containers will be a practical way of working with structured data in policy, replacing current uses of arrays. Data containers are also used with the new Mustache template feature also in version 3.6. Learn more about CFEngine by visiting our website Evaluate CFEngine for free (upto 25 licenses, unlimited usage)
Mahesh Kumar, VP Marketing CFEngine
mahesh.kumar@cfengine.com
This month (literally tomorrow) at Velocity 2013 London Khushil Dep of the MailOnline will address the conference and present how his firm leverages CFEngine for their infrastructure management needs. As Khushil puts it “At the MailOnline we use CFEngine as the core of our configuration management. A way in which we describe our intentions in clear, precise and workable logic patterns which the Machine can understand without ambiguity.”
Mahesh Kumar, VP Marketing CFEngine
mahesh.kumar@cfengine.com
The CFEngine team was at LISA 2013 in Washington, D.C. this past week. It was the perfect setting, the weather playing nice, and having some of the sharpest minds talking about their accomplishments in the large installation system administration space.
There were training sessions earlier on as the conference started on the 3’rd of November. Wednesday’s proceedings were kicked off by Jason Hoffman, Founder, Joyent. Jason regaled the packed audience with his talk about ‘Modern Infrastructure - The convergence of network, compute and data’. It was very well delivered and informational.