xxxxxxx
Cfengine im
Praxiseinsatz
Freiraum schaffen für Innovation, Kreativität, Produktivität
Florian Freund
Teamleiter Managed Services
E-Mail: florian.freund@noris.net


 
 
Dienstag, 5. April 2011
Unternehmensportrait - noris network
noris network übernimmt für Kunden
einzelne IT-Services (Outtasking)
oder den Betrieb der kompletten IT (Outsourcing).
Das Unternehmen positioniert sich bundesweit als
IT-Outsourcing- und Outtasking-Spezialist
mit langjähriger Erfahrung im Managed-Hosting- und
WAN-Umfeld
im Portfolio befinden sich ergänzend ISP-Services,
VoIP, VPN-, Housing- und Security-Produkte sowie
ein komplettes Full-Service-Management.
Dienstag, 5. April 2011
noris network wurde 1993 gegründet, ist eigenfinanziert, Inhabergeführt
und hat deutschlandweit mehrere redundant ausgelegte Standorte.
Technologische Basis ist eine
leistungsfähige IT-Infrastruktur
mit noris-network-eigenen
Hochleistungs- und Hoch-
sicherheits Rechenzentren.
Unternehmensportrait - noris network
Dienstag, 5. April 2011
noris network – MPLS-Backbone
Zwei Backbone-Ringe:
 Nürnberg – München – Stuttgart –
Straßburg – FFM
 Nürnberg – Leipzig – Magdeburg –
Berlin – Hamburg – Bremen –
Hannover – Düsseldorf – Köln
– FFM
Anschlüsse an die wichtigen
Internet-Austauschknoten in:
 Frankfurt/Main (DE-CIX)
 München (INXS) und
 Nürnberg (N-IX)
 Wien (VIX)
> mehrfache 10 Gbit/s Ethernet
Netzwerk
> N (RZ) – F (DE-CIX): bis zu 400 Gbit/s
Dienstag, 5. April 2011




Z E R T I F I K A T
Die
DQS GmbH
Deutsche Gesellschaft zur Zertifizierung von Managementsystemen
bescheinigt hiermit, dass das Unternehmen
noris network AG
Deutschherrnstraße 15-19
90429 Nürnberg
Deutschland
für den Geltungsbereich
IT-Outsourcing, IT-Outtasking, Vertrieb, Konzeption,
Betrieb von Rechenzentren und Infrastrukturen
ein
Informationssicherheits-Managementsystem
eingeführt hat und anwendet.
Durch ein Audit, dokumentiert in einem Bericht, wurde der
Nachweis erbracht, dass dieses Managementsystem
die Forderungen der folgenden Norm erfüllt:
ISO / IEC 27001
Information technology – Security techniques
Information Security Management Systems
Requirements
Ausgabe Oktober 2005
Dieses Zertifikat ist gültig bis 2010-06-13
Zertifikat-Registrier-Nr. 358515 ISMS
Frankfurt am Main 2007-06-14
Ass. iur. M. Drechsel Dipl.-Ing. S. Heinloth
GESCHÄFTSFÜHRER
D-60433 Frankfurt am Main, August-Schanz-Straße 21
 noris network ist der 70.
Zertifikatsinhaber in Deutschland, der
sämtliche Prüfungskriterien nach
ISO/IEC 27001 vollständig erfüllt.
 Im Gegensatz zu vielen ISO-27001-
