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