Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 26 Anzeige

OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

Herunterladen, um offline zu lesen

Allgemeines zu CFEngine (was tut es, was kann es, wie funktioniert es)
Allgemeiner Aufbau der Konfig und der Scriptsprache
Implementierung bei noris (Mandantenfähigkeit, Installation, Selbstheilung)

Allgemeines zu CFEngine (was tut es, was kann es, wie funktioniert es)
Allgemeiner Aufbau der Konfig und der Scriptsprache
Implementierung bei noris (Mandantenfähigkeit, Installation, Selbstheilung)

Anzeige
Anzeige

Weitere Verwandte Inhalte

Ähnlich wie OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund (20)

Aktuellste (20)

Anzeige

OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

  1. 1. 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
  2. 2. 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
  3. 3. 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
  4. 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. 5.     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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 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. 10. 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
  11. 11. 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
  12. 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. 13. 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
  14. 14. 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
  15. 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. 16. 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
  17. 17. 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
  18. 18. 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
  19. 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. 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. 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. 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. 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. 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. 25. 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
  26. 26. 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

×