Hits : 5000

cfengine


Contents





http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software


Υποψήφια προς μελέτη:

cfegine


Ακούει στην TCP Port: 5308

Κάθε host (client server) κάνει pull τις αλλαγές (εάν υπάρχουν) στα πρώτα 5 λεπτά της κάθε ώρας (by default) εάν τρέχει ως δαίμονας
ή όποτε του πούμε εμείς (standalone by cron).

Επίσης μπορούμε να στείλουμε και pull action από τον cfengine – server μας.
Χρησιμοποιεί Classes στην οποία περιγράφονται οι αλλαγές (το policy)

και είναι γραμμένο σε C

Μπορούμε να περάσουμε τον κατάλογο εργασίας (με τα configuration files) σε ένα versioning source management system (like subversion)
και να κρατάμε ξεχωριστά κάπου αλλού όλες τις αλλαγές.

Υποστηρίζει πολλαπλά configuration files με την χρήση του import

Supported Operation Systems

Δυνατότητες


Εντολές


Ορολογία


Δομή


action:
class::
[do stuff]


Δομή αρχείων:

Also used on policy client to copy files from policy server. In essence, specifies which configuration files to use and performs any preparation
needed for their use. (update.conf should not do anything on the policy server other than make it capable of running cfengine)
+ cfagent.conf: what cfagent should aim for
+ cfservd.conf: cfservd's configuration
+ cfrun.hosts: lists host to be updated via cfrun
o outputs/: logfiles
o pppkeys/: keys for clients, fileservers, and/or policy hosts

Ενέργειες


mountall mount filesystems in fstab
mountinfo scan mounted filesystems
checktimezone check timezone
netconfig check net interface config
resolve check resolver setup
unmount unmount any filesystems
packages install/upgrade/remove packages
shellcommands execute shell commands
editfiles edit files
addmounts add new filesystems to system
directories make any directories
links check and maintain links (single and child)
mailcheck check mailserver
required check required filesystems
tidy tidy files
disable disable files
files check file permissions
copy make a copy/image of a master file
processes signal / check processes
module:name execute a user-defined module

top

Εγκατάσταση


wget -c http://www.cfengine.org/downloads/cfengine-2.2.10.tar.gz
tar zxvf cfengine-2.2.10.tar.gz
cd cfengine-2.2.10
./configure LDFLAGS=-ldl
make
make install


top

Αρχεία


Formatter "highlight/html" not found

top

Pre-defined classes


cfagent -p -v


ένα τυπικό αποτέλεσμα:

Reference time set to Sun May 17 14:08:17 2009

GNU Configuration Engine - 
2.2.10
Free Software Foundation 1994-
Donated by Mark Burgess, Oslo University College, Norway

------------------------------------------------------------------------

Host name is: xubuntu
Operating System Type is linux
Operating System Release is 2.6.28-12-generic
Architecture = i686


Using internal soft-class linux for host linux

The time is now Sun May 17 14:08:17 2009


------------------------------------------------------------------------

Additional hard class defined as: 32_bit
Additional hard class defined as: linux_2_6_28_12_generic
Additional hard class defined as: linux_i686
Additional hard class defined as: linux_i686_2_6_28_12_generic
Additional hard class defined as: linux_i686_2_6_28_12_generic__43_Ubuntu_SMP_Fri_May_1_19_27_06_UTC_2009

GNU autoconf class from compile time: compiled_on_linux_gnu

Address given by nameserver: 127.0.1.1
Interface 1: lo
Interface 2: eth0
Trying to locate my IPv6 address
Found IPv6 address fe80::215:f2ff:febe:daed
Looking for environment from cfenvd...

Unable to detect environment from cfenvd

cfengine:xubuntu: No preconfiguration file

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
 * (Changing context state to: main) *
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Looking for an input file /home/ebal/.cfagent/inputs/cfagent.conf
(No file /home/ebal/.cfagent/inputs/cfagent.conf)
Finished with /home/ebal/.cfagent/inputs/cfagent.conf

Defined Classes = ( 10_10_10 32_bit Day17 GMT_Hr11 Hr14 Hr14_Q1 May Min05_10 Min08 Q1 Sunday Yr2009 any cfengine_2 cfengine_2_2 cfengine_2_2_10 compiled_on_linux_gnu debian debian_5 debian_5_0 fe80__215_f2ff_febe_daed i686 ipv4_10 ipv4_10_10 ipv4_10_10_10 ipv4_10_10_10_118 linux linux_2_6_28_12_generic linux_i686 linux_i686_2_6_28_12_generic linux_i686_2_6_28_12_generic__43_Ubuntu_SMP_Fri_May_1_19_27_06_UTC_2009 lsb_compliant net_iface_eth0 net_iface_lo ubuntu ubuntu_9 ubuntu_9_4 ubuntu_jaunty undefined_domain xubuntu )

Negated Classes = ( )

Installable classes = ( no_default_route )

