Linux II - DHBW Stuttgart
Transcription
Linux II - DHBW Stuttgart
Linux II Ausgewählte Vertiefungen Flynn Marquardt 25.11.2014 / DHBW Stuttgart Dieses Dokument kann jederzeit unter http://www.ba-stuttgart.de/˜marquard/Linux-II/Vorlesung.pdf heruntergeladen werden. Bitte Teilnahme-Mail an [email protected] (Wahl-/Zusatzfach). Flynn Marquardt Linux II Vorlesung 1 / 209 Gliederung 1 Allgemeines 2 Webserver 3 Mailserver 4 Virtualisierung 5 VPN 6 Embedded 7 Tracing 8 Kernel Flynn Marquardt Linux II Vorlesung 2 / 209 Ziele Vertiefung der Grundlagen praktische Erfahrungen Einblick in der Art der Lösung von Problemstellungen bei Linux Flynn Marquardt Linux II Vorlesung 3 / 209 Allgemeines Überblick Themenüberblick Serverkonfiguration I I I I I I I I Webserver apache2 (gesetzt) Mailserver exim4 (gesetzt) Webserver lighttpd Virtualisierung Userspace VPN openvpn/tinc ssh embedded Linux Performance-Analyse Quellcodeinstallation Kernel konfigurieren, patchen, übersetzen Kein Manuskript vorab, da noch nicht alle Themen feststehen. Flynn Marquardt Linux II Vorlesung 4 / 209 Allgemeines Übungen Übungen 10 Termine, 50% Vorlesung, 50% Übungen: 3 – 4 große Themenblöcke (1 Vorlesung + 1 Übung) und 3 – 4 kleine Themenblöcke (Vorlesung und Übung am gleichen Tag) Übungen am eigenen Laptop Linuxdistributionen der Teilnehmer? Virtualisiertes Linux nicht für alle Übungen sinnvoll Laptops werden bei Bedarf separat vernetzt Teilnehmer mit anderem UNIX-Derivat? Flynn Marquardt Linux II Vorlesung 5 / 209 Webserver Apache2 Aufbau Apache ab Version 2.x ist eine komplette Neuimplementation des Apache 1.x: core: Kernfunktionen I I I Netzwerk http-Protokoll, Multi-Processing-Modul (mpm) module: zur Laufzeit ladbare Erweiterungen filter: SSL, Kompression, Includes, Externe Filter handler: bestimmt wie ein Dateityp zu behandeln ist, z. cgi-Skripte Flynn Marquardt Linux II Vorlesung 6 / 209 Webserver Apache2 MPM In der Unix Variante kennt Apache drei Betriebsmodi (Version 2.2.x): 1 prefork: (klassisch wie apache 1.x), einzelne Prozesse, stabil, bewährt 2 worker: neu mit Hilfe von Threads, weniger Speicher, höherer Durchsatz, nicht alle Erweiterungen sind threadfähig (php, Umstieg von Modul auf fastcgi-Modus) 3 event: basiert auf worker, nutzt spezielle Event-Mechanismen des Kernels um den Durchsatz insbesondere von keep-alive Verbindungen zu erhöhen (experimentell in 2.2, regulär mit Einschränkungen in 2.4) Normalerweise sollte die worker MPM benutzt werden. Flynn Marquardt Linux II Vorlesung 7 / 209 Webserver Apache2 Konfiguration Konfiguration über Direktiven in einer Textdatei: Direktiven treten in einem Kontext auf: I I I I Serverkonfiguration, also global innerhalb eines Virtual Hosts für ein Verzeichnis in einer .htaccess-Datei Direktiven haben einen Status, d.h. sie gehören zu einem bestimmten Teil des apache2: I I I I I core – Kernsystem, immer da MPM – von einer bestimmten MPM abhängig Base – zu einem Basis-Modul gehörend Extension – zu einer nicht Standard-Erweiterung gehörend, eventuell neu kompilieren erforderlich Experimental – neues Feature in der Testphase externe Module bringen eigene, neue Direktiven mit Flynn Marquardt Linux II Vorlesung 8 / 209 Webserver Apache2 Module Grundlagen Module erweitern die Fähigkeit in der Basis circa 75 Module es gibt eine apache2 eigenes API zur Programmierung eigener Module, garantiert weitgehende Platformunabhängigkeit auf Quellcode Ebene (APR - Apache Portable Runtime) der Ansatzpunkt für eigene Erweiterungen externe Module können in bereits laufende Systeme integriert werden ohne Neucompilation des laufenden Apache Flynn Marquardt Linux II Vorlesung 9 / 209 Webserver Apache2 Module Hooks Hooks sind vorgesehene Eintrittspunkte für Module, z.B.: access_checker zusätzliche Zugangskontrollen auth_check zusätzliche Authentifizierungs-Varianten error_log zusätzliche Log-Meldungen fixup Modifizierung der http-Header insert_filter zusätzliche Content-Filter translate_name URI umschreiben type_checker Content type prüfen/ändern Viele und gute Hooks sollen verhindern, dass der Kern gepatcht werden muss! Flynn Marquardt Linux II Vorlesung 10 / 209 Webserver Apache2 Ausgesuchte Module I mod_actions Verknüpfung von Aktionen mit Datentypen/-extensions oder Request-Typ, z.B. cgi-Skripte mod_alias Manipulation des Mappings von Dateisystem zu URL mod_auth_xxx verschiedene Module zur Authentifizierung abseits von auth_basic, z.B SQL-Datenbank, ldap, pam, imap usw. mod_cgi für die Ausführung von cgi-Skripten mod_info Überblick über die Serverkonfiguration mod_mime Verknüpfung von Dateityp und http-Headern mod_proxy Reverse Proxy mit Balancer Fähigkeit (http/ftp-Untermodule) mod_rewrite Umschreiben der URLs, mächtiges Modul mod_ssl Annahme von SSL-Requests Flynn Marquardt Linux II Vorlesung 11 / 209 Webserver Apache2 Ausgesuchte Module II mod_status Aktueller interner Status des apache2 für Performance Tuning mod_userdir Documentroots in Benutzer Verzeichnissen Diverse Module zur Manipulation der http-Header Diverse Module zum Caching mod_fastcgi externes Fast-CGI Modul für lange laufende, vorab gestartete CGI-Skripte mod_security: „Apache-Firewall“ I I I I externes Modul Filterung von URLs, Headern und Content greift ganz am Anfang in die URL-Verarbeitung ein pattern-basierter Schutz z.B. gegen SQL-Injection, Content-Grabber, Schwachstellen-Tester, usw. Flynn Marquardt Linux II Vorlesung 12 / 209 Webserver Apache2 Anwendungsbeispiele mod_rewrite einfache Verschiebung von URLs homogener URLs inhomogener (geclusterter) Dateibäume (z.B. Userverzeichnisse auf verschiedenen Servern) Location-aware Redirecting als Load-Balancing (z.B. CPAN) Zeitgesteuerte Lösungen URL-Umwandlung dynamisch generierter in statische Seiten für Suchmaschinenoptimierung Load-Balancing On-the-fly Content-Regeneration Siehe auch URL Rewriting Guide Flynn Marquardt Linux II Vorlesung 13 / 209 Webserver Apache2 Sicherheit Beschränkung der Zugriffsrechte ausschließlich auf den Content Vorsicht mit symbolischen Links und Aliassen CGI-Skripte nur aus ausgewählten Verzeichnissen, nicht global Sicherheitshinweise von Skriptsprachen wie php beachten regelmäßige Updates des Servers Siehe auch Hinweise auf Security Tips. Flynn Marquardt Linux II Vorlesung 14 / 209 Webserver Apache2 Performance keine DNS-Abfragen provozieren, wenn möglich IP-Adressen/Subnetzmasken verwenden symbolische Links können zusätzliche Sicherheitsabfragen nötig machen AllowOverride None wo immer möglich, da sonst in allen Unterverzeichnissen immer nach der Datei .htaccess gesucht wird. so wenig Module wie unbedingt nötig aktivieren, jedes aktive Modul bringt einen Overhead Optimale Einstellung der Parameter I I I MinSpareServers, MaxSpareServers und StartServers wenig includes auf der Webseite selbst (z.B. css oder Javascript) Siehe auch Hinweise auf Performance Tuning Flynn Marquardt Linux II Vorlesung 15 / 209 Webserver Apache2 Tools Logauswertung mit awstats: umfangreichestes OpenSource-Tool gut konfigurierbar, auch für virtual hosts Plugin-Schnittstelle für eigene Erweiterungen Log-Rotation ist unbedingt notwendig: umkonfigurieren auf 52 Wochen-Zyklus (statt 5-10) eventuell besseren Kompressor nehmen (bzip2 oder lzma) Benchmarks mit http_load sowohl lokal als auch remote. Flynn Marquardt Linux II Vorlesung 16 / 209 Webserver Übungen apache2 Apache Konfiguration unter Debian Die eigentlich monolithische Apache Konfiguration wird Distributions-spezifisch modularisiert: Verzeichnis /etc/apache2 apache2.conf ist die Konfigurationsdatei Verzeichnis mods-available stellt Schablonen für das Laden der Module bereit, Softlinks in mods-enabled zum Aktivieren Verzeichnis sites-available und tt sites-enabled für eigene virtual hosts. Verzeichnis conf.d für eigene Konfigurationsteile, Lokale Links: http://localhost/manual/ – Apache2 Manual Flynn Marquardt Linux II Vorlesung 17 / 209 Webserver Übungen apache2 Status/Konfigurationsinfo Aktivierung von mod_info Ausgabe der aktuelle Konfiguration und Voreinstellungen, auch mit Auswahl (?module-name, ?config, ?hooks, ?list, ?server) Aktivierung von mod_status Ausgabe der aktuellen Last/Anfragen Jeweils Modul laden und Handler aktivieren. Flynn Marquardt Linux II Vorlesung 18 / 209 Webserver Übungen apache2 Passwort-Abfrage mod_auth_basic Klassiker: ältester Algorithmus: I I I funktioniert immer kann nicht invalidiert werden unsicher (erfordert https-Verbindung) mod_auth_digest I I I sicherer funktioniert nur mit modernen Browsern manchmal Probleme mit älteren IE-Versionen mod_auth_pam Authentifizieren gegen Linux-Benutzer, externes Modul, muss kompiliert werden. Zumindest die ersten beiden Verfahren konfigurieren und testen. Flynn Marquardt Linux II Vorlesung 19 / 209 Webserver Übungen apache2 Reverse Proxy Mit den Direktiven ProxyPass und ProxyPassReverse soll die Apache2-Dokumentation auf dem eigenen Webserver eingebunden werden: http://localhost/manual http://docxx Eventuell können Teile des BA-Webangebotes eingebunden werden. Flynn Marquardt Linux II Vorlesung 20 / 209 Webserver Übungen apache2 URL-Rewriting mod_rewrite laden reguläre Ausdrücke in runden Klammern werden mir $1, $2 referenziert. Die gleiche Aufgabe wie bei mod_proxy, aber jetzt als rewrite mit eigenem Unterverzeichnis: http://localhost/manual http://hostxx/manual Die Direktive RewriteRule kennt Flags (Auswahl): I I I L: letzte Regel N: next: Ergebnis löst neues Rewrite aus; Achtung vor endless loops. P: Proxy-Regel Einfache Übung: Verzeichnisse vertauschen: /a/b Flynn Marquardt Linux II /b/a Vorlesung 21 / 209 Webserver Übungen apache2 php als FastCGI I php als FastCGI bietet Vorteile: läuft auch unter der worker-MPM mit Hilfe von suexec können verschiedene php-Instanzen unter verschiedenen Benutzer laufen Domain-spezifische php-Konfiguration möglich Lastverteilung zwischen Domains und auf andere Rechner möglich Vorgehen: Benutzer, Verzeichnis und php-Testdatei anlegen Wrapper Script im docroot anlegen: #!/bin/sh PHPRC="/var/www/test.de/conf/" export PHPRC PHP_FCGI_CHILDREN=3 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS exec /usr/lib/cgi-bin/php5 Flynn Marquardt Linux II Vorlesung 22 / 209 Webserver Übungen apache2 php als FastCGI II Wrapper Script im docroot abspeichern und gegen Veränderung sichern: chattr +i wrapper-script suexec und fastcgi Modul aktivieren Virtualhost anlegen; folgende Konfigurationsbstandteile sind wichtig: I I SuexecUserGroup für den oben angelegten Benutzer fastcgi-Unterstützung mit Handler aktivieren: <IfModule mod_fastcgi.c> AddHandler php-fastcgi .php Action php-fastcgi /cgi/phpwrapper AddType application/x-httpd-php .php <Location /cgi/phpwrapper> SetHandler fastcgi-script Options +ExecCGI </Location> </IfModule> Flynn Marquardt Linux II Vorlesung 23 / 209 Webserver Übungen apache2 php als FastCGI III Webserver Konfigurationsänderungen mitteilen Prozessliste durchsehen nach fastcgi-Prozessen testen Alternativer fastcgi-Scheduler: php-fpm Flynn Marquardt Linux II Vorlesung 24 / 209 Webserver Übungen apache2 Externes Modul installieren mod_security apache2 devel-Pakete Pakete installieren mod_security runterladen www.modsecurity.org Standard-Regeln ebenfalls runterladen Modul übersetzen Modul in apache2 einbinden per Konfugration Regelsatz aktivieren testen Flynn Marquardt Linux II Vorlesung 25 / 209 Webserver Übungen apache2 php-Beschleuniger xcache-Pakete für php installieren xcache-Admin-Seite konfigurieren (Admin Account einrichten) php-Testseite (z.B. phpinfo()) erstellen und testen Flynn Marquardt Linux II Vorlesung 26 / 209 Webserver Übungen apache2 Logauswertung awstats Paket awstats installieren für einzelne Virtual Hosts eine Logauswertung konfigurieren Flynn Marquardt Linux II Vorlesung 27 / 209 Mailserver exim4 SMTP-Protokoll Simple Mail Transport Protokoll reines Textprotokoll eines der ältesten Protokolle (RFC 821, 1982) wurde 1995 (RFC 1869) zu ESMTP erweitert: I I I I I Start mit EHLO statt HELO STARTTLS, secure SMTP AUTH, Authentifizierung 8BITMIME DSN (Delivery Status Notifications) kennt Errorcodes, z.B. I I I 250 OK 4xx: temporäre Fehler 5xx: endgültige Fehler Flynn Marquardt Linux II Vorlesung 28 / 209 Mailserver exim4 SMTP-Protokoll – Beispiel Client Server 220 mail.example.com SMTP Foo Mailserver HELO mail.example.org 250 Hello mail.example.org, nice to meet you MAIL FROM:<[email protected]> 250 Sender OK RCPT TO:<[email protected]> 250 Recipient OK DATA 354 End data with <CR><LF>.<CR><LF> From: <[email protected]> To: <[email protected]> Subject: Testmail Testmail . 250 Message accepted for delivery QUIT 221 See you later Flynn Marquardt Linux II Vorlesung 29 / 209 Mailserver exim4 Aspekte der Mailkonfiguration Quelle für gültige Mailadressen Sicherheit (Relay) Mailverarbeitung, -weiterleitung und -auslieferung Spam- und Virenscanner Art der Speicherung der Mail (mbox/maildir) Verfügbarkeit Flynn Marquardt Linux II Vorlesung 30 / 209 Mailserver exim4 Konfiguration – Grundlagen Beispiel: exim4 Ursprüngliche eine Konfigurationsdatei mit folgenden Abschnitten: General Options ACL – Access Control Lists Routers Transports Retry Rewrite Authenticators Bei Debian wird versucht, die Konfiguration zu modularisieren. Flynn Marquardt Linux II Vorlesung 31 / 209 Mailserver exim4 Konfiguration – General Options/ACL General Options primary_hostname Name des Mailservers local_domains Eigene Maildomains relay_xxx Optionen zur Kontrolle des Mailrelay av_scanner/spamd_address Optionen für Viren- und Spamscanner never_users Linux Benutzer, die niemals Mail empfangen host_lookup DNS-Reverse Lookup für bessere Logs Flynn Marquardt Linux II Vorlesung 32 / 209 Mailserver exim4 Konfiguration – ACL Konfiguration der zugelassenen und nicht zugelassenen Operationen: beginnt mit begin acl erste Anweisung acl_check_rcpt: für gültige Benutzer erlaubte Rechner und Domains für verschiedene Fälle Konfiguration, wann Authentifizierung notwendig ist Definition von Ablehnungszuständen (deny) und Warnmails Inhaltscheck ab acl_check_data: Flynn Marquardt Linux II Vorlesung 33 / 209 Mailserver exim4 Konfiguration – Routers Router definieren, wohin eine Mail gesendet wird. Es gibt folgende Basisrouter: dnslookup MX-Record im DNS nachsehen für remote SMTP system_aliases Nachsehen in der globalen Aliasliste (/etc/aliases) userforward Abarbeiten des Benutzer eigenen .forward Files procmail Weiterleitung der Mail an procmail für automatische Mail-Vorverarbeitung localuser endgültige Ablage der Mail im Dateisystem, entweder als mbox oder maildir Hier ist die Reihenfolge der einzelnen Router relevant! Es gibt nicht endgültige (redirect) und endgültige Router. Flynn Marquardt Linux II Vorlesung 34 / 209 Mailserver exim4 Konfiguration – Transports Transports definieren, wie eine Mail gesendet oder weiterverarbeitet wird. Sie gehören in der Regel zu einem passenden Router. remote_smtp versandt an entferne Mailserver local_delivery Ablage in der lokalen mbox oder maildir address_pipe Weitergabe per Pipe an Programme, die Mails filtern address_file Weitergabe als Datei an Programme, die Mails filtern address_reply Behandlung automatisch generierter Mails aus Filterdateien des Benutzers Flynn Marquardt Linux II Vorlesung 35 / 209 Mailserver exim4 Konfiguration – Retry/Rewrite Retry Definiert, wie oft versucht wird, eine Mail zuzustellen und wann die Zustellung als erfolglos gilt. Außerdem werden eventuelle Benachrichtungen des Absenders über Verzögerungen konfiguriert. Rewrite Hier können Teil der Header umgeschrieben werden, z.B.: unvollständige Adressen auffüllen (Domain ergänzen) fehlende Header ergänzen Unnötige/ungewollte Header herausfiltern Absender-Domainname vereinheitlichen Flynn Marquardt Linux II Vorlesung 36 / 209 Mailserver exim4 Konfiguration – Authenticators Es gibt verschiedene Verfahren zu Authentifizierung, die beim Mailversand und beim Mailempfang zur Anwendung kommen können: plain Username und Passwort base64 kodiert login klassischer Login cram_md5 challenge and response Verfahren, auch gegen Datenbank möglich Betriebssystem PAM, NIS, LDAP, ntlm IMAP-Server cyrus, courier, dovecot Häufigster Fall: entweder plain über TLS oder der jeweilige IMAP-Server Flynn Marquardt Linux II Vorlesung 37 / 209 Mailserver exim4 Filter Benutzer eigene Filter (auch ein System-weiter Filter ist möglich) werden in der Regel im Homeverzeichnis in der Datei .forward gesucht. Es gibt vier Möglichkeiten: 1 reines Forward an eine andere Adresse 2 Weiterleitung an externes Programm per Pipe, z.B. procmail 3 Exim spezifischer Filter mit eigener Syntax (statt procmail) 4 Filter in Sieve Syntax (RFC 3028) Flynn Marquardt Linux II Vorlesung 38 / 209 Mailserver exim4 Filter Beispiel Exim Filter # Exim filter if $h_Subject: begins "***SPAM***" then save $home/Maildir/.INBOX.Spam/ elif $h_Subject: begins "VoiceBox Message from" then save $home/Maildir/.Anrufbeantworter/ elif $h_List-Id: contains ".lists.suspend2.net" then save $home/Maildir/.Linux.Suspend2/ elif $h_To: contains "[email protected]" then save $home/Maildir/.Linux.Tinc/ elif $h_From: contains "[email protected]" then save $home/Maildir/.Sonstiges.ADSL/ elif $h_From: contains "@ebay." then save $home/Maildir/.Einkauf.Ebay/ endif Flynn Marquardt Linux II Vorlesung 39 / 209 Mailserver exim4 Filter Beispiel Sieve Filter # Sieve filter # Beispiel Skript de.wikipedia.org require ["fileinto", "reject"]; # Nachrichten größer 100K werden abgewiesen mit einer Fehlermeldung if size :over 100K { reject "Bitte senden Sie mir das nächste Mal eine kleinere Mail. Bei großen Anhängen, laden Sie bitte die Dateien auf einen Server und schicken Sie mir eine URL. Danke.";} # Eine Mailing Liste soll in einen Ordner verschoben werden elsif address :is ["From", "To"] "[email protected]" { fileinto "INBOX.mailinglist";} # Spam Regel: Nachricht enthält meine Adresse nicht im To, CC oder # Bcc header, oder Subject ist irgendwas mit "money" bzw. "Viagra". elsif anyof (not address :all :contains ["To", "Cc", "Bcc"] "[email protected]", header :matches "Subject" ["*money*","*Viagra*"]) fileinto "INBOX.spam"; # Alle anderen Mails behalten wir. Diese Regel wäre nicht nötig, # da durch das "implicit keep" bereits abgedeckt. else { keep;} Flynn Marquardt Linux II Vorlesung 40 / 209 Mailserver exim4 Relay Block Lists Dem Problem offener Mailrelays wurde früher mit sogennanten Relay Block Lists begegnet, heute meist als DNSBL realisiert. Eine einfache DNS-Abfrage führt zum Ergebnis. Wird heute auch zum Spamcheck benutzt. Beispiel: Abfrage für 80.97.179.22 bei sorbs.net host 22.179.97.80.dnsbl.sorbs.net 22.179.97.80.dnsbl.sorbs.net has address 127.0.0.10 Die Adresse 127.0.0.10 bedeutet Dynamic IP. Flynn Marquardt Linux II Vorlesung 41 / 209 Mailserver exim4 Einsatzarten von Viren und Spamscannern Es gibt zwei grundsätzliche Architekturen: 1 erst vollständig annehmen, dann bearbeiten, also filtern und scannen. Vorteile I I I Last kann verteilt werden skaliert besser bei viel Mail kontrollierbarer Load auf den Servern Nachteile I I I verbraucht mehr Ressourcen, insbesondere Festplatte Spamversand wird erleichtert Senden der Fehlermail oft unmöglich (wieder mehr Last) Flynn Marquardt Linux II Vorlesung 42 / 209 Mailserver exim4 Einsatzarten von Viren und Spamscannern II 1 Scannen beim Annehmen, die 250-Meldung (Message accepted for delivery) entsprechend verzögern. Vorteile I I I I insgesamt weniger Ressourcenverbrauch keine Fehlermail notwendig Spamversand wird durch hängende Verbindung erschwert immer korrekte Benachrichtung des Senders Nachteile I I eventuell sehr hoher Load auf dem Annahmeserver bei false negatives keine Korrektur möglich Flynn Marquardt Linux II Vorlesung 43 / 209 Mailserver exim4 Virenscanner clamav: I I I I weitverbreitester Virenscanner immer aktuelle Signaturen keine Heuristik, daher technisch veraltet der einzige ernstzunehmende OpenSource Virenscanner mit aktiver Gemeinde openantivirus kommerzielle Virenscanner: etliche verfügbar amavis: Oberfläche zum einbinden verschiedener (auch mehrerer) Virenscanner und Spamfilter Flynn Marquardt Linux II Vorlesung 44 / 209 Mailserver exim4 Spamscanner Spamfilter gibt es als Standalone Programm oder besser als Netzwerkdienst: spamassassin: I I I I I flexibel wenig false positivs langsam, da Skriptsprache mit Databasis im Netzwerk möglich sehr viele Plugins, sehr aktives Projekt dspam: schnell, Training notwendig (dovecot plugin!), nicht ganz perfekt in der Trefferrate crm114: allgemeineres Tool, schnell, Training notwendig, nicht ganz stabil in der Trefferrate Flynn Marquardt Linux II Vorlesung 45 / 209 Mailserver exim4 SpamAssassin Im Moment sehr verbreitete, sehr wirkungsvoll. Sehr viele Konfiguartionsmöglichkeiten/Addons: Markieren der Email entweder über Header und/oder Subject Schwellwert wird in der Regel im Mailer festgelegt in der Regel nicht-lernend konfigurieren Benutzung externer Datenbasen (razor, pyzor, dcc) Benutzung von DNS-Blocklists SPF und Domainkeys diverse externe Module Jedes zusätzliche Modul kostet Zeit und Performance, insbesondere Netzzugriffe. Spam-Scan-Zeiten von 10 Sekunden und mehr sind normal. Flynn Marquardt Linux II Vorlesung 46 / 209 Mailserver exim4 Spamabwehr I Zusätzliche Abwehrmassnahmen gegen SPAM: Greylisting: I I erster Zustellversuch der Mail mit Errorcode 451 temporär abgehnt, Versuch wir protokolliert (Empfänger und Sender-Host) nach einer Weile (z.B. 10 min) werden weitere Zustellversuche zugelassen Dieses Verhalten ist SMTP-Protokollkonform, aber viele Bots kommen damit nicht zurecht. Um eine Verzögerung aller Emails zu vermeiden, am besten nur bei dynamisch-vergebenen Sender-IPs anwenden. Sender Policy Framework (Reverse-MX): im DNS wird der sendende SMTP-Host in einem speziellen TXT-Record hinterlegt. Probleme u.a. mit Weiterleitung von Emails. Flynn Marquardt Linux II Vorlesung 47 / 209 Mailserver exim4 Spamabwehr II DKIM: I I Öffentliche(r) Schlüssel des sendenen Mailservers wird im DNS gespeichert Mail wird beim Senden digital signiert: F F I I I I Body ausgewählte Header (relaxed oder strict) der empfangende Mailserver kann die Identität und Inhalt des Senders nachprüfen inzwischen als RFC 4870 akzeptiert Grundsätzlich weniger Probleme als SPF Implementation und Akzeptanz dauert Flynn Marquardt Linux II Vorlesung 48 / 209 Mailserver exim4 Spamabwehr III HELO-Check: I I Einfacher Syntax auf FQDN, d.h. mindestens drei Elelemte durch Punkt getrennt Aufwendiger Check mit DNS/Reverse-DNS Fake MX-Einträge im DNS: I I I I mehrere MX-Einträge im DNS können unterschiedliche Priorität haben echter Mail-Server lauscht am MX-Record mit mittlerer/niedriger Priorität am MX-Record mit höchster/niedrigster Priorität ist Port 25 nicht belegt richtige Mailserver suchen immer den aktiven SMTP-Server Flynn Marquardt Linux II Vorlesung 49 / 209 Mailserver exim4 Nützliche Werkzeuge I exim4 selbst stellt einige mützliche Programme bzw. Funktionalitäten bereit: mailq zeigt momentan hängende, nicht ausgelieferte Mails an (sendmail Standard) runq erzwingt einen (zusätzlichen) Durchlauf der Mail Warteschlange nach den Retry-Regeln (sendmail Standard) exim4 -M message-ID erzwingt eine Zustellversuch der angegebenen Mails ohne Beachtung der Retry-Regeln eximon grafischer exim4 Mailmonitor isoqlog Web-basierte Logauswertung für verschiedene Mailer Flynn Marquardt Linux II Vorlesung 50 / 209 Mailserver exim4 Nützliche Werkzeuge II Daneben gibt u.a. es folgende Programme: mailx einfacher Client für den Mailversand von der Kommandozeile swaks SMTP transaction tester, Mail-Testprogramm, das z.B. auch SMTP-Auth kann fetchmail Mailclient (POP3) um Wiedereinspeisen in lokale Mailer, z.B. bei Email Sammelkonten procmail Mailfilter der in .forward Files verwendet werden kann mailman Mailinglistensoftware Flynn Marquardt Linux II Vorlesung 51 / 209 Mailserver exim4 Mailversand testen mit swaks Wichtige Optionen von swaks: -s Servername -t Empfänger (TO) -f Absender (FROM) –body Inhalt, „–“ bedeutet von stdin lesen Wichtige Testinhalte: purer Text sample-spam.txt – aus dem spamassassin Paket eicar.com – Testvirus Dateien liegen auf dem BA-Webserver. Flynn Marquardt Linux II Vorlesung 52 / 209 Mailserver exim4 Konfiguration unter Debian/Ubuntu Exim4 ist unter Debian gut vorkonfiguriert und besitzt viele optionale Features (siehe auch /usr/share/doc/exim4base/README.Debian.gz. Konfiguration in /etc/exim4 entweder: monolithisch in exim4.conf.template (default) auf-gesplittet im Verzeichnis conf.d (empfohlen) Einige globale Debian-spezifische Einstellungen werden in update-exim4.conf.conf Nach Änderungen an der Konfiguration immer das Programm update-exim4.conf aufrufen und exim4 neu laden (/etc/init.d/exim4 reload). Flynn Marquardt Linux II Vorlesung 53 / 209 Mailserver Übungen Exim4 mbox/maildir/prefix/alias Stellen Sie fest, wo standardmäßig die Mails für lokale Benutzer landen legen Sie ein Alias mailtest an, der auf sie selbst zeigt konfigurieren Sie einen zusätzlichen Router/Transport, der die lokaler Mail im maildir Format im Homeverzeichnis ablegt. Dieser Mechanismus soll über das Präfix imap- direkt angesprochen werden können. testen Sie die Funktionalität Dokumentation: Online auf exim4.org oder spec.txt Flynn Marquardt Linux II Vorlesung 54 / 209 Mailserver Übungen Exim4 Viren/Spamscanner installieren Sie clamav und spamassassin jeweils in ihrer Daemonvariante laden Sie für clamav die Signaturdatei herunter, falls nicht schon geschehen installieren Sie die sogenannte heavy-Variante von exim4 konfigurieren Sie exim4 für Virenscanning, die Mails sollen nicht angenommen werden konfigurieren Sie exim4 für Spamscanning, die Mails sollen mit zusätzlichen Headern versehen durchgelassen werden testen mit swaks (eicar.com und sample-spam.txt) Flynn Marquardt Linux II Vorlesung 55 / 209 Mailserver Übungen Exim4 smtp/auth Konfigurieren Sie exim4 so um, dass Mailversand nur noch durch Authentifizierung mit der PLAIN-Methode erlaubt ist. Testen Sie es mit Ihrem Mailclienten und mit swaks. Flynn Marquardt Linux II Vorlesung 56 / 209 Mailserver Übungen Exim4 Mailinglisten Installieren Sie mailman. Richten Sie eine Mailingliste ein inklusive der notwendigen Aliase. Testen Sie die Liste. Löschen Sie die Aliase wieder und konfigurieren Sie eine allgemein gültige Lösung, Hinweise dazu finden Sie in der Mailman-Doku. Flynn Marquardt Linux II Vorlesung 57 / 209 Mailserver Beispiele Exim4 Authentifizierung über imap-Server Problem Als Datenquelle für gültige Benutzer soll ein Imap-Server benutzt werden. dovecot_plain: driver = dovecot public_name = PLAIN server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 Flynn Marquardt Linux II Vorlesung 58 / 209 Mailserver Beispiele Exim4 Benutzer/Alias aus sqlite Datenbank Aufgabe Gültige Benutzer und deren Aliasse aus eine SQLite-Datenbank lesen. Router für User: sqlite_user: debug_print = "R: local_user for $local_part@$domain" driver = accept domains = +local_domains condition = ${lookup sqlite{/etc/dovecot/authdb.sqlite SELECT DISTINCT username || ’@’ || domain AS email FROM users WHERE username=’${quote_sqlite:$local_part}’ AND domain=’${quote_sqlite:$domain}’}{true}{false}} local_parts = ! root transport = LOCAL_DELIVERY cannot_route_message = Unknown user Flynn Marquardt Linux II Vorlesung 59 / 209 Mailserver Beispiele Exim4 Benutzer/Alias aus sqlite Datenbank Aufgabe Gültige Benutzer und deren Aliasse aus eine SQLite-Datenbank lesen. Router für Aliasse (Modifikation des system_aliases-Router): sqlite_aliases: debug_print = "R: sqlite_aliases for $local_part@$domain" driver = redirect domains = +local_domains allow_fail allow_defer data = ${lookup sqlite{/etc/dovecot/authdb.sqlite SELECT DISTINCT alias FROM aliases WHERE username=’${quote_sqlite:$local_part}’ AND domain=’${quote_sqlite:$domain}’}} Flynn Marquardt Linux II Vorlesung 60 / 209 Mailserver Beispiele Exim4 Greylisting mit sqlite-Datenbank Problem Einfaches Greylisting für dynamische Sender-IPs einrichten. Globale Definitionen: GRAYLIST_MESSAGE = $sender_host_address is not yet authorized to deliver \ mail from <$sender_address> to <$local_part@$domain>. \ Please try later. GRAYLIST_LOG_MESSAGE = greylistd: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) GRAYLIST_CHECK = /var/spool/exim4/greylist.db \ SELECT * FROM relaytofrom \ WHERE relay_ip=’${quote_pgsql:$sender_host_address}’ \ AND from_domain=’${quote_pgsql:$sender_address_domain}’ GRAYLIST_TEST = /var/spool/exim4/greylist.db \ SELECT CASE \ WHEN strftime(’%s’, ’now’, ’localtime’) - strftime(’%s’, block_expires) \ > 0 THEN 2 ELSE 1 \ END \ FROM relaytofrom \ WHERE relay_ip=’${quote_pgsql:$sender_host_address}’ \ AND from_domain=’${quote_pgsql:$sender_address_domain}’ GRAYLIST_ADD = /var/spool/exim4/greylist.db \ INSERT INTO relaytofrom (relay_ip, from_domain) \ VALUES ( ’${quote_pgsql:$sender_host_address}’, \ ’${quote_pgsql:$sender_address_domain}’) GRAYLIST_SQLITE = yes Flynn Marquardt Linux II Vorlesung 61 / 209 Mailserver Beispiele Exim4 Greylisting mit sqlite-Datenbank II ACL-Eintrag: .ifdef GRAYLIST_SQLITE defer message = GRAYLIST_MESSAGE log_message = GRAYLIST_LOG_MESSAGE dnslists = CHECK_RCPT_IP_DNSBLS !senders = : !hosts = : +relay_from_hosts !authenticated = * !acl = acl_local_deny_exceptions domains = +local_domains : +relay_to_domains verify = recipient/callout=20s,use_sender,defer_ok condition = ${if eq{${lookup sqlite{GRAYLIST_TEST}{$value}{0}}}\ {2}{false} {${lookup sqlite{GRAYLIST_CHECK}{true}{\ ${lookup sqlite{GRAYLIST_ADD}{true}{true}}}\ }}} .else Flynn Marquardt Linux II Vorlesung 62 / 209 Mailserver Beispiele Exim4 Spam aussortieren Aufgabe Mails mit hohem Spamscore ablehnen beim Empfang deny condition = ${if <{$message_size}{100K}} spam = Debian-exim:true/defer_ok message = This message was classified as SPAM. set acl_m0 = $spam_score_int set acl_m1 = $spam_report senders = !127.0.0.1 condition = ${if >{$spam_score_int}{80}{1}{0}} Flynn Marquardt Linux II Vorlesung 63 / 209 Mailserver Beispiele Exim4 Spam aussortieren II Aufgabe Übrige gebliebene Mails mit hohem Spamscore direkt in den Spam-Ordner legen. Router: maildir_spam: driver = accept check_local_user local_parts = !www:!root:!nobody:!postmaster:!abuse:!admin transport = maildir_spam_delivery condition = ${if >{$spam_score_int}{50}{1}{0}} Transport: maildir_spam_delivery: driver = appendfile maildir_format = true directory = MAILDIR_HOME_MAILDIR_LOCATION/.Spam/ Flynn Marquardt Linux II Vorlesung 64 / 209 Mailserver Beispiele Exim4 Hub-Host für ausgesuchte Domains Problem Die eigene Mailserver IP ist bei einigen Mailservern „verbrannt“. Lösung: Versand von Emails für diese Domains über einen anderen Server, den Hub-Host (bei Debian schon angelegt). hubbed_hosts: debug_print = "R: hubbed_hosts for $domain" driver = manualroute domains = "${if exists{CONFDIR/hubbed_hosts}\ {partial-lsearch;CONFDIR/hubbed_hosts}\ fail}" same_domain_copy_routing = yes route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}} transport = remote_smtp_smarthost Flynn Marquardt Linux II Vorlesung 65 / 209 Virtualisier. Einführung Was ist Virtualisierung? Nachbildung einer Computerumgebung (VM – Virtuelle Maschine) weitgehend native Ausführung von Prozessorbefehlen Trennung von Computerumgebungen Verwaltungsinstanz – VMM Virtual Machine Monitor Unterschied zur Emulation: native Ausführung der Prozessorbefehle. Problem: x86-basierte Prozessoren sind eigentlich nicht virtualisierbar. Flynn Marquardt Linux II Vorlesung 66 / 209 Virtualisier. Einführung Problem: x86-Prozessoren x86-basierte Prozessoren sind nicht virtualisierbar: kennen Ringe der Ausführung, vor allem Ring 0 und 3 17 Maschinenbefehle sind nicht virtualisierbar, da I I sie nicht per trap abgefangen werden können sie sich im Ring 0 und 3 unterschiedlich verhalten, die Software funktioniert nicht mehr wie vorher Auswege: Code wird vorher geparst, problematische Instruktionen ausgefiltert und gesondert behandelt. Neuere Prozessoren mit Intel-Vanderpool oder AMD Pacifica Erweiterung implementieren de facto den fehlenden Ring −1, Prozessor wird dadurch voll virtualisierbar. Flynn Marquardt Linux II Vorlesung 67 / 209 Virtualisier. Einführung Einsatzgebiete Wozu kann Virtualisierung eingesetzt werden: VMs sind portabel in Bezug auf die verwendete Hardware und das Betriebssystem (nicht in Bezug auf die verwendete Virtualisierungs-Lösung) Umzug einer VM durch einfaches Kopieren der Image- und Konfigurationsdateien Bessere Auslastung moderner Hardware (insgesamt braucht man weniger Server) strikte Trennung verschiedener Systeme möglich – höhere Sicherheit bei Kompromittierung leichte Pflege verschiedener Betriebssystem-Varianten möglich alte Betriebssystem „laufen“ auf neuer Hardware trotz fehlender Treiber gefahrloses Testen von Software eventuell schneller Umzug durch Livemigration Flynn Marquardt Linux II Vorlesung 68 / 209 Virtualisier. Einführung Virtualisierungs-Konzepte Grundsätzliche Methoden Grundsätzlich werden zwei verschiedene Ansätze verfolgt: Betriebssystem-Virtualisierung: Es läuft nur ein Kernel. Es wird eine Bestriebssystem-Umgebung erzeugt, die aus Anwender-Sicht einem vollen Betriebsystem entspricht (OS-Container). Beispiele: BSD-Jails, Solaris Zonen, Linux-VServer, OpenVZ/Virtuozzo System-Virtualisierung: Es wird ein kompletter Computer nachgebildet, Teile der Hardware werden emuliert. In der VM kann ein nicht modifiziertes Betriebssystem installiert werden. Beispiele: VMware, Virtual PC und -Server, Parallels, XEN3 auf VT-fähigen Prozessoren. Es gibt allerdgins etliche Mischformen und eigene Ansätze: XEN, User-Mode Linux, Qemu. Flynn Marquardt Linux II Vorlesung 69 / 209 Virtualisier. Einführung Virtualisierungs-Konzepte OS-Container OS-Container: Laufzeitumgebung für einzelne Programme: kein eigenes Betriebssystem nur ein Kernel Hardware beschränkt kein direkter Hardwarezugriff schlanke Umgebung für einzelne (Server-)Prozesse Beispiele: BSD-Jails, Solaris Zoning, mit Einschränkung SE-Linux, Mac-on-Linux, OpenVZ, Virtuozzo, Linux-VServer Flynn Marquardt Linux II Vorlesung 70 / 209 Virtualisier. Einführung Virtualisierungs-Konzepte Virtual-Machine-Monitor (VMM) Der VMM verteilt die Resourcen auf unterschiedliche Arten: Hardware-Emulation: unabhängig von der realen Hardware wird immer die gleiche virtuelle Hardware emuliert, z.B. VMWare emuliert eine AMD-Lance Netzwerkkarte auf Registerebene. Vertreter: VMWare Workstation, Qemu, Virtual-Box Hardware-Virtualisierung: es wird die vorhandene reale Hardware auf VMs verteilt. Vertreter: Microsoft Virtual PC, XEN3 und KVM bei VT oder AMD Pacifica fähigen Prozessoren Paravirtualisierung: Ein Hypervisor regelt den Zugriff auf Hardware-Resourcen (Netzwerk, Festplatte, sonstige I/O). Hardware-Aufrufe in der VM werden in Hypervisor-Aufrufe umgelenkt, dazu sind Modifkationen am Betriebssystem notwendig. Vertreter: XEN2/3 (klassisch), VMWare Server 2.0 Flynn Marquardt Linux II Vorlesung 71 / 209 Virtualisier. Einführung Probleme bei der Virtualisierung Performance: reine Rechenleistung ist immer gut (native Befehlsausführung). Probleme bei der I/O-Leistung: Festplatte, Netzwerk Ohne Systemvirtualisierung sind Anpassungen des Betriebssystems in der VM notwendig, bei nicht OpenSource-OS problematisch (NDA) je nach Art der Netzwerkschnittstelle ist die Einrichtung und Firewalling des Netzwerks knifflig Migration vorhandener Installationen nicht immer möglich einige Lösungen erfordern im Moment spezielle Hardware Sicherheit: ungenügend getestet bzw. evaluiert, Löcher werden immer wieder bekannt VMs sind für darin laufende Programme erkennbar, Schadsoftware reagiert bereits mit geändertem Verhalten VMs sind sogar remote an ihrem Timing-Verhalten im TCP-Traffic erkennbar Flynn Marquardt Linux II Vorlesung 72 / 209 Virtualisier. Linux Implementierungen für Linux UML/QEMU User Mode Linux älteste OpenSource Linux-Implementation: Linux als normaler Prozess im Standard-Kernel integriert keine Root-Rechte, keine Patches notwendig schlechte I/O-Performance u.a. bei Debian im Build-Daemon benutzt QEMU ursprünglich reiner PC-Emulator, jetzt mit Beschleuniger Modul (seit kurzem OpenSource!): emuliert Hardware: CPU, Festplatte, Netzwerk, Grafik hat Management-Konsole Suspend/Resume möglich nur rudimentäre emulierte Grafikkarte Fallback-Lösung von KVM (s.u.) bei nicht VT-fähigen Lösungen Flynn Marquardt Linux II Vorlesung 73 / 209 Virtualisier. Linux Implementierungen für Linux VMWare/Virtuozzo VMWare erste erfolgreiche kommerzielle Lösung: System-Virtualisierung, Treiber für VMs z.T. von VMWare Desktop und Server-Versionen Umfangreiche Administrations-Software Kommerzieller Support OpenVZ/Virtuozzo OpenVZ ist die abgespeckte Version der kommerziellen Software Virtuozzo: Betriebssystem-Virtualisierung Linux unter Linux, in der Regel nur spezielle Versionen beliebte Lösung für dezidierte Server und Hoster Flynn Marquardt Linux II Vorlesung 74 / 209 Virtualisier. Linux Implementierungen für Linux Linux VServer I Vserver Reine OpenSource Lösung Betriebssystem-Virtualisierung (= erweitertes chroot) in einigen Distributionen integriert (debian) im Moment effizienteste Realisierung aller Virtualisierungsansätze gut dokumentiert Netzwerkkonfiguration sehr eingeschränkt Memory und Disk-Limits nicht trivial zuzuweisen ist produktiv bei Hostern im Einsatz keine Last für den Host Flynn Marquardt Linux II Vorlesung 75 / 209 Virtualisier. Linux Implementierungen für Linux Linux VServer II Vorteile System Calls sind nativ, nicht emuliert/gekapselt kein Disk-Image, nur ein Verzeichnis (copy-on-write) alle Prozesse werden von einem Scheduler verwaltet nur ein Memory-Subsystem 32-Bit Gast auf 64-Bit Host möglich Nachteile nur eine Kernel-Version gleichzeitig möglich kein Clustering/Migration (single Point of failure) keine eigenen Routingtabellen keine Zuweisung von I/O-Bandbreite möglich Programme, die Capabilities brauchen, müssen gesondert behandelt werden kein localhost im Gast (ist in manchen Programmen hart kodiert) Moderne Variante: LXC (LinuX Containers) Flynn Marquardt Linux II Vorlesung 76 / 209 Virtualisier. Linux Implementierungen für Linux XEN XEN an der Universität Cambridge entwickelt OpenSource-Lösung: Paravirtualisierung mit Hypervisor-Ansatz im Moment beste Hardware I/O-Performance nach Vserver kann PCI-Geräte an einzelne VMs (Domains) durchreichen kommerzieller Support und Admin-Tools verfügbar am weitesten fortgeschrittene Opensource-Lösung (noch) nicht im (Vanilla-)Kernel integriert Flynn Marquardt Linux II Vorlesung 77 / 209 Virtualisier. Linux Implementierungen für Linux Übersicht V VirtualBox Linux-Version des Virtual PC Produktes System-Virtualisierung mit umfangreicher Hardware-Emulation Admin-Gui, Management-Konsole grafischer Remote-Zugang Neuling, noch nicht ganz stabil kommerzielle und OpenSource Variante Flynn Marquardt Linux II Vorlesung 78 / 209 Virtualisier. Linux Implementierungen für Linux Übersicht VI KVM Kernel Based Virtual Machine Linux ist selbst der Hypervisor, besteht aus: I I I KVM Kernel und User Modul QEMU CPU-core und PC-System Emulator Library BIOS(se) (System, VGA) schon im Kernel integriert, nachladbares Modul (abschaltbar!) benötigt VT/Pacifica-fähige Prozessoren, sonst Fallback auf QEMU kann Balloning (dynamische Anpassen des RAMs) „die“ OpenSource Linux Lösung kommerzieller Support verfügbar Flynn Marquardt Linux II Vorlesung 79 / 209 Virtualisier. Linux XEN XEN braucht zwei Linux-Kernel: Priviligierte Domäne zieht eine Abstraktionschicht zwischen Hardware und Gast-Betriebssystem (Kernel der wirklich bootet). Auf dieser Domäne 0 wird XEN eingerichtet und verwaltet. Unpriviligierte Domänen sind die VMs. Die Kernels für die Gast-Betriebssystem müssen speziell für XEN angepasst werden, sind also nur für OpenSource-OS verfügbar: Linux (Open)Solaris NetBSD (ReactOS) Bei modernen Prozessoren (Intel Vanderpool, AMD Pacifica) kann XEN3 die Hardware direkt durchreichen, spezielle OS-Anpassungen entfallen dann. Flynn Marquardt Linux II Vorlesung 80 / 209 Virtualisier. Linux XEN Tools xen-tools: Debian Konsolen-Utilities ConVirt/Xenman: grafisches OpenSource Administrationstool XenEnterprise: Toll der XEN-Entwickler OpenQRM mit XEN-Plugin Flynn Marquardt Linux II Vorlesung 81 / 209 Virtualisier. Linux Libvirt Libvirt und VirtManager bilden eine Administrationslösung für verschiedene Virtualisierungslösungen: Virt-Manager GUI anlegen von VMs anzeigen von VMs verwalten von VMs libvirtd Daemon starten/stoppen/überwachen der VM Einheitlicher Kommunikations-Kanal mit der VM libvirt Basis-Library mit Anbindung an z.B.: Skriptsprachen: perl, python, ruby, . . . Monitoringtools: collectd, munin Flynn Marquardt Linux II Vorlesung 82 / 209 Virtualisier. Linux Libvirt Unterstützte Lösungen Libvirt unterstützt folgende VMMs gut: KVM XEN Daneben können auch folgende VMMs benutzt werden: Qemu Virtual Box VMWare ESX/GSX OpenVZ Keine Lösung wird perfekt unterstützt. Libvirt hinkt immer etwas hinterher. Flynn Marquardt Linux II Vorlesung 83 / 209 Virtualisier. Übung VServer Übungen VServer Übersicht Utility-Sammlung util-vserver Gastsysteme erzeugen Resourcen begrenzen Weiterführende Dokumentation unter: linux-vserver.org/Documentation Flynn Marquardt Linux II Vorlesung 84 / 209 Virtualisier. Übung VServer util-vserver Originale Utility-Sammlung des Vsererv-Projektes: vserver verwaltet die Vserver-Kontexte vserver vserver vserver vserver vserver vserver vserver <name> <name> <name> <name> <name> <name> <name> build: baut ein Gast-Dateisystem start: startet einen Kontext enter: startet eine Root-Shell exec command: startet ein Programm stop: beendet einen Kontext delete: löscht ein Gast-Dateisystem ... Man-Page vtop modifiziertes top, zeigt alle Prozsse aller Kontexte vps modfiziertes ps, zeigt alle Prozesse aller Kontexte vserver-stat Übersicht über alle Vserver-Kontexte chbind Startet einen Prozess auf nur einem Netzwerkinterface Flynn Marquardt Linux II Vorlesung 85 / 209 Virtualisier. Übung VServer Gast-Dateisysteme bauen Distributions-basiert Mit vserver <name> build kann man Gast-Dateisystem bauen: Debian-Basiert mit Hilfe von debootstrap: vserver vserver1 build –m debootstrap –hostname vserver1.mydomain.com –interface eth0:192.168.1.10/24 – -d lenny -m http://ftp.de.debian.org/debian RPM-basiert mit yum (z.B. fedora, CentOS, RHEL): vserver vserver1 build –m yum –hostname vserver2.mydomain.com –interface eth0:192.168.1.11/24 – -d centos5 mit templates (z.B. gentoo): vserver vserver3 build -m template –hostname vserver3.mydomain.com –interface eth0:192.168.1.12/24 –initstyle gentoo – -d gentoo -t /vservers/.templates/stage4-i686-20070905.tar.bz2 Flynn Marquardt Linux II Vorlesung 86 / 209 Virtualisier. Übung VServer Gast-Dateisysteme bauen File-basiert mit rsync I remote: RSYNC_RSH=ssh vserver vserver4 build -m rsync –hostname vserver4.mydomain.com –interface eth0:192.168.1.13/24 – –source root@host1:/vservers/vserver3 I lokal: vserver vserver4 build -m rsync –hostname vserver4.mydomain.com –interface eth0:192.168.1.13/24 – –source vserver1 als clone: vserver vserver5 build -m clone –hostname vserver5.mydomain.com –interface eth0:192.168.1.14/24 – –source /vservers/vserver4 Flynn Marquardt Linux II Vorlesung 87 / 209 Virtualisier. Übung VServer Vserver-Übung 1 Gast-Dateisystem bauen Gast-Dateisysteme bauen: 1 2 Distributions-basiert nach Wahl. Achtung: es werden mindestens 50-100MB Paket-Daten vaus dem Netz benötigt, deshalb Debian-sid-Mirror intern: 10.1.5.5, also vserver build ...-d sid -m http://10.1.5.5/debian/debian Vserver-Utilities testen: I I I 3 vps/vpstree vtop vserver-stat eine Kopie des ersten Servers anfertigen mit rsync oder vserver clone Flynn Marquardt Linux II Vorlesung 88 / 209 Virtualisier. Übung VServer Vserver-Übung 2 Netzwerkprobleme 1 einen Netzwerkserver in mindestens zwei Kontexten installieren (z.B. ssh) 2 mit netstat nachprüfen, welcher tatsächlich läuft 3 durch ssh-Konfiguration die ssh-Server an die jeweiligen Interfaces binden alternativ den ssh-Server mit chbind starten: 4 1 2 zuerst von Hand später durch Abänderung des Startskriptes Für Netzwerkzugriff nach außen ist eventuell Masquerading notwendig: iptables -t nat -I POSTROUTING -s $VSERVER_NET -d $VSERVER_NET -j SNAT --to $EXT_IP VSERVER_NET: Netzweraddresse des privaten Vserver-Netzes EXT_IP: externe IP-Adresse Flynn Marquardt Linux II Vorlesung 89 / 209 Virtualisier. Übung VServer Resourcen begrenzen Im Rahmen der normalen Linux Resourcen Verwaltung kann der Speicher pro Kontext begrenzt werden. Relevant sind: AS – Maximum address space size Maximale zur Verfügung stehender Adressraum (RAM + Swap) RSS – Maximum resident set size (maximaler physikalischer Speicher) Die Einstellung erfolgt nicht absolut in Bytes, sondern als Anzahl von Pages. Bei einem PC (Architektur x86 oder x86_64) also 4kB! Es gilt: AS > RSS! AS und RSS sollten kleiner sein als auf dem Server zur Verfügung steht. Flynn Marquardt Linux II Vorlesung 90 / 209 Virtualisier. Übung VServer Vserver-Übung 3 Memory Limits Einstellung von Speicher-Begrenzung: 1 alte Resourcen ansehen: cat /proc/virtual/<context>/limit 2 vserver anhalten 3 Verzeichnis erzeugen: /etc/vservers/<name>/rlimits 4 dort Dateien anlegen: as und rss und mit Angaben füllen (nur Zahlen, eine Zeile) 5 vserver starten 6 neue Resourcen ansehen wie oben Flynn Marquardt Linux II Vorlesung 91 / 209 Virtualisier. Übung VServer Vserver-Übung 4 CPU Limits Einstellung von Speicher-Begrenzung: 1 vserver anhalten 2 Verzeichnis erzeugen: /etc/vservers/<name>/sched 3 dort Dateien anlegen: fill-rate, intervall, tokens, tokens-min und tokens-max und mit Angaben füllen (nur Zahlen, eine Zeile), z.B. 8, 32, 500, 200, 1000 4 vserver starten 5 check mit: watch -n1 cat /proc/virtual/<xid>/sched 6 Last erzeugen, z.B. cat /dev/urandem > /dev/null und mit top und vtop ansehen. Flynn Marquardt Linux II Vorlesung 92 / 209 Virtualisier. Übung KVM Übungen KVM Übersicht KVM starten/verwalten Gastsysteme erzeugen Netzwerk Resourcen begrenzen/verändern Weiterführende Dokumentation unter: Qemu-Buch Flynn Marquardt Linux II Vorlesung 93 / 209 Virtualisier. Übung KVM KVM starten Das Programm kvm hat die gleichen Optionen wie qemu, u.a. –m setzt die Ramgröße (default 128MB) –k Sprache für die Tastatur –hda Image für die erste Festplatte, muss existieren (Virtuell über die Option fat:) –drive flexible Möglichkeit Laufwerke zu definieren –cdrom ISO-Image für eine CDROM –boot Boot-Reihenfolge angeben –nographic ohne Grafik, nur serielle Verbindung (–curses gibt Textkonsole) –vnc Remote-Grafik über das VNC-Protokoll –balloon virtio schaltet dynamische Veränderung des RAMs ein –net richtet Netzwerk (s.u.) Alle Optionen sind sehr gut in der Man-Page zu kvm erklärt. Flynn Marquardt Linux II Vorlesung 94 / 209 Virtualisier. Übung KVM Images anlegen Festplatten-Images für KVM werden qemu-img angelegt: bevorzugtes Format sollte qcow2 sein: I I I kann dynamisch wachsen/schrumpfen Verschlüsselung und Kompression möglich kann VM-Snapshots aufnehmen Maximalgröße muss vorher festgelegt werden kann Overlays haben (=Journal-Modus) Beispiel: qemu-img create -f qcow2 hda.img 10G Images anderer Virtualisierer am besten über das raw-Format importieren. Mit qemu-nbd könne die Images transparent gemountet werden. Alternative: paravirtualisiert mit dem Modul virtio_blk und ext3-Basis (nur Linux Gast) Flynn Marquardt Linux II Vorlesung 95 / 209 Virtualisier. Übung KVM Netzwerk bei KVM gibt es verschiedene Optionen für die Netzwerk-Interface: –net nic Virtuelle Netzwerkkarte, es wird eine Netzwerkkarte emuliert oder paravirtualisiert. –net user User Mode Netzwerk, braucht keine Rootrechte, jeder Port wird einzeln aktiviert –net tap Nutzt das tun/tap-Device, voller Netzzugriff –net socket für interne Kommunikation unter verschiedenen KVM-Instanzen –net vde VDE Switch (Virtual Distributed Ethernet) für komplexe Setups In der Regel sind zwei -net Optionen notwendig: quasi -net nic für den Gast eine der anderen für die Realisierung nach außen Flynn Marquardt Linux II Vorlesung 96 / 209 Virtualisier. Übung KVM Tuning CPU/Netzwerk CPU spezielle Features der CPU können freigeschaltet werden: –cpu host alle Fähigkeit der Host-CPU werden durchgereicht. –cpu qemu64,+sse4.1 Nur SSE4.1 wird zur Standard-CPU hinzugefügt. Netzwerk paravirtualisierten Treiber verwenden kvm –net nic,model=virtio. . . TAP-Interface statt User-Mode-Netzwerk (deutlich mehr Konfigurationsaufwand) kvm –net tap. . . Flynn Marquardt Linux II Vorlesung 97 / 209 Virtualisier. Übung KVM Tuning Festplatte Festplatte eigene Partition statt Image-Datei: kvm –drive file=/dev/xxx. . . paravirtualisierten Treiber verwenden: kvm –drive if=virtio. . . IO-Schedulter im Gast abschalten: echo noop > /sys/block/?da/queue/scheduler Windows-Gast: VirtIO-Treiber von Redhat installieren spice quest tools Flynn Marquardt Linux II Vorlesung 98 / 209 Virtualisier. Übung KVM Übung KVM Übung KVM I Installation verschiedener Betriebssysteme: I I I I Ubuntu Linux Debian Linux (minimal) ReactOS Windows Testen verschiedener Grafik-Ausgaben: I I I VGA (Cirrus, VESA, VMWare qxl) nur Konsole oder seriell VNC Erzeugen der VM wahlweise von Hand oder mit dem Virt-Manager. Flynn Marquardt Linux II Vorlesung 99 / 209 Virtualisier. Übung KVM Übung KVM Übung KVM II Testen verschiedener Netzwerkadapater I I User Mode Tun/Tap Adapter Paravirtualisierung testen: I I I Blockdevice (Linux/Windows) Netzwerk (Linux/Windows) Ballooning - Ramgröße im Betrieb ändern (Linux/Windows) Suspend/Resume einer VM Clone einer VM erstellen Flynn Marquardt Linux II Vorlesung 100 / 209 VPN Einführung VPN – Aufgaben Aufgaben bzw. Einsatzgebiete von VPNs sind Transport privater Daten über öffentliche Netze Wahrung der Authentizität Verschlüsselung der Kommunikation Schutz gegen Man-in-the-middle und Replay Attacken Sichere Anbindung von Außenstellen an Intranets Aufbau privater, verschlüsselter Netze über unsichere Netze zusätzliche Absicherung von WLANs Flynn Marquardt Linux II Vorlesung 101 / 209 VPN Linux VPN-Lösungen für Linux Unter Linux sind verschiedene VPN-Lösungen einsetztbar: IPSec PPTP bzw. L2TP OpenVPN tinc ssh mit Portforwarding/Socks Flynn Marquardt Linux II Vorlesung 102 / 209 VPN Linux IPSec IP Security – Erweiterung des IP-Protokolls um Sicherheitsaspekte Standardisiert und sehr weit verbreitet Problem Schlüsselaustausch: I I Manual Keying – Schlüssel werden ohne IPSec ausgetauscht IKE – Internet Key Exchange F F I PSK – Pre shared Key (gemeinsames Geheimnis) Zertifikate kommerzielle Erweiterungen zur Erzeugung, Verwaltung und Einspielen von Schlüsseln/Zertifikaten Transportmodus: nur Nutzdaten werden verschlüsselt, IPSec-Header nicht Tunnelmodus: Nutzdaten und Header werden verschlüsselt, Gateway zum Auspacken und weiterleiten notwendig Flynn Marquardt Linux II Vorlesung 103 / 209 VPN Linux IPSec – Probleme IPSec bringt einige Probleme mit sich: komplizierter Schlüsselaustausch, macht oft Software von Dritten notwendig, schränkt Interoperabilität ein großer, komplizierter Standard, fehleranfällig, ebenfalls Interoperabilität-Probleme, nichts für kleine Geräte eigenes IP-Protokoll, benötigt Unterstützung am Gateway bzw. eigenen Router insgesamt komplizierter Setup Flynn Marquardt Linux II Vorlesung 104 / 209 VPN Linux IPSec – Clients ipsec-tools Kommandozeilen Tools für die in-Kernel IPSEC Implementation racoon dazu passender IKE ike frei verfügbare GUI und IKE für Linux/FreeBSD/Windows Howtos für Anbindung an viele (WLAN)-Router kommerzieller Support vpnc Client für Cisco Concentrators in Standardkonfiguration unsicher (XAUTH mit pre-shared keys und Passwort) geeigent für Verbindung mit FritzBox in NetworkManager integriert Flynn Marquardt Linux II Vorlesung 105 / 209 VPN Linux PPTP/L2TP PPTP – Point-to-Point Tunneling Protocol Herstellerspezifisches Protokoll, inzwischen mit RFC: verwendet eigenes IP-Protokoll, Nr. 47 in frühen Windows-Versionen integriert, daher weit verbreitet Stärke der Verschlüsselung von Passwortlänge abhängig! Client für Linux vorhanden Firewallsupport in Linux netfilter vorhanden (Connection-Tracker) wird weitgehend durch L2TP abgelöst Sollte nur in stark Windows dominierten Umgebungen eingesetzt werden. Flynn Marquardt Linux II Vorlesung 106 / 209 VPN Linux tun/tap-Device Virtuelles Netzwerdevice zum Empfang und Versand von Netzwerkpaketen an Userspace-Programme. Basis aller Userspace VPNs Netzwerkkonfiguration mit Standardtools spezielles API zum Erzeugen eines tun-(IP) oder tap-Devices (Ethernet) direktes Erzeugen/Abfangen von IP(Ethernet)-Paketen möglich unterliegt dem normalen Routing und Tracing integriert im Linux-Kernel, gibt es jetzt für viele Betriebssysteme (Windows, viele Unix-Derivate) Flynn Marquardt Linux II Vorlesung 107 / 209 VPN Linux OpenVPN OpenVPN – OpenSource Userspace VPN SSL VPN Client-server Modell Ein Port Protokoll (Standard TCP/UDP Port 1194) Clients für alle gängigen Betriebssysteme kann den Datenverkehr on-the-fly komprimieren public/private- oder static-Key Verfahren möglich Resourcen-schonend, kann in embedded-Umgebungen eingesetzt werden (z.B. FritzBox) benutzt tun/tap-Device GUI in NetworkManager integriert aktiv gepflegt, große Gemeinde Flynn Marquardt Linux II Vorlesung 108 / 209 VPN Linux Tinc Features I OpenSource VPN, ähnlich wie OpenVPN (Abgrenzung schwierig) eigenes VPN-Protokoll, basierend auf OpenSource crypto-Libraries Ein Port Protokoll (Standard TCP/UDP Port 655) reiner TCP-Betrieb möglich Clients für alle gängigen Betriebssysteme kann den Datenverkehr on-the-fly komprimieren, verschiedene Verfahren möglich RSA(DSA)-Verfahren zum Schlüsselaustausch benutzt tun/tap-Device Flynn Marquardt Linux II Vorlesung 109 / 209 VPN Linux Tinc Features II kennt Betriebsmodi router IP basiertes Routing switch tinc agiert als Ethernet-Bridge mit vollem Arp Support (wegen Ethernet-Broadcasts mehr Datenverkehr als im Modus router) hub wie switch, aber alle Pakete werden als Broadcast übertragen (noch mehr Datenverkehr als im Modus switch) kann sich selbst über einen http-Proxy tunneln verfolgt Peer-to-Peer Ansatz, kann ohne Zentrale operieren und trotzdem Netze aufbauen Endknoten kommunizieren in der Regel direkt miteinander (UDP), Server wird nur für Routinginformationen gebraucht leicht erweiterbar durch neue Knoten stabil, im Moment aber reduzierte Weiterentwicklung Flynn Marquardt Linux II Vorlesung 110 / 209 VPN Linux ssh mit Portforwarding OpenSource VPNs benötigen das tun/tap Device und somit vollen root Zugriff. Alternative: ssh mit Portforwarding als kleine Lösung für einzelne Dienste (=Ports) keine sinnvolle Lösung für volle IP-Tunnels (aber möglich) kann auf Serverseite geblockt werden erfordert für privilegierte Listen-Ports root-Rechte Option ServerAliveInterval hilft bei der Aufrechterhaltung langer Session bei Problem mit Timeouts Syntax Forwarding lokaler Port: ssh -L [bind_address:]local_port:remote_host:remote_port Achtung: der lokale Port per default wird an das Loopback Interface gebunden und steht daher nur dem eigenen Rechner zur Verfügung, kann mit Hilfe des optionalen bind_address geändert werden. Flynn Marquardt Linux II Vorlesung 111 / 209 VPN Übung tinc Aufbau eines VPN Netzes mit tinc tinc installieren prüfen, ob Kernel das tun-Device bereitstellen kann Konfiguration in I I I I /etc/tinc/tinc.conf Anlegen von Schlüsseln /etc/tinc/tinc-up und /etc/tinc/tinc-down Anlegen von Peers: /etc/tinc/hosts/xxx starten von tinc im Debug-Modus tincd -d und Test (ping usw.) Flynn Marquardt Linux II Vorlesung 112 / 209 VPN Übung tinc Tinc – tinc.conf Wichtige Konfigurationsdirektiven in /etc/tinc/tinc.conf ConnectTo – benennt den Knoten, mit dem sich verbindet will, falls es fehlt wird einfach nur der Listen Port geöffnet (Server-Mode) Name – Name des eigenen VPN Knoten Device – Name des Netzwerkdevices im Filesystem (/dev/net/tun) Interface – Name des Netzwerkdevices (tun0) PrivateKey – Privater Schlüssel (oder) PrivateKeyFile – Dateiname des privaten Schlüssels Schlüsselerzeugung: tincd -k Flynn Marquardt Linux II Vorlesung 113 / 209 VPN Übung tinc Tinc – tinc-up, tinc-down tinc-up, tinc-down – Shellskripte für die virtuellen Netzwerkdevices werden von tinc bei jeder erfolgreichen Verbindung bzw. Abbruch gestartet Aufgaben I I I Vergabe von IP-Nummer und Subnetzmaske an das Interface in der Variable INTERFACE (zwingend): ifconfig $INTERFACE 192.168.1.1 netmask 255.255.0.0 Die Subnetzmaske muss alle zukünftigen Teilnehmer des VPN umspannen setzen eines VPN-Internen DNS-Servers in /etc/resolv.conf eventuell eigenes Logging Flynn Marquardt Linux II Vorlesung 114 / 209 VPN Übung tinc tinc – /etc/tinc/hosts Ein Satz von drei Dateien beschreibt einen Knoten im tinc-Netz: netname – konfiguriert den Knoten: I I I I Address – IP-Adresse des Knotens Subnet – Subnetzmaske des Knotens Compression – verwendetes Kompressionsverfahren (optional) Public Key – wird im PEM-Format direkt in der Datei am Ende abgespeichert netname.rsa_key.priv – Private Key für tinc.conf Um mit einem anderen Knoten kommunizieren zu können, müssen zuvor die Datei netname übermittelt werden. Flynn Marquardt Linux II Vorlesung 115 / 209 VPN Übung tinc tinc – VPN-Design Am Anfang muss ein Konzept für die Adressvergabe im VPN erstellt werden, z.B.: VPN-Netz = B-Netz: 10.0.3.0/255.255.0.0 jeder Teilnehmer bekommt eigenes C-Netz: also 10.0.3.x/255.255.255.0 Debugging/Fehlersuche: I I I tinc im einfachen Debugmodus starten: tincd -d und in /var/log/daemon.log nachsehen Log-Level kann durch tincd –kill=INT auf den Wert 5 erhöht werden alternativ dazu kann tinc im sogenannten foreground Modus gestartet werden: tincd -D, alle Meldungen gibt es auf standard out. www.tinc-vpn.org Flynn Marquardt Linux II Vorlesung 116 / 209 VPN Übung tinc tinc – VPN-Tests Bei funktionierendem VPN: Pakete mitschneiden auf dem Tun-Interface und auf dem Lan-Interface Option TCPOnly testen. Meshup-Funktion verifizieren: I I I Rechner A und B bilden tinc-Netz C verbindet zu B C pingt A (mit Paketmitschnitt nachprüfen!) Signale: I I USR1 Verbindungsliste im Syslog USR2 Statistik im Syslog Flynn Marquardt Linux II Vorlesung 117 / 209 Embedded Standard-PC IBM hat Anfang der 1980er Jahre den Desktopn-PC definiert: gesockelter, Intel x86-basierter Prozessor Motherboard mit definierten Sockel für I I I I I I Prozessor Arbeitsspeicher Erweiterungskarten (ISA, PCI, . . . ) Stromversorgung Anschlüsse für Monitor(e), Tastatur, Maus Anschlüsse für Festplatten Netzteil/Stromversorgung (z.B. ATX) Gehäuseformat (AT, ATX usw.) Später hat die Firma Intel weitgehend durch neue Standard diese Aufgabe übernommen. Flynn Marquardt Linux II Vorlesung 118 / 209 Embedded Embedded Platformen Merkmale Das besondere Merkmal ist der SOC: System-On-a-Chip Prozessor Architektur wird lizensiert (ARM , Mips, . . . ) SOC ensteht aus Prozessor und weiteren Konponenten: I I I I I I I I I I integrierte Speicherkontroller mathematischer Koprozessor GPIOs (general purpose input output) AD/DA-Wandler (meist 8–12 Bit) Grafik/3D-Beschleuniger GSM/UMTS/LTE-Modems Audio-Codes/Filter/Verstärker USB-Kontroller Ethernet Kontroller NAND/SD-Karten/SATA-Kontroller sehr kleine Caches keine Sprungvorhersage keine Standardfirmware/Bootloader keine standardisierten Motherboards Flynn Marquardt Linux II Vorlesung 119 / 209 Embedded SOC – Varianten ARM RISC-Archtitektur 32 und 64-Bit Designs vorhanden optionale GPU vom Hersteller (Mali) und von Fremdanbietern sehr kompakter Code möglich (Thumb-Mode) Varianten I I I Microkontroller (z.B. GPS-Empfänger) Mobilprozessoren Server-Prozessoren big-little Konzept zum Energie sparen möglich Hersteller, z.B. I I I I Texas Instruments (OMAP) Samsung (Exynos, frühe iPhones) Qualcomm (Snapdragon) Apple (A4, A5, A6, . . . ) Einsatzgebiete: Smartphones, Navis, kleine Server Flynn Marquardt Linux II Vorlesung 120 / 209 Embedded SOC – Varianten Mips MIPS: Microprocessor without interlocked pipeline stages RISC-Architektur 32 und 64-Bit Designs vorhanden braucht vorsortierten und gepaddeten Code: grosser Code Einsatzgebiete: Router aller Art (WLAN, WWAN, . . . ) Flynn Marquardt Linux II Vorlesung 121 / 209 Embedded SOC – Varianten sonstige SuperH - SuperHitachi (jetzt Renesas) I I I Spielkonsolen Automotive DVB-Settopboxen AVR32 PowerPC embedded Flynn Marquardt Linux II Vorlesung 122 / 209 Embedded Embedded Platformen Schnittstellen seriell I2 C Inter-Integrated Circuit Stromversorgung: Micro-USB, Pfostenleiste, Rundstecker HDMI/VGA/FBAS RJ-45 Stecker (Ethernet) I2 S Inter-IC Sound GPIO I I I I IN/OUT wandelbar, z.B. in seriell DA/AD Interrupt Flynn Marquardt Linux II Vorlesung 123 / 209 Embedded Cross compilieren Embedded Platformen sind zu schwach, haben zu wenig RAM, um dort Software zu entwickeln. Cross compilieren: Host: Rechner aud em entwickelt wird Target: Rechner für den entwickelt wird Cross Entwicklungsumgebung: I I I I Cross Compiler (gcc, clang) Cross Binutils (assembler, linker, usw.) Cross Debugger mit remote Interface (gdb, gdbserver, lldb) SDK mit Header-Dateien und Libraries des Targets Targettools, um Software aufzuspielen/flashen/starten In der Regel wird gcc und Prefixen/Triplets gearbeitet, z.B. arm-linux-androideabi-: arm-Prozessor, android in der eabi-Variante arm-linux-gnueabihf-: arm-Prozessor, linux mit Hardware-Float mipsel-linux-android-: mips-Prozesor, linux little endian Flynn Marquardt Linux II Vorlesung 124 / 209 Embedded Embedded Linux Linux Kernel Kernel unterstützt sehr viele Prozessoren (Version 3.17: 29) in der Regel Frambuffer Grafik jeder neue SOC muss neu unterstützt werden Kernel kann nur für eine SOC-Variante gebaut werden Vanilla-Kernel hinkt oft hinterher Hersteller/Community pflegt eine ausgesuchte Kernel-Version (meist longterm) mit allen Patches Linux ist nicht für Mikrokontroller geeignet: mindestens 4 (2) MB Ram (Mikrokontroller typischerweise 8–256kB) braucht zwingend einen MMU Flynn Marquardt Linux II Vorlesung 125 / 209 Embedded Embedded Linux spezielle Software Spezielle Software Projekte für kleine Systeme 1 busybox I I I 2 µclibc I 3 Multifunktionales Binary, beinhaltet bis über 200 Funktionalitäten Funktionalität über Softlink realisiert weniger Optionen als GNU-Version reduzierte C-Library uboot: universaler Bootloader Flynn Marquardt Linux II Vorlesung 126 / 209 Embedded Distributionen Embedded braucht spezielle Distributionen: Platform/Board muss unterstützt Bootvorgang muss unterstützt werden muss eventuell klein sein eventuell read-only Installation nicht x86/nicht ARM Platformen werden selten unterstützt Exemplarisch Debian (Ubuntu) OpenWrt Android Flynn Marquardt Linux II Vorlesung 127 / 209 Embedded Distributionen Debian viele Prozessorplatformen werden voll oder testweise unterstützt: erste Anlaufstelle grosse Distribution kaum Anpassungen an spezielle Boards braucht viel Platz im ROM/Festspeicher meist „Mischbestrieb“ I I gepatcher Community Kernel Debian macht den Rest Ideale Lösung für grössere Systeme: viel Software sofort verfügbar unbegrenzt updatefähig Flynn Marquardt Linux II Vorlesung 128 / 209 Embedded Distributionen OpenWrt Platform insbesondere für Router. Anpassungen an sehr viele Boards Anleitungen zum Aufspielen auf fertiger Hardware fertige Images für Releases kann komplett (inklusive Cross-Umgebung) selbst gebaut werden kann sehr klein gemacht werden: Basissystem weniger als 4MB read-only/overlay Modus oder voll updatefähig optionale Weboberfläche Ideale Lösung für kleine Platformen oder Platformen, die Debian nicht unterstützt. Flynn Marquardt Linux II Vorlesung 129 / 209 Embedded Distributionen Android Eigentlich keine Distribution, eher ein Software-Stack: angepasster Kernel mit eigenem Android-Framebuffer und Sleep-Mechanismus eigene C-Library (Bionic) native, eingebaute Libraries: I I I I sqlite (Datenbank) webkit (html-Rendering) opengles Java Virtual Machine (Dalvik) riesige Java-Bibliothek überwiegend, aber nicht ausschliesslich OpenSource gibt es als OpenSource-Variante: Cyanogenmod Flynn Marquardt Linux II Vorlesung 130 / 209 Embedded Boards Raspberry Pi Broadcom CPU, single core, schwach 256/512 MB RAM leistungsfähige GPU, gut unterstützt zusätzliche SD-Karte als Festspeicher notwendig Ethernet eingebaut (Variante B) Add-On-Boards vorhanden für Pfostenleiste aktive Community viele Distribuitionen, einfach zu installieren/updaten Kernel Version 3.12 sehr günstig, circa 30 Euro Flynn Marquardt Linux II Vorlesung 131 / 209 Embedded Boards CubieTruck chinesische Allwinner CPU, dual Core maximal ausgebaut: I I I I I I I I I 2GB Ram GigaBit Ethernet Wifi on board HDMI, SPDIF separat SATA-Verbindung Consumer IR 8GB NAND-Flash on board micro-SD-Kartenleser USB2-Anschlüsse Kernel Version 3.4, experimentell 3.17 Preis circa 90 Euro Flynn Marquardt Linux II Vorlesung 132 / 209 Tracing Grundproblem Analyse 1 Software I I I 2 laufendes Programm beteiligte Libraries Kernel Hardware I I I I CPU RAM Festplatte Netzwerk Flynn Marquardt Linux II Vorlesung 133 / 209 Tracing Grundproblem Hardware-Engpässe CPU/RAM CPU CPU-Engpässe normalerweise im User-Space Tuning durch den Scheduler extra-Handling für Hyper-Threaded Cores extra-Handling für NUMA RAM „ist durch nichts anderes zu ersetzen“ viele Anwendung laufen vernünftig nur im RAM extra-Handling im NUMA-Fall Flynn Marquardt Linux II Vorlesung 134 / 209 Tracing Grundproblem Hardware-Engpässe IO Festplatte Problem Zugriffs-/Latenzzeit, limitiert Zugriffe pro Sekunde möglichst sequentiell arbeiten fsyncs vermeiden, aber manchmal notwendig in der Regel „der“ Problem-Verursacher Netzwerk richtiges Protokoll wählen, TCP bringt Latenz gute Netzwerkkarten unterstützten TCP in Hardware Vorsicht mit dem backlog Flynn Marquardt Linux II Vorlesung 135 / 209 Tracing Userspace top und Konsorten top Platform-übergreifendes Tool zur Übersicht einzelner Prozesse: CPU-orientiert das Programm oben ist nicht immer das Problem wichtig sind die Programme mit Status D sehr viele Hotkeys ohne direkte Unterstützung weitgehend ersetzt durch htop Flynn Marquardt Linux II Vorlesung 136 / 209 Tracing Userspace top und Konsorten htop Modernere Variante von top speziell für Linux Hotkeys weigehend durch Funktionstasten ersetzt häufigste Funktionen leichter erreichbar Konfigurationsdialoge farbige Ausgabe Flynn Marquardt Linux II Vorlesung 137 / 209 Tracing Userspace top und Konsorten iotop zeigt Lese-, Schreibraten und Swapin auf Blockdevices kann unterschiedlich sortieren zeigt Kernelthreads zeigt IO-Prioritäten, die mti ionice gesetzt wurden braucht spezielle Kernelunterstützung und root-Rechte Gutes Tool um die aktuelle Festplatten-Aktivität zu erfassen. Flynn Marquardt Linux II Vorlesung 138 / 209 Tracing Userspace top und Konsorten latencytop zeigt längste Aufrufe an den Kernel zeii Hälften: I I oben: Gesamtübersicht unten: ausgewählter Prozess (default: Prozess mit höchster Latenz) spezieller fsync-Mode Richtwert: Latenz > 1000ms bedeutet großes Problem braucht intensive Kernelunterstützung, nicht immer möglich. Gutes Tool, um schnell der Verursacher von „Hängern“ zu ermitteln. Flynn Marquardt Linux II Vorlesung 139 / 209 Tracing Userspace Tracetools im Userspace strace Klassicher UNIX-Mechanismus zum Verfolgen von Syscalls: im Kernel eingebaut (ptrace) fast immer verfügbar –f kann fork verfolgen –e Ausgabe kann eingeschränkt werden: I I dezidierte Syscalls (open, socket, usw.) dezidierte Sets (–e trace=. . . ): file, process, network, signal, ipc, desc –s Länge der Ausgabe pro Zeile ist begrenzt –p Prozesse kann auch nachträglich von strace verfolgt werden –t(t) genaue und hochgenaue Zeitstempel möglich Flynn Marquardt Linux II Vorlesung 140 / 209 Tracing Userspace Tracetools im Userspace ltrace Erweitert strace um Shared-Library-Aufrufe, zusätzliche Optionen: –C demangle: C++-Aufrufe lesbar machen –S auch syscalls verfolgen (strace mode) –l . . . Verfolgung auf dezidierte Library beschränken nicht auf jedem System/Platform verfügbar (embedded) Flynn Marquardt Linux II Vorlesung 141 / 209 Tracing Profiling mit gcc Compiler profiling mit –pg GCC generiert beim Übersetzen zusätzlichen Code, um Analysen zu machen: –pg Option beim Übersetzen und Linken nicht für alle Prozessorplatformen verfügbar zusätzliche Datei gmon.out wird nach dem Beenden (!) des Programms erzeugt mit gprof kann diese Datei lesbar gemacht werden: I Call Graphen: F F F I Aufrufe von wem und an wen Aufrufhäufigkeit akkumulierte Zeit annotated Source Modus: Aufrufhäufigkeit jeder Zeile benutzt intern Sampling-Technik, daher ungenau und manchmal Artefakte im Prinzip auch im Kernel einsetzbar, Option vorhanden Alternative: valgrind Flynn Marquardt Linux II Vorlesung 142 / 209 Tracing Kernel basiert oprofile Älteres Sampling-Framework: Kernelunterstützung vorhanden (CONFIG_OPROFILE) sammelt auch Prozessor Information (Cache miss, Branchprediction, . . . ) erfasst über Sampling auch Daten des Testprogramms muss konfiguriert werden (opcontrol –setup ...) muss gestartet werden (opcontrol –start) läuft unabhängig vom Testprogramm nach Test anhalten (opcontrol –stop –dump) Auswertung (oprofpp -l ...) älter, daher weiter verbreitet, z.B. embedded Flynn Marquardt Linux II Vorlesung 143 / 209 Tracing Kernel basiert ftrace Fähigkeiten I Originäres, aktuelle Linux Tracing Framework vorbereitete Eintrittspunkte I I I I Scheduler Interrupts Filesystem Kommunikation bei Virtualisierung Gast/Host dynamisches Tracing I I I alle oder ausgesuchte Funktionen verfolgen Call-Graphen Stack-Benutzung Flynn Marquardt Linux II Vorlesung 144 / 209 Tracing Kernel basiert ftrace Fähigkeiten II Latency tracers I I Interrupts Preemption Wake up latency Flynn Marquardt Linux II Vorlesung 145 / 209 Tracing Kernel basiert ftrace Konfiguration I Kommunikation mit ftrace über debugfs: mkdir /debug mount -t debugfs nodev /debug available_tracers zeigt verfügbare Tracer an current_tracer hat aktive Tracer (schreibbar!) trace hat Trace-Output set_ftrace_filter kann Output vorfiltern set_ftrace_notarce unterdrückt Tracer kennt einfache reguläre Ausdrücke: ∗match – match∗ – ∗match∗ Flynn Marquardt Linux II Vorlesung 146 / 209 Tracing Kernel basiert ftrace Events Events erfassen Aktvitität aller Prozesse: events Verzeichnis möglicher Ereignisse events/enable aktiviert alle Ereignisse events/???/enable aktiviert nur Subsystem ??? I I I I I block kvm sched syscalls ldots Flynn Marquardt Linux II Vorlesung 147 / 209 Tracing Kernel basiert ftrace Arbeitsweise Tracing anschalten: echo 1 > tracing_on Programm laufen lassen . . . Tracing ausschalten: echo 0 > tracing_on Trace ansehen: cat trace Flynn Marquardt Linux II Vorlesung 148 / 209 Tracing Kernel basiert ftrace Utilities trace-cmd Kommandozeilen-Tool zum: I I I I I start/stop, automount debugfs schreibt trace-Dateien aus Ringbuffer kann direkt Programm trace (wie strace) aktiviert Filter und Optionen Server/Client Netzwerk-Modus GUI Kernelshark pytimechart GUI zum Visualisieren des Trace-Outputs Flynn Marquardt Linux II Vorlesung 149 / 209 Tracing Kernel basiert dtrace Urspünglich entwickelt für Solaris: Linux-Modul durch Oracle in Entwicklung, noch unvollständig wegen Lizenzproblemen findet Entwicklung außerhalb des Kernels statt Prüfcode kann dynamisch geladen werden Eigene Programmiersprache D für Testprogramme bzw. -skripte Flynn Marquardt Linux II Vorlesung 150 / 209 Tracing Kernel basiert systemtap verwendet kprobes aus dem Linux-Kernel notwendiger Kernelcode wird automatisch erstellt und geladen (potentiell gefährlich) Flynn Marquardt Linux II Vorlesung 151 / 209 Tracing Übung Tracing Ausgangssituation Zwei unterschiedliche Programme sollen mit verschiedenen Methoden analysiert werden: 1 seekmark: sehr I/O-lastiges Programm zur Ermittlung der Zugriffszeit einer Festplatte 2 lzma: sehr CPU-lastiges, asymmetrisches Kompressionsprogramm Getestet werden sollen: strace verschiedene top-Varianten GCC Profiling ftrace Abschliessender Vergleich. Flynn Marquardt Linux II Vorlesung 152 / 209 Tracing Übung Tracing Strace/Top Code seekmark-0.8.c lzma-4.32.7.tar.xz (relevant ist src/lzma runterladen und übersetzen. Testläufe mit und ohne strace: [strace -tt -f -T -o seekmark.trace] seekmark -f /dev/sda [strace -tt -f -T -o lzma.trace] lzma -9 testdata.tar Dabei auch htop, iotop und latencytop starten und beobachten. Lange Calls in der Logdatei ermitteln. Flynn Marquardt Linux II Vorlesung 153 / 209 Tracing Übung Tracing GCC Profiling Programm neu übersetzen mit Option -pg -ggdb -O0 Neuer Testlauf wie vorher Auswertung mit gprof binary gmon.out: I I I Call-graph und Profiling-Informationen –function-ordering –annotated-source Flynn Marquardt Linux II Vorlesung 154 / 209 Tracing Übung Tracing Ftrace Flynn Marquardt Linux II Vorlesung 155 / 209 Tracing Übung Tracing kprobes/uprobes Flynn Marquardt Linux II Vorlesung 156 / 209 Kernel Kernel kompilieren Kernel kompilieren Motivation individuelle Einstellungen (.z.B. Treiberauswahl) Aktivierung ungewöhnlicher Parameter/Features Nutzung extern gewarteter Treiber/Patches Benötigte Werkzeuge: Kernelsourcen C-Kompiler (im Moment nur gcc) Binutils und make Flynn Marquardt Linux II Vorlesung 157 / 209 Kernel Kernel kompilieren Kernel kompilieren Targets make baut Kernel und Module make menuconfig konfiguriert Kernel in der Konsole make xconfig konfiguriert Kernel grafisch make deb-pkg baut komplettes Ddebian Paket make dir/file.ko baut einzelnes Modul make clean räumt Kernel-Sourcen wieder auf make help allgemeine Hilfeanweisungen Flynn Marquardt Linux II Vorlesung 158 / 209 Kernel Kernel kompilieren Kernel kompilieren DKMS Dynamic Kernel Module Support: integriert sich in Paketverwaltung kompiliert externe Module bei Updates vorhandene Module können überschrieben werden entfernt Module wieder beim Löschen des Kernels Benutzung: Module braucht Konfigurationsdatei dkms.conf Anmeldung mit: dkms add -m sony-laptop-zseries -v VERSION Wird in Ubuntu z.B. für die NVIDIA-Treiber genutzt. Flynn Marquardt Linux II Vorlesung 159 / 209 Kernel Kernel kompilieren distcc Um ein schnelleres Übersetzen zu ermöglichen, soll verteiltes Kompilieren mit distcc eingesetzt werden. eigener Rechner dient als Server für Preprocessing und Lastverteilung (Ab Version 3 auch remote Preprocessing möglich) anderer Rechner dienen als Kompilier-Clients über eigenes Netzwerkprotokoll Linken nur auf dem Server alle Rechner sollten die gleiche Revision des Compilers haben, Libraries werden nur auf dem Server benötigt Flynn Marquardt Linux II Vorlesung 160 / 209 Kernel Kernel kompilieren distcc II Installation distcc installieren erlaubte Netze und Listener konfigurieren (192.168.111.xxx), starten Environment Variable DISTCC_HOSTS enthält durch Leerzeichen getrennte Liste der Clients starten entweder über Softlinks (distcc auf gcc) oder über make CC=distcc make wird mit Parameter -j n aufgerufen, wobei n gleich der Anzahl der Clients plus eins sein soll. Flynn Marquardt Linux II Vorlesung 161 / 209 Kernel Kernel kompilieren Modul übersetzen Externe Treiber nicht boot-relevanter Hardware können nachträglich installiert werden: Installation als Modul Sourcen als Archiv oder aus cvs/svn-Repository nur ein Teil der Kernel-Sourcen muss vorhanden sein (Kernel-Header) Versionsnummer muss exakt stimmen (oberstes Makefile): I I I I VERSION: 2 PATCHLEVEL: 6 SUBLEVEL: 2x EXTRAVERSION: xxx Aktuelle Version: cat /proc/version oder uname -r Kernel-Header Pfad anpassen (Standardpfad /usr/src/linux) Übersetzen in der Regel mit make, kein configure! Installieren in der Regel make install Flynn Marquardt Linux II Vorlesung 162 / 209 Kernel Kernel kompilieren Kernel patchen Es werden zwei Patches zur Verfügung gestellt: TuxOnIce (für alle) Undervolt (nur für Besitzer eines Intel Mobil-Prozessors sinnvoll) Vserver Gepatcht wird mit patch-Kommando, wichtige Optionen: -p strip path -d Zielverzeichnis Eventuell müssen Konflikte von Hand gelöst werden. Flynn Marquardt Linux II Vorlesung 163 / 209 Kernel Kernel kompilieren Kernel übersetzen Vanilla Kernel üsersetzen Konfigurieren mit I I I make menuconfig make gconfig make xconfig Übersetzen mit make -j n (n = nCPU + 1 ) Installieren mit make install und make modules_install (bei Verwendung von distcc muss CC=distcc eingefügrt werden) Bootloader I I von Hand mit zusätzlichem Eintrag versehen oder update-Mechanismus der Distribution aufrufen (z.B. Ubuntu/Debian update-grub) Alternative: mit make deb-pkg direkt ein Debian-Paket bauen. Flynn Marquardt Linux II Vorlesung 164 / 209 Kernel Kernel kompilieren TuxOnIce Im Moment zuverlässigste Variante des Suspend to disk Suspend to Ram mit Fallback auf Suspend to Disk möglich Steuerung über Kerneloption resume2=swap:/dev/hdax und hibernate-Skript Starten mit /usr/sbin/hibernate Konfiguration in /etc/hibernate/hibernate.conf I I I I PowerdownMethod 3/4/5 ProcSetting userui_program /usr/sbin/tuxoniceui_fbsplash oder /usr/sbin/tuxoniceui_text tuxonice muss installiert sein, sonst nur rudimentäre Ausgabe andere Optionen je nach Problem Flynn Marquardt Linux II Vorlesung 165 / 209 Kernel Kernel kompilieren Undervolt/PHC Moderne Pentium-M und Core(Duo) Prozessoren laufen oft mit erheblich weniger Core-Spannung als eingestellt. Verlängerung der Batterie-Laufzeit möglich, typisch 20-30% Einträge in /sys/devices/system/cpu/cpu0/cpufreq/voltage_table pro Frequenz, variabel von 700 – 1600mV in 16mV (12mV bei Core) Schritten Beispiel: BIOS: 1308,1228,1048,1068,988 getunt: 1132,1020,908,844,748 langwieriges Ausprobieren zum Ermitteln stabiler Werte notwendig (Skript mit Primzahlenermittlung über mprime) Flynn Marquardt Linux II Vorlesung 166 / 209 Kernel Kernel kompilieren Vserver Kernel übersetzen/installieren Betriebssystem-Virtualisierungsmethode Dateien runterladen von http://www.ba-stuttgart.de/˜marquard/vserver Kernel auspacken: tar xzf linux-2.6.31.tar.gz Revision patchen: zcat patch-2.6.31.5.gz | patch -p1 -d linux-2.6.31 Vserver Patch einspielen: patch -p1 -d linux-2.6.31 < patch-2.6.31.5-vs2.3.0.36.21.diff Verzeichnis wechseln: cd linux-2.6.31 Basiskonfiguration kopieren: cp /boot/config-2.6.xxx .config Konfiguration Konsole: make menuconfig (Debug abschalten!) Konfiguration grafisch: make xconfig oder make gconfig Flynn Marquardt Linux II Vorlesung 167 / 209 Kernel Kernel kompilieren Vserver Kernel übersetzen/installieren Betriebssystem-Virtualisierungsmethode Übersetzen: make oder make -j3 (dauert!) installieren: als root make install modules_install Ramdisk erzeugen unter Debian/Ubuntu: update-initramfs -c -k 2.6.31.5-vs2.3.0.36.21 Bootloader aktualisieren: update-grub Alternative 1: Paket bauen mit make -j3 deb-pkg Alternative 2: fertige Ubuntu-Kernels mit Vserver-Patch herunterladen aus dem Repostory: deb http://ppa.launchpad.net/christoph-lukas/ppa/ubuntu karmic main reboot Flynn Marquardt Linux II Vorlesung 168 / 209 LDAP LDAP LDAP – Übersicht LDAP – Lightweight Directory Access Protocol Netzwerkdienst (Port 389, ldaps Port 636 deprecated), standardisiert in RFCs schneller Verbindungsaufbau einfache Abfragesprache kennt Standardformate, die eingehalten werden können, aber nicht müssen objektorientiertes Datenmodell stark optimiert für das Lesen (Indices) Schreiben kommt deutlich seltener vor bei openldap bis zu 150 Millionen Einträge möglich keine BLOBs Replikation der Serverdaten möglich Lightweight – LDAP ist der kleine Bruder von X.500 (heavyweight) Flynn Marquardt Linux II Vorlesung 169 / 209 LDAP LDAP LDAP – Interne Organisation Organisation in einem hierarchischen Baum, Elemente haben einen dn – distinguished name bestehend u.a. aus dc domain component, kann mehrfach vorkommen, wird immer hinzugefügt, wird beim Start festgelegt. ou organisational unit cn common name Beispiel: cn=Flynn Marquardt,ou=people,dc=flynn,dc=mine,dc=nu Flynn Marquardt Linux II Vorlesung 170 / 209 LDAP LDAP LDAP – Einsatzgebiete Benutzerverwaltung (Ersatz für NIS), d.h. Erweiterung von Datenbank ähnlichen Dateien in /etc über pam: I I I /etc/passwd, /etc/group /etc/printcap /etc/hosts, /etc/ethers, /etc/netgroups, . . . einfache Datenquelle für Server I I I I I I Mailserver, Spamschutz FTP und HTTP-Server DHCP-Server Radius Server Samba Server Druckserver Adress-, Kontakt und Kalenderdatenbank für Emailclients I I I Thunderbird (lesend) Evolution (lesend und schreibend) Outlook (lesend) Flynn Marquardt Linux II Vorlesung 171 / 209 LDAP LDAP LDAP – Probleme LDAP ist keine relationale Datenbank! keine Abfragesprache, vordefinierte Abfragearten (Schema, Attribute, Werte) kein fester Primary Key (=dn), instabile Datenbasis häufiges Schreiben ist problematisch (langsam, keine Transaktion) LDAP kennt keine Locks Schema-Änderungen nicht Teil des Standard-Protokolls meist laxe Schema-Definition (MAY!) Flynn Marquardt Linux II Vorlesung 172 / 209 LDAP LDAP Vordefinierte Schmata Es gibt eine Reihe von vordefinierten Schemas als Basis für eigene Erweiterungen, z.B.: core.schema – Basisdefinitionen inetorgperson.schema – Schema für personengebundene Daten java.schema – serialisierte Java-Objekte corba.schema – serialiseirte Corba-Objekte Erweiterungen, z.B. evolutionperson.schema – Kontaktdatenbank für Email-Client evolution (kann auch für Thunderbird o.ä benutzt werden) mozilla_op20.schema – Kontaktdatenbank für Thunderbird Flynn Marquardt Linux II Vorlesung 173 / 209 LDAP LDAP LDAP – LDIF LDIF – LDAP interchange format Textformat zum Datenaustausch (Import/Export): dn: cn=Flynn Marquardt,ou=people,dc=flynn,dc=mine,dc=nu objectClass: person cn: Flynn Marquardt sn: Marquardt telephoneNumber: 123-5678 userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== Kann z.B. mit ldapadd in den Server eingespielt werden. Es gibt diverse Konverter von und ins ldif-Format. Flynn Marquardt Linux II Vorlesung 174 / 209 LDAP LDAP LDAP – OpenSource Implementationen Es gibt u.a. folgende OS-LDAP-Server: 1 2 OpenLdap, wird im weiteren behandelt Fedora Directory Project, u.a. I I I 3 komplette LDAP basierte Kontrolle (Schemas, Konfiguration, Management) Active directory user/group Synchronsation Web- und Soap-Schnittstelle Apache Directory Server I I I implementiert in Java dynamische Schemas und Konfiguration LDAP Stored Procedures und Trigger Flynn Marquardt Linux II Vorlesung 175 / 209 LDAP LDAP LDAP – OpenLdap Übersicht Server besteht aus slapd eigentlicher LDAP-Server, Konfiguration in /etc/ldap/slapd.conf slurpd Standalone LDAP Update Replication Daemon Kommandzeilen-Tools ldapadd LDIF-Files in einen LDAP-Server einspielen ldapsearch Nach Elementen suchen ldapmodify . . . ldapdelete usw. Flynn Marquardt Linux II Vorlesung 176 / 209 LDAP LDAP LDAP – OpenLdap Clients phpldapadmin Feature-reiche Weboberfläche lam Weboberfläche speziell für Account-Verwaltung (ldap-account-manager) ldaptor Sammlung von LDAP-Werkzeugen und Skripten in Python luma LDAP GUI mit Plugins für wichtige Szenarien Flynn Marquardt Linux II Vorlesung 177 / 209 LDAP LDAP LDAP – OpenLdap Beispiele Suchen eines Eintrags mit ldapsearch: ldapsearch -x -b ’dc=flynnux,dc=de’ -D "cn=admin,dc=flynnux,dc=de" ’(objectclass=*)’ -W ldapsearch -x -b "dc=flynnux,dc=de" -x einfache Passwort-Authentifizierung (statt SASL) -b Suchbasis -D Bind DN (Anmeldename), wenn weggelassen Anonymous -W erfrage Passwort auf dem Prompt Analog hinzufügen eines Eintrags mit ldapadd: ldapadd -x -D "cn=admin,dc=flynnux,dc=de" -W < address.ldif Flynn Marquardt Linux II Vorlesung 178 / 209 LDAP LDAP LDAP – Gemeinsame Accounts Mit LDAP können über das Netzwerk gemeinsam genutzte Account-Databasen erzeugt und gepflegt werden. Grundsätzlich gibt es zwei Ansätze: NSS – Name service Switching (/etc/nsswitch.conf) PAM – plugable authentication modules (/etc/pam.d) Beides sind Erweiterungsmechanismen der Standard C-Library. Konfiguriert werden muss: Schemas, Namespace und Rechte in slapd.conf Mapping in /etc/pam.d oder /etc/nsswitch.conf eventuell das Module pam_ccreds aktivieren, um die Ausfallsicherheit zu erhöhen. Komplizierter wird es noch, falls Samba-Accounts dazukommen, am besten Buch oder HOWTO nehmen. Flynn Marquardt Linux II Vorlesung 179 / 209 LDAP ssh-keys in ldap ssh-Schlüssel im LDAP Schlüsselverteilungs-Problem Bei der Verwaltung von Zugangsberechtigungen über ssh müssen die Schlüssel in allen authorized_keys Dateien geändert Inkonsistenzen Abhilfe: zentrale Schlüsselverwaltung Es gibt ein zentrales Schlüsselrepository auf einem LDAP-Server, nur dort müssen die Schlüssel verwaltet werden und Rechnern zugewiesen werden. Weiteres Problem: entweder: externer Patch ssh-Paket muss selbst neu gebaut werden. oder: Konfiguration des ssh-ldap-helper als AuthorizedKeysCommand (im Moment in Entwicklung, wahrscheinlich in Version 6.2) Flynn Marquardt Linux II Vorlesung 180 / 209 LDAP ssh-keys in ldap ssh-Paket selber bauen Sourcen vorbereiten Da Ubuntu diesen Patch nicht enthält, muss man selbst ein Paket bauen: 1 Paket Sourcen (3 Dateien: diff, dsc, tar) runterladen von http://de2.archive.ubuntu.com/ubuntu/pool/main/o/openssh/ 2 3 Pakete dpkg-dev, devscripts, fakeroot installieren Paket auspacken: dpkg-source -x openssh....dsc 4 in das neu enstandene Verzeichnis wechseln: cd openssh-... 5 den Patch einspielen (eventuelle Konflikte lösen!): patch -p1 < ../openssh-lpk... 6 configure-Optionen ändern in debian/rules: # LDAP support confflags += --with-ldap Flynn Marquardt Linux II Vorlesung 181 / 209 LDAP ssh-keys in ldap ssh-Paket selber bauen Paket bauen und einspielen 7 Versionsnummer hochzählen und Kommentar eintragen: debchange -i 8 Paket bauen dpkg-buildpackage -us -uc -B -rfakeroot 9 Paket einspielen dpkg -i ../openssh...deb 10 LDAP-Schema einspielen 11 ldif-Datei mit einem Account mit ssh-Schlüssel einspielen, Dokumentation in README.lpk 12 testen mit Login-Versuch Flynn Marquardt Linux II Vorlesung 182 / 209 LDAP Übung LDAP LDAP – Kontaktdatenbank einrichten Für Email-Clients wie Evolution oder Thunderbird soll ein LDAP-Server so konfiguriert werden, dass er als gemeinsame Kontaktdatenbank dienen kann. openldap installieren im Server die Erweiterungen für das Person-Schema (evolution-person) bekannt machen den ou=people-Baum erzeugen Rechte auf ou=people Baum vergeben I I alle lesen nur einer schreiben (z.B. cn=ContactManager), eventuell zuerst alle schreiben mit ldapadd einen Kontakt von Hand einpflegen (optional) in Evolution/Thunderbird den LDAP-Server konfigurieren Kontakte aus Evolution/Thunderbird einpflegen LDAP-Server als Quelle für automatisches Ergänzen anmelden Flynn Marquardt Linux II Vorlesung 183 / 209 SSH pam-ssh pam-ssh SingleSignOn für pam und ssh Wiederholte Passworteingabe Passworteingabe beim Login und anschliessend noch einmal zum Entpacken des ssh-Private-Keys Abhilfe: pam-ssh Beim Einloggen wird mit Hilfe des Passwortes versucht, einen oder mehrere ssh-Private-Keys auszupacken und damit einen ssh-Agent zu füttern Login-Passwort und ssh-Passphrase müssen gleich sein Konflikte mit anderen Key-Managern, z.B. gnome (nur einen Mechanismus benutzen!) keine anderes Programm darf einen ssh-Agent starten sehr nützlich im Zusammenhang mit Agent-Forwarding (Achtung: Sicherheitsrisiko auf dem remote-Rechner!) Inzwischen obsolet: ersetzt durch Key-Manager der Oberfläche Flynn Marquardt Linux II Vorlesung 184 / 209 SSH pam-ssh ssh: Client Konfiguration In $HOME/.ssh/config kann global oder host-spezifisch u.a. konfiguriert werden: User abweichender Default User Port abweichender Default Port LocalForward Port-Forwarding(s) für diesen DynamicForward TCP-Port, damit ssh als Socks4/5-Server agiert ForwardAgent Agent Forwarding für diesen Host CheckHostIP für Hosts mit dynamischer IP, wird nicht gespeichert (=no) Compression Festlegen der Kompression ControlMaster/ControlPath Mehrfach Benutzung der Verbindung zum gleichen Host StrictHostKeyChecking kein Login ohne angenommenen Schlüssel VerifyHostKeyDNS Fingerprint im DNS suchen und prüfen (SSHFP-Record) ProxyCommand Konfiguration fürs Durchloggen z.B. ssh -q proxyhost nc -q0 targethost 22 Flynn Marquardt Linux II Vorlesung 185 / 209 SSH pam-ssh ssh: Client Konfiguration Beispiel Host * StrictHostKeyChecking no Compression yes # ForwardX11 yes ServerAliveInterval 300 VerifyHostKeyDNS yes ControlMaster auto ControlPath ~/.ssh/tmp/%r@%h:%p Host bla User root ProxyCommand ssh -q blabla nc -q0 bla 22 LocalForward 1234 192.168.10.1:80 Flynn Marquardt Linux II Vorlesung 186 / 209 SSH Opie unter ssh Onetime Passworte mit ssh opie Keylogger-Problem Fremde Rechner, die benutzt werden um sich auf eigenen Server einzuloggen, kann man durch Keylogger Passwörter abhören. Abhilfe: OTP (RFC 2289) Verwendung von Einmal-Passwörtern (One-Time-Passwords). Opensource-Implementierung opie integriert sich über PAM in den Login-Vorgang andere Login-Methoden bleiben erhalten Einmal Passwörter sind als „Pseudosatz“ gut eingebbar Beispiel: HILL ELK AMOK NOOK CITY FIRM Clients für Mobiltelefone erzeugen die Passwörter (z.B. opiekey für android, J2ME Implementation), keine Offline-Listen Flynn Marquardt Linux II Vorlesung 187 / 209 SSH Opie unter ssh Opie in ssh integrieren Es sollen Einmal-Passwörter bei ssh-Logins verwendet können. Opie installieren (Pakete opie-client und opie-server) Opie in ssh-pam aufnehmen: die Zeile „@include common-auth“ ersetzen durch: auth sufficient pam_unix.so auth sufficient pam_opie.so auth required pam_deny.so Challenge-Response-Verfahren in ssh aktivieren Einmal-Passwörter initialisieren: opiepasswd -c Mit „opiekey seq seed“ kann ein passendes Passwort errechnet werden: num Nummer des angeforderten Passwortes (Challenge) seed Sogenanntes Seed (crypt salt) gegen Wörterbuchattacken password wird abgefragt während der Generierung jotp.jar oder opiekey auf Mobiltelefon installieren und testen Weitere Clients unter www.inner.net/pub/opie/contrib/ Flynn Marquardt Linux II Vorlesung 188 / 209 SSH libpam-barada HOTP two-factor authentication Barada HOTP HMAC-based one-time-password HMAC: hash-based message authentication code I I kryptografische Hash Funktion und geheimer Schlüssel Standardisiert: RFC 4226 pam-barada ist eine Opensource-Implementation: pam-Bibliothek (einsetzbar für verschiedene Loginarten) barada-add: Kommandozeilentool zum Erzeugen einer Benutzer-spezifischen Schlüssels Android App zur Token Generierung dynalogin ist eine weitere Opensource-Implementation: Server basiert pam-Modul für Logins Code Beispiel für verschiedene Programmiersprachen Flynn Marquardt Linux II Vorlesung 189 / 209 SSH libpam-barada ssh – Tools scponly restriktive Shell: erlaubt nur scp-spezifische Befehle (ls, cp, mv. . . ) gibt es auch als chroot-Version (scponlyc), sicherer aber schwieriger aufzusetzen sshfs FUSE-Dateisystem um mit ssh/scp entfernte Dateisysteme einzubinden: sshfs user@host:/remote-dir local-dir Achtung: beim Editieren von Dateien werden eventuell die Besitzer der Dateien geändert! Smartcards Schlüssel können auf Smartcards abgelegt werden (nicht aktiviert in aktuellen Distributionen) TPM prinzipiell könnte Schlüssel in einem TPM-Modul erzeugt/abgelegt werden, braucht openssl-Patch Flynn Marquardt Linux II Vorlesung 190 / 209 SSH libpam-barada ssh – Einzelkommandos/Pipes ssh ohne Option startet immer eine Shell mit Option wird nur diese eine Kommando ausgeführt, z.B.: ssh user@host watch df / Keine Login-Shell, kein Terminal (eventuell Option -t benutzen) Benutzung auch einer Pipe möglich. Beispiel: Kopie eines Verzeichnisse mit tar: tar cf - . | ssh user@host tar xpf - Flynn Marquardt Linux II Vorlesung 191 / 209 SSH libpam-barada scponly einrichten 1 scponly einrichten: I I I I 2 Paket installieren separaten Benutzer anlegen Shell auf scponly ändern testen scponlyc einrichten: I I zusätzlich die chroot-Umgebung einrichten mit setup_chroot.sh Shell auf scponlyc ändern Flynn Marquardt Linux II Vorlesung 192 / 209 SSH libpam-barada sftp Server Alernative zu scponly: 1 echter sftp-Server (nicht ftps!) 2 Ein-Port-Protokoll 3 chroot möglich und sinnvoll 4 ersetzt die „Shell“ 5 Konfiguration in /etc/ssh/sshd_config: Match user blabla ForceCommand internal-sftp ChrootDirectory /home/blabla/chroot Flynn Marquardt Linux II Vorlesung 193 / 209 udev Weitere (Pam-)Module pam_usb Einloggen mit Hilfe eines USB-Sticks, Screensaver starten beim abziehen. dev_perm Ändern von Rechten auf Geräte beim Einloggen pam_mount Automatisch Verzeichnisse beim Einloggen mounten bluemon Starten/Stoppen von Programmen in Abhängigkeit von der Sendstärke eines Bluetooth Gerätes Flynn Marquardt Linux II Vorlesung 194 / 209 udev udev – Management der Geräte udev tritt bei jeder Veränderung der Hardware in Aktion: beim Booten beim Einstecken/Entfernen von Hardware Dabei werden Ereignisse auf jeder Protokoll-Ebene erzeugt, z.B. Einstecken eines USB-Sticks: 1 Erkennung und Identifikation eines neuen USB-Gerätes 2 Aktivierung des entsprechenden USB-Stacks (usb-storage) 3 neue SCSI-Festplatte 4 neues Block-Gerät 5 neue Partition(en) Flynn Marquardt Linux II Vorlesung 195 / 209 udev udev Konfiguration Dateien im Verzeichnis /etc/udev/rules.d Parameter (Argumente können reguläre Ausdrücke sein): ACTION add/remove SUBSYSTEM usb/pci/block/. . . KERNEL Matchen eines kernel-internen Gerätenamens (sda usw.) SYMLINK Erzeugung eines symbolischen Links in /dev (dazu gehören auch MODE, GROUP) RUN Starten eines Prozesses ENV{xxx} Matchen einer Environment-Variable SYSFS{xxx} Matchen einer ID aus /sys Änderungen werden automatisch oder durch udevcontrol reload_rules aktiviert. Flynn Marquardt Linux II Vorlesung 196 / 209 udev udev Programme udevmonitor Monitor für alle Ereignisse Option –environment bringt zusätzliche Variablen/IDs Wichtig zum Auffinden passender Ereignisse und IDs udevinfo Abfragen von Namen/Pfaden und Variablen für ein vorhandenes Gerät, z.B. udevinfo –query=path –name=/dev/ttyS1 udevtest Auslösen eines Events (name von udevinfo!), z.B. udevtest /class/sound/dsp Aufgabe: Erzeugung eines eigenen symbolischen Links für eine USB-Gerät der Wahl. Flynn Marquardt Linux II Vorlesung 197 / 209 Sicherheit chroot Einfachstes und ältestest Sicherheitskonzept: Aufruf: chroot Verzeichnis Befehl Optionen sperrt den Prozess in ein eigenes Verzeichnis alle notwendigen Dateien (C-Library, Binaries, . . . ) müssen dort zusätzlich vorhanden sein Upateproblematik der chroot-Umgebung Aufsetzen des minimalen chroot-Verzeichnisses nicht immer einfach Einsatzgebiete: I I I I scponlyc ftp-Server Cross-Compiler 32/64-Bit auf nicht multilib-fähigen Systemen Konfigurationsoption bei einigen Servern (openssh, . . . ) Ausbruch unter Linux/Solaris möglich, bei FreeBSD nicht Flynn Marquardt Linux II Vorlesung 198 / 209 Sicherheit Mandatory Access Control (MAC) Sehr allgemeines Sicherheitskonzept: kein direkte Bindung an Benutzer oder Prozesse jedes verwaltete Objekt/Resource bekommt ein Label vertikale Sicherheitsstufen, z.B: I I I I streng geheim geheim vertraulich öffentlich horizontale Einteilung nach Objekten und Resourcen Benutzer bekommen Zugriff oder Codewörter für vertikale und horizontale Sicherheitsstufen Zugriff wir gewährt, wenn beide Rechte vorhanden sind Flynn Marquardt Linux II Vorlesung 199 / 209 Sicherheit Discretionary Access Control (DAC) Direkte Zuordnung der Rechte zwischen Benutzer Prozesse Programme und Objekten Resourcen Klassisches Instrument sind Access-Control-Lists. Flynn Marquardt Linux II Vorlesung 200 / 209 Sicherheit Role Based Access Control (RBAC) Rollenbasierte Zugriffskontrolle: Benutzer bestitzt eine oder mehrere Rollen (Webmaster, Postmaster, . . . ) an eine Rolle sind eine oder mehrere Gruppenzugehörigkeiten gebunden Zugehörigkeit zu einer Gruppe gewährt Zugang zu einer Resource Die Zuordnung zwischen Benutzern, Rollen und Gruppen wird netzwerkweit mit Identitätsmanagementsystemen verwaltet.Das setuid-Bit unter UNIX ist eine sehr primitive Form des RBAC. Flynn Marquardt Linux II Vorlesung 201 / 209 Sicherheit Linux Security Modules Framework/Middleware des Kernels: Grundlage der Implementierung verschiedener Zugriffskontrollsysteme Realisierung über Einfügen/Vorschalten von system-call-Hooks nur Kontrolle/Verrringerung der Rechte möglich, keine Erweiterung Realisierung einer Zugriffskontrolle über nachladbare Kernelmodule kein Auditing Kann missbraucht oder umgewidmet werden: I I I Umgehung der GPL-Lizensierung Implementierung von rootkits Einklinken von Virenscannern in den Kernel Flynn Marquardt Linux II Vorlesung 202 / 209 Sicherheit SE-Linux nutzt LSM (LSM wurde für SE-Linux abstrahiert) braucht Dateisystem mit erweiterten Attributen (kein NFS) entwickelt und gesponsert seit 2000 von der NSA, im Kernel seit 2003 gilt als sehr kompliziert und aufwendig strikte Trennung zwischen I I I Policy Umsetzung Interface Kontrolle von I I I Prozess-Start und -Ausführung Dateisysteme, Verzeichnisse und (offene) Dateien alle Arten von Netzwerkinterfaces kann für MAC, DAC als auch RBAC konfiguriert werden Flynn Marquardt Linux II Vorlesung 203 / 209 Sicherheit SE-Linux Policy müssen mit make in binäre Form kompiliert werden: I I I I make make make make policy kompiliert die Policy install kompilieren und installieren, aber nicht laden (re)load installieren und laden der Policy relabel labelt das Dateisystem neu haben verschiedene Abschnitte: I I I I I I Attribute (attrib.te) Normale User (user.te, user_macros.te) Admin-User (admin_macros.te) File-Contexte Typen (device.te, devpts.te, file.te, network.te, nfs.te, procfs.te, security.te) Macros (core_macros.te, global_macros.te) Flynn Marquardt Linux II Vorlesung 204 / 209 Sicherheit SE-Linux Beispiel: Benutzung von tcpdump domain_auto_trans(userdomain, netutils_exec_t, netutils_t) in_user_role(netutils_t) allow netutils_t user:chr_file rw_file_perms; 1 erlaube den Wechsel vom normalem Benutzer zur Domain der Netutils, zu der auch tcpdump gehört 2 sichert, das jede Kombination von Benutzer und netutils-Domain zu einem erlaubten Zugriff führt 3 erlaubt der netutils Domain normale Dateien und ptys zu schreiben Entnommen aus dem SE-Linux HowTo. Flynn Marquardt Linux II Vorlesung 205 / 209 Sicherheit App-Armor nutzt LSM Dateinamen-basierte Kontrolle, keine Attribute notwendig gilt als einfacher zu handhaben, mehr UNIX-like (siehe folgendes Beispiel) zuerst in Immunix 1998–2003, 2005–2007 gesponsert von Novell, im Moment ohne Sponsering Aufnahme in den Kernel wegen schwerer Designmängel abgelehnt I I Dateinamen sind keine zuverlässige Grundlage für ein Sicherheitssystem (sehr wohl aber die Inodes einer konkreten Datei) Dateinamen-Matching im Kernel notwendig, kostet run-time Performance Verwendet u.a. in folgenden Distributionen I I (Open)Suse Ubuntu Flynn Marquardt Linux II Vorlesung 206 / 209 Sicherheit App-Armor Beispiel: Schutz des Network Time Daemons ntpd /usr/sbin/ntpd { #include <abstractions/base> #include <abstractions/nameservice> #include <program-chunks/ntpd> capability ipc_lock, capability net_bind_service, capability sys_time, capability sys_chroot, capability setuid, /etc/ntp.conf r, /etc/ntp/drift* rwl, /etc/ntp/keys r, /etc/ntp/step-tickers r, /tmp/ntp* rwl, /usr/sbin/ntpd rix, /var/log/ntp w, /var/log/ntp.log w, /var/run/ntpd.pid w, /var/lib/ntp/drift rwl, /var/lib/ntp/drift.TEMP rwl, /var/lib/ntp/var/run/ntp/ntpd.pid w, /var/lib/ntp/drift/ntp.drift r, /drift/ntp.drift.TEMP rwl, /drift/ntp.drift rwl, } Flynn Marquardt Linux II Vorlesung 207 / 209 Sicherheit SMACK Simplified Mandatory Access Control Kernel nutzt LSM braucht erweiterte Attribute im Filesystem braucht modifizierte GNU Core Utilities zur Verwaltung im Kernel seit 2.6.25 Terminologie: I I I I Subject: aktive Einheit, i.d.R der Prozess Object: passive Einheit, alle Arten von Dateien, IPC, andere Prozesse ... Access: Information holen oder ablegen Label: Marke, um Zugriffsschutz realisieren zu können Flynn Marquardt Linux II Vorlesung 208 / 209 Sicherheit grsecurity Kernelpatch mit verschiedenen sicherheitsrelevanten Funktionen PAX: Schutz gegen Bufferoverflows und anderer Speicherlecks RBAC: Access-Control-Lists ohne LSM-Bnutzung Auditing: chdir, (u)mount, IPC, Signale, Failed fork, time change Verschiedene Zusätze: I I I I I reduziertes /proc-Verzeichnis gehärtetes chroot-Kommando dmesg-Restriktionen automatisierte Erkennung von bruteforce-Attacken ... Flynn Marquardt Linux II Vorlesung 209 / 209