Ce document a été rédigé en LaTeX en utilisant l’excellent Vim sous Debian GNU/Linux. Il est disponible aux formats XHTML et PDF. Les sources LaTeX sont disponibles ici : LATEX
Copyright ©2009 Matthieu VOGELWEITH <matthieu@vogelweith.com>.
Vous avez le droit de copier, distribuer et/ou modifier ce document selon les termes de la GNU Free Documentation License, Version 1.3 ou ultérieure publiée par la Free Software Foundation ; avec aucune section inaltérable, aucun texte de première page de couverture, et aucun texte de dernière page de couverture. Une copie de la licence est disponible dans la page GNU Free Documentation License.
- Sur le serveur, cfservd (permet de gérer les connexions entrantes et de diffuser les différents fichiers.
- Sur le client, plusieurs possibilités :
# aptitude install cfengine2
- Dans /etc/cfengine/cfservd.conf
control:
# Domaine ID
domain = ( example.com )
# Allow root user
AllowUsers = ( root )
# Elapsed time before starting again an action
IfElapsed = ( 5 )
ExpireAfter = ( 15 )
# Max connections allowed to this cfservd
MaxConnections = ( 50 )
# Allow multiple connections from one client
MultipleConnections = ( true )
# Trust keys from local network
TrustKeysFrom = ( 192.168.101.0/24 )
admit:
/etc/cfengine 192.168.101.0/24
/usr/sbin/cfagent 192.168.101.0/24
- Dans /etc/cfengine/cfagent.conf
control:
actionsequence = ( processes editfiles )
domain = ( example.com )
access = ( root )
# Where cfexecd sends reports
smtpserver = ( 127.0.0.1 )
sysadm = ( root )
# Run twice an hour
schedule = ( Min00_05 Min30_35 )
# Variables
cf_server = ( cfengine.example.com )
cf_dir = ( /etc/cfengine )
processes:
# Make sure these processes are always running
"cfengine2" restart "/etc/init.d/cfengine2 restart"
editfiles:
linux::
# Make sure cfexecd runs at boot time and daily.
{
/etc/cron.d/cfengine
AutoCreate
Backup "false"
EmptyEntireFilePlease
InsertLine '# /etc/cron.d/cfengine: crontab entries for cfengine'
InsertLine ''
InsertLine '@reboot root [ -x /usr/sbin/cfexecd ] && /usr/sbin/cfexecd -F -1 || exit 1'
InsertLine '0 2 * * * root [ -x /usr/sbin/cfexecd ] && /usr/sbin/cfexecd -F -1 || exit 1'
}
Pour que les différents démons démarrent automatiquement au boot de la machine, il suffit de modifier les variables suivantes dans le fichier /etc/default/cfengine2 :
RUN_CFSERVD=1 RUN_CFEXECD=1 RUN_CFENVD=1
Il est en suite possible de démarrer tous les démons avec la commande suivante :
# /etc/init.d/cfengine2 restart
L’installation des clients se fait exactement comme sur le serveur, en installant le paquet cfengine. La seule différence se situera au niveau des démons démarrés au boot de la machine.
# aptitude install cfengine2
Le fichier /etc/cfengine/update.conf est utilisé par cfagent ou cfexecd pour se connecter au serveur cfservd et mettre à jour les différents fichiers de configuration. Ce fichier est le seul qu’il est indispensable de diffuser manuellement sur les différents clients cfengine.
control:
actionsequence = ( copy tidy ) # Keep this simple and constant
domain = ( example.com ) # Needed for remote copy
policyhost = ( cfengine.example.com )
master_cfinput = ( /etc/cfengine )
workdir = ( /etc/cfengine )
SplayTime = ( 0 )
copy:
$(master_cfinput) dest=$(workdir)
r=inf
mode=700
type=binary
include=cfagent.conf
include=update.conf
include=cf.*
purge=true
server=$(policyhost)
# Cfexecd stores output in this directory.
# Make sure we don't build up files and choke on our own words!
tidy:
$(workdir)/outputs pattern=* age=7
La configuration décrite ci-dessus permet donc de peupler le répertoire /etc/cfengine des clients à partir du répertoire /etc/cfengine du serveur. Notons que la copie est récursive (r=inf), que les fichiers non présents sur le serveurs sont supprimés (purge=true) et que seuls les fichiers suivants sont copiés :
# scp root@cfengine:/var/lib/cfengine2/ppkeys/localhost.pub /var/lib/cfengine2/ppkeys/root@xx.xx.xx.xx.pub
Pour que le démon cfexecd démarre automatiquement au boot de la machine, il suffit de modifier la variable suivante dans le fichier /etc/default/cfengine2 :
RUN_CFEXECD=1 RUN_CFENVD=1
Il est en suite possible de démarrer le démon avec la commande suivante :
# /etc/init.d/cfengine2 restart
Lors du premier démarrage, cfexecd va établir la connexion avec le serveur, envoyer sa clé publique et copier tous les fichiers de configuration (notamment cfagent.conf). Il sera sensuite exécuté périodiquement en suivant la politique définie par la variable schedule du fichier cfagent.conf. Dans la configuration décrite précedemment, l’agent sera éxecuté toute les 30 minutes.
Afin de conserver un installation facilement maintenable il est très important d’organisaer les différents fichiers de configuration de manière réfléchie. Un bon point de départ est sans doute d’utiliser un fichier de configuration distinxt pour chaque action. Tous ces fichiers doivent ensuite être "importés" dans le fichier principal cfagent.conf.
Ce chapitre présente 2 fichiers de configuration permettant de changer le mot de passe root et de maintenir le fichier sources.list sur les clients. Ces deux fichiers seront nommés respectivement cf.rootpasswd et cf.sources.list. Pour qu’ils soient analysés lors de la prochaine éxecution de l’agent, il suffit de les importer en ajouter les lignes suivantes à la fin du fichier /etc/cfengine/cfagent.conf :
import:
linux::
cf.rootpassword
cf.sources.lists
Ainsi, toutes les machines qui sont dans la classe linux exécuteront les actions définies dans ces deux fichiers.
- Dans /etc/cfengine/cf.rootpassword
- Dans /etc/cfengine/cf.sources.list
control:
actionsequence = ( editfiles )
editfiles:
debian_5::
# Sources.list
{
/etc/apt/sources.list
AutoCreate
Backup "false"
EmptyEntireFilePlease
# Insert debian repos
InsertLine '# Generated by Cfengine : Do not edit this file by hand'
InsertLine ''
InsertLine '# Debian 5.0 (Lenny)'
InsertLine 'deb http://ftp.fr.debian.org/debian/ lenny main non-free contrib'
InsertLine ''
InsertLine '# Security Updates'
InsertLine 'deb http://security.debian.org/ lenny/updates main contrib non-free'
InsertLine ''
InsertLine '# Debian Volatile'
InsertLine 'deb http://volatile.debian.org/debian-volatile lenny/volatile main'
}
# Proxy Setup
{
/etc/apt/apt.conf.d/99proxy
AutoCreate
Backup "false"
EmptyEntireFilePlease
InsertLine '# Generated by Cfengine : Do not edit this file by hand'
InsertLine ''
InsertLine '# APT-Cacher proxy'
InsertLine 'Acquire::http::Proxy "http://192.168.101.254:3142";'
}
debian_5.davical::
{
/etc/apt/sources.list
AutoCreate
InsertLine ''
AppendIfNoSuchLine '# Davical'
AppendIfNoSuchLine 'deb http://debian.mcmillan.net.nz/debian lenny awm'
}