Global expiry time for locks: 120 minutes

Global anti-spam elapse time: 1 minutes

Extensions which should not be directories = ( )
Suspicious filenames to be warned about = ( )


top

Working Directory


Έχει αποφασιστεί από τους δημιουργούς του cfengine να γίνεται χρήση ενός συγκεκριμένου καταλόγου σε όλες τις διανομές:

mkdir -pv /var/cfengine/bin /var/cfengine/inputs /var/cfengine/outputs

cp /usr/local/sbin/cfagent /var/cfengine/bin/
cp /usr/local/sbin/cfdoc /var/cfengine/bin/
cp /usr/local/sbin/cfenvd /var/cfengine/bin/
cp /usr/local/sbin/cfenvgraph /var/cfengine/bin/
cp /usr/local/sbin/cfetool /var/cfengine/bin/
cp /usr/local/sbin/cfetoolgraph /var/cfengine/bin/
cp /usr/local/sbin/cfexecd /var/cfengine/bin/
cp /usr/local/sbin/cfkey /var/cfengine/bin/
cp /usr/local/sbin/cfrun /var/cfengine/bin/
cp /usr/local/sbin/cfservd /var/cfengine/bin/
cp /usr/local/sbin/cfshow /var/cfengine/bin/


Κλειδιά


Για να εξασφαλιστεί η ακεραιότητα των προγραμμάτων και αρχείων το cfengine δουλεύει με κρυπτογράφηση.
Οπότε χρειάζεται σε κάθε host να τρέξουμε την εντολή:

cfkey


Θα παρατηρήσουμε ότι έχουν γίνει αλλαγές στον κατάλογο /var/cfengine

top

Αρχεία Ρυθμίσεων


ΠΡΟΣΟΧΗ: Τα αρχεία ρυθμίσεων του cfengine ΔΕΝ πρέπει να έχουν break line (αλλαγή γραμμής).
Μπορεί το parse των αρχείων να είναι σωστό – αλλά "σπάσει" κατά το run. Οπότε όλα σε μία γραμμή.

Το βασικό αρχείο ρυθμίσεων του cfengine για κάθε host είναι το cfagent.conf

Αλλά πως διασφαλίζεται η ακεραιτότητα του συγκεκριμένου αρχείου;
Πως επιτυγχάνουμε την απρόσκοπτη λειτουργία του cfengine ώστε ακόμα κι εάν γίνουν αλλαγές από τρίτους
το cfengine να διορθώσει όλες τις αλλαγές;

Πολύ απλά στην παραπάνω δομή καταλόγων δηλώνουμε με δύο αρχεία:

ποιος είναι ο cfengine server μας (από τον οποίο δεχόμαστε αλλαγές) άρα από αυτό θα διορθωθεί το cfagent.conf αρχείο στον κάθε host.

top

update.conf


Τυπικό παράδειγμα:

Formatter "highlight/html" not found

top

cfservd.conf


Τυπικό παράδειγμα:

Formatter "highlight/html" not found

top

Client


O client χρειάζεται μόνο το update.conf, τα υπόλοιπα θα τα κατεβάσει.
Αλλά λείπει το cfagent.conf αρχείο και ένα τυπικό παράδειγμα είναι το εξής:

control:
	actionsequence	= ( copy files )
	domain	= ( otenet.gr )
	access	= ( root )
	smtserver = ( mail.otenet.gr )
	sysadm	= ( root@otenet.gr )

files:
   /etc/passwd mode=644 owner=root action=fixall
   /etc/shadow mode=600 owner=root action=fixall
  /etc/sudoers mode=0440 owner=root group=root action=fixall

copy:
	${master_cfinput}/etc/sudoers
	dest=/etc/sudoers


top

Examples


Σε αυτή την ενότητα θα προσπαθήσω να καταγράψω μερικά απλά παραδείγματα από τα διάφορα actions του cfengine.
Τα παραπάνω παραδείγματα είναι για local χρήση.

files


Με το παρακάτω αρχείο διορθώνουμε τα δικαιώματα στο αρχείο /etc/sudoers

sudoers.conf

control:
        actionsequence = ( files ) 
files:
        /etc/sudoers owner=root group=root mode=0440 action=fixall


Πως το τρέχουμε:

cfagent -f sudoers.conf

copy


Με το εξής αρχείο πραγματοποιούμε αντιγραφή ενός αρχείου από το αποθετήριό μας
και εν συνεχεία αλλάζουμε τα δικαιώματα.

control:
	actionsequence	= ( copy files )
	working_dir	= ( /var/cfengine/inputs )
copy:
	$(working_dir)/etc/sudoers dest=/etc/sudoers type=checksum
files:
	/etc/sudoers owner=root group=root mode=0440 action=fixall


Πως το τρέχουμε:

cfagent -v -f sudoers.conf

top

Useful Links


http://www.debian-administration.org/tag/cfengine

top