Zertifizierungen anderer Firmen umfasst
der Geltungsbereich bei noris network
das gesamte Unternehmen.
noris network – Sicherheit nach ISO 27001:
Dienstag, 5. April 2011
Warum Cfengine?
Zeitpunkt der Entscheidung für Cfengine: 2008
– Durchsetzen von Systemdefaults
– Wartung gleichartiger Systeme vereinfachen
– Versionsverwaltung
– Unterstützt alle Unix Varianten und Windows (mit cygwin)
– Ist bei den relevanten Linux-Distributionen dabei bzw. kann leicht nach
installiert werden (Debian, Ubuntu, SuSE, RedHat, ...)
– stabil mit langer Historie
– gut für große Installationen geeignet
6
Dienstag, 5. April 2011
about:Cfengine
Historie:
– Entwickelt 1993 von Mark Burges an der Uni Oslo
– Hauptgrund: schlechte Wartbarkeit und Skalierung von Shellskripten
– Ziele: deklarative Sprache, selbst-dokumentierend
– 2002: Cfengine 2: Erkennung von Anomalien, sichere Kommunikation
– 2003: Entwicklung Cfengine 3 startet. Entwicklung der „promise theory“
(http://research.iu.hio.no/promises.php)
– 2009: Erstes Release Cfengine 3
7
Dienstag, 5. April 2011
Versionen
Bei noris im Einsatz:
– 2008 stabile Version 2
– Version 3 erst in neueren Distributionen enthalten
– Cfengine 3 seit Anfang 2010 im Probebetrieb
– Migration der config files von v2 auf v3 zeitaufwändig
8
Version 2.x Version 3.x
Seit Debian 4.0 etch Seit Debian squeeze 6.0
Ubuntu 4.10 Warty Warthog Ubuntu 10.04 Lucid Lynx
Dienstag, 5. April 2011
default: pull
– cfexecd / cronjob
– Kommunikation nur nach extern
– Gut über verschiedene
Firewallzonen nutzbar
– Keine adhoc Änderungen
triggered:
– Kein echtes push
– Anfrage für einen Update Lauf
– geeignet um Änderungen an vielen
Systemen zeitnah umzusetzen
Betriebsmodi
9
Dienstag, 5. April 2011
Binaries
10
Version 2 Version 3
Worker zur Abarbeitung der
config files („inputs“)
cfagent cf-agent
Taskplaner und Wrapper für
cfagent
cfexecd cf-execd
Serverdaemon cfservd cf-serverd
Schlüsselgenerierung cfkey cf-key
Remoteaktivierung cfrun cf-runagent
Debugtool für Cfengine
Datenbanken
cfshow cf-report
Monitoring Tool cfenvd cf-monitord
Dienstag, 5. April 2011
config files
11
Version 2 Version 3
Netzwerkdaemon /var/cfengine/inputs/cfservd.conf „server“ bundle in
/var/cfengine/inputs/promises.cf
Update der Configfiles /var/cfengine/inputs/update.conf „agent“ bundle in
/var/cfengine/inputs/promises.cf
Configmanagement Jobs /var/cfengine/inputs/cfagent.conf „agent“ bundle(s) in
/var/cfengine/inputs/promises.cf
Dienstag, 5. April 2011
Cfengine Grunsätze
Grundsatz:
– lokal / unabhängig / sicher
– lokale Entscheidungsfreiheit
• Teil des Sicherheitsmodells
• „Cfengine will never support push communications“
12
Dienstag, 5. April 2011
Elemente v2
Abschnitte:
– vordefinierte Abschnitte
– definieren unterschiedliche
Operationen, z.B.:
• Dateien kopieren (copy)
• Prozesse starten (processes)
– Werden bis auf den control, import,
alerts und classes Abschnitt über
actionsequence aufgerufen
– actionsequence definiert
Reihenfolge der Ausführung
13
control:
actionsequence =
( Abschnitt1 Abschnitt2 Abschnitt3 )
...
Abschnitt1:
Klassen::
Anweisung1
Anweisung2
Abschnitt2:
...
Abschnitt3:
...
Dienstag, 5. April 2011
Elemente v2
Klassen:
– Logisches Element
– Können verknüpft werden
( . für UND, | für ODER, ! für NOT )
– Steuern ob Anweisungen
ausgeführt werden
– Softclasses werden im Abschnitt
classes: definiert
– Hardclasses sind vordefiniert, z.B.:
62_128_18 62_128_18_66 64_bit Day29 GMT_Hr13 Hr15
Hr15_Q4 March Min55_00 Min59 Q4 Tuesday Yr2011 any
cfengine_2 cfengine_2_2 cfengine_2_2_10
compiled_on_linux_gnu confman1_noris_net debian
ipv4_62 ipv4_62_128 ipv4_62_128_18 ipv4_62_128_18_66
linux linux_2_6_32_30_server linux_x86_64
lsb_compliant main net net_iface_eth0 net_iface_lo
noris_net syslog_low_normal ubuntu ubuntu_10
ubuntu_10_4 ubuntu_lucid x86_64
14
control:
actionsequence = ( editfiles )
...
classes:
file_foobar_exists =
( FileExists(/tmp/foobar) )
editfiles:
file_foobar_exists::
{ /tmp/foobar
AppendIfNoSuchLine "Hello World"
}
Dienstag, 5. April 2011
Elemente v2
15
control:
actionsequence = ( editfiles )
foobar = ( "/tmp/foobar" )
classes:
file_foobar_exists =
( FileExists($(foobar)) )
editfiles:
file_foobar_exists::
{ $(foobar)
AppendIfNoSuchLine "Hello World"
}
Variablen:
– Speichern Strings
– Aufruf via $(variable) bzw.
${variable}
– Werden im Abschnitt control:
definiert
Dienstag, 5. April 2011
Elemente v2
16
import:
# load definitions
cf.definitions
# start main process
cfagent.conf.run
Imports:
– Strukturierungsmittel
– Auslagern von Informationen in
einzelne Files
– Importierte Files werden
gemerged
– Achtung! Variablen und Klassen
stehen nur ab der jeweiligen
Hierarchieebene zur Verfügung
Dienstag, 5. April 2011
Elemente v3
Promises:
– Deklaration eines Zustandes den man erhalten möchte
– Strukturiert durch bundles und bodies
– promise bundle: Sammlung von promises
– promise body: Teil eines promise mit
Detailinformationen
– TYPE: Typ eines bundle/body
– promise type entspricht Abschnitt in v2
– class ist analog zu v2
– neu bei Variablen: Listen, Datentypen
17
bundle/body TYPE name
{
promise type:
classes::
"promiser" ->
{ "promisee1","promisee2", ... }
attribute_1 => value_1,
attribute_2 => value_2,
...
attribute_n => value_n;
}
Dienstag, 5. April 2011
Beispiel sshd_config
Ziele:
– Login mit Passwort nicht mehr möglich
– Nur noch mit Key Authentisierung
18
# Authentication:
PermitRootLogin without-password
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
Dienstag, 5. April 2011
Beispiel sshd_config v2
19
control:
actionsequence = ( editfiles.sshd processes.sshd )
addinstallable = ( file_sshd_config_changed )
sshd_config = ( "/etc/ssh/sshd_config" )
classes:
file_authorized_keys_exists = ( FileExists(/root/.ssh/authorized_keys) )
file_sshd_config_exists = ( FileExists($(sshd_config)) )
editfiles:
sshd.file_authorized_keys_exists.file_sshd_config_exists::
{ $(sshd_config)
SetCommentStart "#"
CommentLinesMatching ".*PasswordAuthentication.*yes"
CommentLinesMatching ".*ChallengeResponseAuthentication.*yes"
CommentLinesMatching ".*PermitRootLogin.*yes"
CommentLinesMatching ".*PermitRootLogin.*forced-commands-only"
AppendIfNoSuchLine "PasswordAuthentication no"
AppendIfNoSuchLine "ChallengeResponseAuthentication no"
AppendIfNoSuchLine "PermitRootLogin without-password"
DefineClasses "file_sshd_config_changed"
}
processes:
sshd.file_sshd_config_changed::
".*sshd.*"
action=signal
signal=hup
Dienstag, 5. April 2011
Beispiel sshd_config v3 - agent
20
bundle agent sshd {
classes:
any::
"file_authorized_keys_exists"
expression => fileexists("/root/.ssh/authorized_keys");
"file_sshd_config_exists"
expression => fileexists("/etc/ssh/sshd_config");
files:
file_sshd_config_exists.file_authorized_keys_exists::
"/etc/ssh/sshd_config"
comment => "Rufe das edit_files bundle sshd_config auf",
edit_line => sshd_config,
classes => if_repaired("sshd_config_repaired");
processes:
sshd_config_repaired::
"sshd"
comment => "sshd_config wurde geändert. Sende SIGHUP",
signals => { "hup" };
}
Dienstag, 5. April 2011
Beispiel sshd_config v3 - edit_line
21
bundle edit_line sshd_config {
replace_patterns:
"^(PasswordAuthentication.*yes)$"
replace_with => comment("#");
"^(ChallengeResponseAuthentication.*yes)$"
replace_with => comment("#");
"^(PermitRootLogin.*yes)$"
replace_with => comment("#");
"^(PermitRootLogin.*forced-commands-only)$"
replace_with => comment("#");
insert_lines:
"PasswordAuthentication no"
"ChallengeResponseAuthentication no"
"PermitRootLogin without-password"
}
Dienstag, 5. April 2011
Troubleshooting
– verbose / debug output aktivieren
• cfagent -v / cf-agent -v
• cfagent -d -v / cf-agent -d -v
– v2: Klassen bei der actionsequence setzen
• actionsequence = ( editfiles.debugklasse )
– v3: Kommentare verwenden
• comment => "Jetzt passiert dies und das"
– 1 Minute warten
22
Dienstag, 5. April 2011
noris config - Mandantenfähigkeit
– Viele verschiedene Kunden
– Kleinster gemeinsamer Nenner (generic)
• sshd Konfiguration
• Monitoring Defaults
• Selbstheilung
– Kundenspezifische Jobs
23
cfagent.conf
!"" cf.def.customers
!"" cf.def.os
!"" cfagent.conf.run.dynamic
#"" cfagent.conf.run.generic
#"" cf._startgeneric
#"" cf.sshd
Dienstag, 5. April 2011
noris config - Selbstheilung
– Fehler in der Config kann dazu führen, dass cfagent nicht
mehr sauber durchläuft
– Manuelle Reparatur: Auf allen betroffenen Hosts default
config verteilen
– Lösung:
• Stündlicher cronjob
• bash Script
• führt cfagent aus und prüft exitcode
• Im Fehlerfall:
– Backup der Configurationsdateien
– Deploy default config per HTTP Download
– In Cfengine 3 bereits eingebaut (failsafe.cf)
24
Dienstag, 5. April 2011
Weitere Informationen
– Cfengine Website
http://www.cfengine.org
• Cfengine 3 Referenz
http://www.cfengine.org/manuals/cf3-reference.html
• Cfengine 2 Referenz
http://www.cfengine.org/manuals/cf2-Reference.html
– Promise Theory
http://research.iu.hio.no/promises.php
– Wikipedia
http://en.wikipedia.org/wiki/Cfengine
25
Dienstag, 5. April 2011
Noch Fragen?
Florian Freund
Teamleiter Managed Services
Email: florian.freund@noris.net
noris network AG
Thomas-Mann-Straße 16-20
90471 Nürnberg
www.noris.de


 
 
Freiraum schaffen für Innovation, Kreativität, Produktivität
Dienstag, 5. April 2011

OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

  • 1.
    xxxxxxx Cfengine im Praxiseinsatz Freiraum schaffenfür Innovation, Kreativität, Produktivität Florian Freund Teamleiter Managed Services E-Mail: florian.freund@noris.net Dienstag, 5. April 2011
  • 2.
    Unternehmensportrait - norisnetwork noris network übernimmt für Kunden einzelne IT-Services (Outtasking) oder den Betrieb der kompletten IT (Outsourcing). Das Unternehmen positioniert sich bundesweit als IT-Outsourcing- und Outtasking-Spezialist mit langjähriger Erfahrung im Managed-Hosting- und WAN-Umfeld im Portfolio befinden sich ergänzend ISP-Services, VoIP, VPN-, Housing- und Security-Produkte sowie ein komplettes Full-Service-Management. Dienstag, 5. April 2011
  • 3.
    noris network wurde1993 gegründet, ist eigenfinanziert, Inhabergeführt und hat deutschlandweit mehrere redundant ausgelegte Standorte. Technologische Basis ist eine leistungsfähige IT-Infrastruktur mit noris-network-eigenen Hochleistungs- und Hoch- sicherheits Rechenzentren. Unternehmensportrait - noris network Dienstag, 5. April 2011
  • 4.
    noris network –MPLS-Backbone Zwei Backbone-Ringe:  Nürnberg – München – Stuttgart – Straßburg – FFM  Nürnberg – Leipzig – Magdeburg – Berlin – Hamburg – Bremen – Hannover – Düsseldorf – Köln – FFM Anschlüsse an die wichtigen Internet-Austauschknoten in:  Frankfurt/Main (DE-CIX)  München (INXS) und  Nürnberg (N-IX)  Wien (VIX) > mehrfache 10 Gbit/s Ethernet Netzwerk > N (RZ) – F (DE-CIX): bis zu 400 Gbit/s Dienstag, 5. April 2011
  • 5.
        Z E RT I F I K A T Die DQS GmbH Deutsche Gesellschaft zur Zertifizierung von Managementsystemen bescheinigt hiermit, dass das Unternehmen noris network AG Deutschherrnstraße 15-19 90429 Nürnberg Deutschland für den Geltungsbereich IT-Outsourcing, IT-Outtasking, Vertrieb, Konzeption, Betrieb von Rechenzentren und Infrastrukturen ein Informationssicherheits-Managementsystem eingeführt hat und anwendet. Durch ein Audit, dokumentiert in einem Bericht, wurde der Nachweis erbracht, dass dieses Managementsystem die Forderungen der folgenden Norm erfüllt: ISO / IEC 27001 Information technology – Security techniques Information Security Management Systems Requirements Ausgabe Oktober 2005 Dieses Zertifikat ist gültig bis 2010-06-13 Zertifikat-Registrier-Nr. 358515 ISMS Frankfurt am Main 2007-06-14 Ass. iur. M. Drechsel Dipl.-Ing. S. Heinloth GESCHÄFTSFÜHRER D-60433 Frankfurt am Main, August-Schanz-Straße 21  noris network ist der 70. Zertifikatsinhaber in Deutschland, der sämtliche Prüfungskriterien nach ISO/IEC 27001 vollständig erfüllt.  Im Gegensatz zu vielen ISO-27001- Zertifizierungen anderer Firmen umfasst der Geltungsbereich bei noris network das gesamte Unternehmen. noris network – Sicherheit nach ISO 27001: Dienstag, 5. April 2011
  • 6.
    Warum Cfengine? Zeitpunkt derEntscheidung für Cfengine: 2008 – Durchsetzen von Systemdefaults – Wartung gleichartiger Systeme vereinfachen – Versionsverwaltung – Unterstützt alle Unix Varianten und Windows (mit cygwin) – Ist bei den relevanten Linux-Distributionen dabei bzw. kann leicht nach installiert werden (Debian, Ubuntu, SuSE, RedHat, ...) – stabil mit langer Historie – gut für große Installationen geeignet 6 Dienstag, 5. April 2011
  • 7.
    about:Cfengine Historie: – Entwickelt 1993von Mark Burges an der Uni Oslo – Hauptgrund: schlechte Wartbarkeit und Skalierung von Shellskripten – Ziele: deklarative Sprache, selbst-dokumentierend – 2002: Cfengine 2: Erkennung von Anomalien, sichere Kommunikation – 2003: Entwicklung Cfengine 3 startet. Entwicklung der „promise theory“ (http://research.iu.hio.no/promises.php) – 2009: Erstes Release Cfengine 3 7 Dienstag, 5. April 2011
  • 8.
    Versionen Bei noris imEinsatz: – 2008 stabile Version 2 – Version 3 erst in neueren Distributionen enthalten – Cfengine 3 seit Anfang 2010 im Probebetrieb – Migration der config files von v2 auf v3 zeitaufwändig 8 Version 2.x Version 3.x Seit Debian 4.0 etch Seit Debian squeeze 6.0 Ubuntu 4.10 Warty Warthog Ubuntu 10.04 Lucid Lynx Dienstag, 5. April 2011
  • 9.
    default: pull – cfexecd/ cronjob – Kommunikation nur nach extern – Gut über verschiedene Firewallzonen nutzbar – Keine adhoc Änderungen triggered: – Kein echtes push – Anfrage für einen Update Lauf – geeignet um Änderungen an vielen Systemen zeitnah umzusetzen Betriebsmodi 9 Dienstag, 5. April 2011
  • 10.
    Binaries 10 Version 2 Version3 Worker zur Abarbeitung der config files („inputs“) cfagent cf-agent Taskplaner und Wrapper für cfagent cfexecd cf-execd Serverdaemon cfservd cf-serverd Schlüsselgenerierung cfkey cf-key Remoteaktivierung cfrun cf-runagent Debugtool für Cfengine Datenbanken cfshow cf-report Monitoring Tool cfenvd cf-monitord Dienstag, 5. April 2011
  • 11.
    config files 11 Version 2Version 3 Netzwerkdaemon /var/cfengine/inputs/cfservd.conf „server“ bundle in /var/cfengine/inputs/promises.cf Update der Configfiles /var/cfengine/inputs/update.conf „agent“ bundle in /var/cfengine/inputs/promises.cf Configmanagement Jobs /var/cfengine/inputs/cfagent.conf „agent“ bundle(s) in /var/cfengine/inputs/promises.cf Dienstag, 5. April 2011
  • 12.
    Cfengine Grunsätze Grundsatz: – lokal/ unabhängig / sicher – lokale Entscheidungsfreiheit • Teil des Sicherheitsmodells • „Cfengine will never support push communications“ 12 Dienstag, 5. April 2011
  • 13.
    Elemente v2 Abschnitte: – vordefinierteAbschnitte – definieren unterschiedliche Operationen, z.B.: • Dateien kopieren (copy) • Prozesse starten (processes) – Werden bis auf den control, import, alerts und classes Abschnitt über actionsequence aufgerufen – actionsequence definiert Reihenfolge der Ausführung 13 control: actionsequence = ( Abschnitt1 Abschnitt2 Abschnitt3 ) ... Abschnitt1: Klassen:: Anweisung1 Anweisung2 Abschnitt2: ... Abschnitt3: ... Dienstag, 5. April 2011
  • 14.
    Elemente v2 Klassen: – LogischesElement – Können verknüpft werden ( . für UND, | für ODER, ! für NOT ) – Steuern ob Anweisungen ausgeführt werden – Softclasses werden im Abschnitt classes: definiert – Hardclasses sind vordefiniert, z.B.: 62_128_18 62_128_18_66 64_bit Day29 GMT_Hr13 Hr15 Hr15_Q4 March Min55_00 Min59 Q4 Tuesday Yr2011 any cfengine_2 cfengine_2_2 cfengine_2_2_10 compiled_on_linux_gnu confman1_noris_net debian ipv4_62 ipv4_62_128 ipv4_62_128_18 ipv4_62_128_18_66 linux linux_2_6_32_30_server linux_x86_64 lsb_compliant main net net_iface_eth0 net_iface_lo noris_net syslog_low_normal ubuntu ubuntu_10 ubuntu_10_4 ubuntu_lucid x86_64 14 control: actionsequence = ( editfiles ) ... classes: file_foobar_exists = ( FileExists(/tmp/foobar) ) editfiles: file_foobar_exists:: { /tmp/foobar AppendIfNoSuchLine "Hello World" } Dienstag, 5. April 2011
  • 15.
    Elemente v2 15 control: actionsequence =( editfiles ) foobar = ( "/tmp/foobar" ) classes: file_foobar_exists = ( FileExists($(foobar)) ) editfiles: file_foobar_exists:: { $(foobar) AppendIfNoSuchLine "Hello World" } Variablen: – Speichern Strings – Aufruf via $(variable) bzw. ${variable} – Werden im Abschnitt control: definiert Dienstag, 5. April 2011
  • 16.
    Elemente v2 16 import: # loaddefinitions cf.definitions # start main process cfagent.conf.run Imports: – Strukturierungsmittel – Auslagern von Informationen in einzelne Files – Importierte Files werden gemerged – Achtung! Variablen und Klassen stehen nur ab der jeweiligen Hierarchieebene zur Verfügung Dienstag, 5. April 2011
  • 17.
    Elemente v3 Promises: – Deklarationeines Zustandes den man erhalten möchte – Strukturiert durch bundles und bodies – promise bundle: Sammlung von promises – promise body: Teil eines promise mit Detailinformationen – TYPE: Typ eines bundle/body – promise type entspricht Abschnitt in v2 – class ist analog zu v2 – neu bei Variablen: Listen, Datentypen 17 bundle/body TYPE name { promise type: classes:: "promiser" -> { "promisee1","promisee2", ... } attribute_1 => value_1, attribute_2 => value_2, ... attribute_n => value_n; } Dienstag, 5. April 2011
  • 18.
    Beispiel sshd_config Ziele: – Loginmit Passwort nicht mehr möglich – Nur noch mit Key Authentisierung 18 # Authentication: PermitRootLogin without-password # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords PasswordAuthentication no Dienstag, 5. April 2011
  • 19.
    Beispiel sshd_config v2 19 control: actionsequence= ( editfiles.sshd processes.sshd ) addinstallable = ( file_sshd_config_changed ) sshd_config = ( "/etc/ssh/sshd_config" ) classes: file_authorized_keys_exists = ( FileExists(/root/.ssh/authorized_keys) ) file_sshd_config_exists = ( FileExists($(sshd_config)) ) editfiles: sshd.file_authorized_keys_exists.file_sshd_config_exists:: { $(sshd_config) SetCommentStart "#" CommentLinesMatching ".*PasswordAuthentication.*yes" CommentLinesMatching ".*ChallengeResponseAuthentication.*yes" CommentLinesMatching ".*PermitRootLogin.*yes" CommentLinesMatching ".*PermitRootLogin.*forced-commands-only" AppendIfNoSuchLine "PasswordAuthentication no" AppendIfNoSuchLine "ChallengeResponseAuthentication no" AppendIfNoSuchLine "PermitRootLogin without-password" DefineClasses "file_sshd_config_changed" } processes: sshd.file_sshd_config_changed:: ".*sshd.*" action=signal signal=hup Dienstag, 5. April 2011
  • 20.
    Beispiel sshd_config v3- agent 20 bundle agent sshd { classes: any:: "file_authorized_keys_exists" expression => fileexists("/root/.ssh/authorized_keys"); "file_sshd_config_exists" expression => fileexists("/etc/ssh/sshd_config"); files: file_sshd_config_exists.file_authorized_keys_exists:: "/etc/ssh/sshd_config" comment => "Rufe das edit_files bundle sshd_config auf", edit_line => sshd_config, classes => if_repaired("sshd_config_repaired"); processes: sshd_config_repaired:: "sshd" comment => "sshd_config wurde geändert. Sende SIGHUP", signals => { "hup" }; } Dienstag, 5. April 2011
  • 21.
    Beispiel sshd_config v3- edit_line 21 bundle edit_line sshd_config { replace_patterns: "^(PasswordAuthentication.*yes)$" replace_with => comment("#"); "^(ChallengeResponseAuthentication.*yes)$" replace_with => comment("#"); "^(PermitRootLogin.*yes)$" replace_with => comment("#"); "^(PermitRootLogin.*forced-commands-only)$" replace_with => comment("#"); insert_lines: "PasswordAuthentication no" "ChallengeResponseAuthentication no" "PermitRootLogin without-password" } Dienstag, 5. April 2011
  • 22.
    Troubleshooting – verbose /debug output aktivieren • cfagent -v / cf-agent -v • cfagent -d -v / cf-agent -d -v – v2: Klassen bei der actionsequence setzen • actionsequence = ( editfiles.debugklasse ) – v3: Kommentare verwenden • comment => "Jetzt passiert dies und das" – 1 Minute warten 22 Dienstag, 5. April 2011
  • 23.
    noris config -Mandantenfähigkeit – Viele verschiedene Kunden – Kleinster gemeinsamer Nenner (generic) • sshd Konfiguration • Monitoring Defaults • Selbstheilung – Kundenspezifische Jobs 23 cfagent.conf !"" cf.def.customers !"" cf.def.os !"" cfagent.conf.run.dynamic #"" cfagent.conf.run.generic #"" cf._startgeneric #"" cf.sshd Dienstag, 5. April 2011
  • 24.
    noris config -Selbstheilung – Fehler in der Config kann dazu führen, dass cfagent nicht mehr sauber durchläuft – Manuelle Reparatur: Auf allen betroffenen Hosts default config verteilen – Lösung: • Stündlicher cronjob • bash Script • führt cfagent aus und prüft exitcode • Im Fehlerfall: – Backup der Configurationsdateien – Deploy default config per HTTP Download – In Cfengine 3 bereits eingebaut (failsafe.cf) 24 Dienstag, 5. April 2011
  • 25.
    Weitere Informationen – CfengineWebsite http://www.cfengine.org • Cfengine 3 Referenz http://www.cfengine.org/manuals/cf3-reference.html • Cfengine 2 Referenz http://www.cfengine.org/manuals/cf2-Reference.html – Promise Theory http://research.iu.hio.no/promises.php – Wikipedia http://en.wikipedia.org/wiki/Cfengine 25 Dienstag, 5. April 2011
  • 26.
    Noch Fragen? Florian Freund TeamleiterManaged Services Email: florian.freund@noris.net noris network AG Thomas-Mann-Straße 16-20 90471 Nürnberg www.noris.de Freiraum schaffen für Innovation, Kreativität, Produktivität Dienstag, 5. April 2011