[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ]

Kapitel 9


Anzahl der Absätze: 582

Project-Id-Version: 0 POT-Creation-Date: 2012-05-09T20:00:19 PO-Revision-Date: 2012-05-09T20:00:19 Last-Translator: Automatically generated Language-Team: None MIME-Version: 1.0 Content-Type: application/x-publican; charset=UTF-8 Content-Transfer-Encoding: 8bit


Systemstart


Initscripte


SSH


Telnet


Rechte


Berechtigungen


Aufsicht


Inetd


Cron


Backup


Hotplug


PCMCIA


APM


ACPI


Unix Services


In diesem Kapitel werden eine Reihe von grundlegenden Diensten behandelt, die für die meisten UNIX-Betriebssysteme gelten. Alle Administratoren sollten mit ihnen vertraut sein.


System-Start


Bootendas System


Die vielen Informationen, die auf der Konsole vorbei scrollen, wenn Sie den PC hochfahren, zeigen viele automatische Initialisierungen und Einstellungen, welche ausgeführt werden. Manchmal werden Sie sich wünschen den Ablauf dieses Abschnittes geringfügig zu ändern, deshalb ist es wichtig, ihn gut zu verstehen. Das ist der Zweck dieses Abschnittes.


Zunächst übernimmt das BIOS die Kontrolle über den Rechner, ermittelt die Festspeicher, lädt den Master Boot Record und führt den Boot-Loader aus. Der Boot-Loader übernimmt, ermittel den Kernel im Festspeicher, lädt ihn und führt ihn aus. Der Kernel wird dann initialisiert und beginnt damit, nach der Partition, die das Wurzel-Dateisystem enthält, zu suchen und sie dann einzuhängen, und führt schließlich das erste Programm aus – init. Häufig befinden sich diese "root-Partition" und dieser init-Befehl tatsächlich in einem virtuellen Dateisystem, das nur im Arbeitsspeicher existiert (daher sein Name "initramfs", ehemals "initrd" genannt für englisch "initialization RAM disk"). Dieses Dateisystem wird vom Boot-Loader in den Speicher geladen, häufig aus einer Datei auf der Festplatte oder aus dem Netzwerk. Es enthält das absolute Minimum dessen, was vom Kernel benötigt wird, um das "wirkliche" root-Dateisystem zu laden: dies können Treiber-Module für die Festplatte oder andere Geräte sein, ohne die das System nicht hochfahren kann, oder häufiger Initialisierungs-Skripte und -Module zum Aufbau von RAID-Arrays, zum Öffnen verschlüsselter Partitionen, zum Aktivierung von LVM-Volumes usw. Sobald die root-Partition eingehängt ist, übergibt initramfs die Kontrolle an das wirkliche init, und der Rechner kehrt zum Standard-Bootprozess zurück.


SPEZIFISCHER FALL Vom Netzwerk booten


In einigen Konfigurationen kann das BIOS so konfiguriert sein, dass es nicht den MBR ausführt, sondern ein Booten über das Netzwerk ermöglicht. Dies macht es Möglich Computer ohne Festplatte zu bauen, oder diese bei jedem Neustart komplett neu zu installieren. Diese Option ist aber nicht mit jeder Hardware möglich und benötigt eine passende Kombination von BIOS und Netzwerkkarte.


Netzwerkboot kann genutzt werden um den debian-installer oder die FAI zu starten siehe (see )


ZURÜCK ZU DEN GRUNDLAGEN Der Prozess, eine Programm Instanz


Prozess


Ein Prozess ist die Darstellung eines laufenden Programms im Speicher. Er enthält alle Informationen, die für die ordnungsgemäße Ausführung der Software erforderlich sind (den Code selbst, aber auch alle Daten, die es im Speicher hält, die Liste der Dateien, die es geöffnet hat, die Netzwerkverbindungen, die es eingerichtet hat usw.). Ein einzelnes Programm kann in mehrere Prozesse instanziiert sein, die nicht notwendigerweise unter unterschiedlichen Benutzerkennungen laufen.


Init führt mehrere Prozesse aus der Datei /etc/inittab aus. Das erste Programm welches ausgeführt wird ( und zum sysinit Schritt gehört) ist /etc/init.d/rcS, ein Script welches alle weiteren Programme aus dem Ordner /etc/rcS.d/ ausführt. /etc/init.d/rcS rcS /etc/init.d/rcS.d/ rcS.d


Unter diesen werden sie die zuständigen Programme finden


Einstellen der Tastaturbelegung in der Konsole;


Treiber laden: die meisten Kernelmodule werden durch den Kernel selbst geladen, wenn die Hadware erkannt wird. Zusätsliche Treiber werden dann automatisch geladen wenn die entsprechenden Module in /etc/modules aufgeführt werden.


Überprüfung der Ganzheit des Dateisystems;


Einhängen lokaler Partitionen;


das Netzwerk konfigurieren;


Einhängen von Netzwerkdateisystemen (NFS).


Sicherheit Eine Shell als init auszuführen ermöglicht das erlangen von Root-Rechten.


Gemäß der Konvention ist der erste Prozess, der gestartet wird, der init -Prozess. Es ist jedoch möglich, eine init Option an den Kernel zu übergeben um ein anderes Programm zuerst zu starten.


init


Jede Person welche direkten Zugang zum Computer hat kann mit einen drücken des Reset-Buttons den Computer Neuzustarten. Nach dem Neustart ist es möglich über den Bootloader dem Kererl eine Option init=/bin/sh zu übergeben um Root-Rechte ohne Wissen des Administrator Passworts zu erreichen.


Um dieses zu verhindern, können Sie den Bootloader selbst mit einem Passwort absichern. Darüber hinaus sollten Sie darüber Nachdenken das BIOS selbst mit einem Passwort abzusichern. Ohne dieses Absicherung kann ein Angreifer den Computer von einem Wechseldatenträger starten, um von diesem auf die Daten des lokalen Datenträgers zuzugreifen.


Schliesslich sollten Sie beachten, dass die meisten BIOS über ein generisches Passwort verfügen. Ursprünglich als Behelf gedacht für den Fall dass ein Passwort vergessen wurde, sind die meisten dieser Passwörter mittlerweile öffentlich und im Internet verfügbar (Such-String "generic BIOS passwords" in einer Suchmaschine). Mithin können alle diese Sicherheitsvorkehrungen unbefugten Zugriff erschweren, ohne ihn jedoch vollständig zu verhindern. Es existiert kein sicheres Mittel einen Computer zu schützen falls der Angreifer physischen Zugriff auf die Maschine hat. Die Festplatte könnte ausgebaut und an einen Computer unter Kontrolle des Angreifers angeschlossen werden, oder die ganze Maschine könnte gestohlen werden, oder der RAM-Speicher des BIOS könnte gelöscht werden, um das Passwort zurückzusetzen etc.


ZURÜCK ZU DEN GRUNDLAGEN Kernel Module und Optionen


ModuleKernel Module


Kernel Module besitzen Optionen welche über das Erstellen von Konfigurationsdateien im Ordner /etc/modprobe.d/ konfiguriert werden können. Diese Optionen werden durch das Schreiben von Richtlinien in der Form: options module-name option-name=option-value definiert. Mehrere Optionen können mit dem Definieren einer Richtlinie gesetzt werden, wenn nötig.


Die Konfigurationsdateien sind für das Programm modprobe vorgesehen, welches Kernelmodule samt deren Abhängigkeiten lädt (Module können andere Module aufrufen). Dieses Programm wird durch das Paket module-init-tools zur Verfügung gestellt.


Modprobe


module-init-tools


Nach dieser Phase übernimmt der init-Prozess die Kontrolle und startet die im Standard-Runlevel (üblicherweise Runlevel 2) aktivierten Programme. Er führt das Skript /etc/init.d/rc 2 aus, welches alle in /etc/rc2.d/ aufgelisteten Dienst ausführt, deren Name mit dem Buchstaben "S" beginnt. Die zweiziffrige Zahl, welche darauf folgt, wurde definierte ursprünglich die Startreihenfolge dieser Dienste. In Squeeze benutzt das Standard-Bootsystem jedoch insserv, welches die Skripts automatisch aufgrund der wechselseitigen Abhängigkeiten startet. Jedes Bootskript deklariert selber die Bedingungen, welche erfüllt sein müssen, damit es seinen Dienst starten oder stoppen kann (bspw. ob er vor oder nach einem anderen Dienst gestartet werden muss). Der init-Prozess ruft die Bootskripts in der Reihenfolge auf, welche all diese Bedingungen erfüllt. Die statische Nummerierung der Skripts wird demnach nicht mehr länger beachtet. Jedoch muss der Name stets noch mit "S" beginnen, gefolgt von zwei Ziffern und dem eigentlichen Namen des zugehörigen Skripts, in welchem die Abhängigkeiten notiert sind. Allgemein werden Basisdienste wie Logging (rsyslog) oder Port-Zuweisungen (portmap) zuerst gestartet, gefolgt von Standarddiensten sowie der graphischen Oberfläche (gdm).


Dieses abhängigkeitsbasierte Bootsystem erlaubt automatisierte Neuordnen, was von Hand recht mühsam wäre. Damit wird das Fehlerrisiko verringert, weil die Einteilung gemäss der angegebenen Parameter vollzogen wird. Ein weiterer Vorteil ist, dass unabhängig Dienste parallel gestartet werden können. Damit kann der Bootprozess beschleunigt werden.


AlternativeAndere Boot-Systeme


In diesem Buch hier wird das Bootsystem beschrieben, welches als Standard in Debian verwendet wird. Es wird durch das Paket sysvinit implementiert, welches u.a. vom System V Unix Bootsystem abstammt.


In der Originalversion von System V und in den Debian-Versionen bis und mit Lenny war die Reihenfolge der Startskripts allein durch die Namen der symbolischen Links /etc/rc*.d/S* (sowie /etc/rc*.d/K* beim Shutdown) festgelegt. Dieses Verhalten kann durch Setzen von CONCURRENCY=none in der Datei /etc/default/rcS erzwungen werden.


file-rc ist ein weiteres Bootsystem, welches einem einfachen Prozedere gehorcht. Es behält das Prinzip der Runlevel bei, ersetzt jedoch die Verzeichnisse und symbolischen Links durch eine Konfigurationsdatei, die init die Prozesse, die gestartet werden müssen und ihre Reihenfolge bekannt macht.


Das neu erschienene upstart-System ist auf Debian noch nicht vollständig erprobt. Es arbeitet ereignisbasiert: Skripts werden nicht länger in einer bestimmten Reihenfolge abgearbeitet, sondern in Reaktion auf Ereignisse wie bspw. dem Abschluss eines anderen Skripts, von welchem sie abhängen. Dieses System, welches durch Ubuntu initiiert wurde, ist auf Debian Squeeze verfügbar, stellt jedoch nicht den Standard dar. Es verspricht, sysvinit abzulösen. In der Tat ist eine der Aufgaben, welche von upstart übernommen werden, die Skripts von traditionellen Bootsystemen zu starten, insbesondere derjenigen des sysv-rc-Pakets.


Eine weitere Option ist systemd, welchem allerdings noch die Reife fehlt, um Teil von Squeeze zu sein. Sein Zugang steht demjenigen der vorangehenden Bootsysteme diametral entgegen. Anstatt nämlich vorgängig alle Dienste zu starten, und sich dabei um die Fragen der Reihenfolge kümmern zu müssen, startet systemd Dienste nach Bedarf, ähnlich dem Prinzip von inetd. Dies bedingt jedoch, dass das Bootsystem weiss, wie die Dienste verfügbar gemacht werden (dies könnte über einen Socket geschehen, über ein Dateisystem etc.). Deswegen sind kleine Änderungen an den Diensten nötig.


Es existieren noch weitere Bootsysteme und Betriebsarten wie runit, minit, oder initng, jedoch sind diese ziemlich spezialisiert und nicht weit verbreitet.


runlevel


level, runlevel


init unterschiedet zwischen verschiedenen Runlevels, damit es mit dem Befehl telinit new-level von einem zum anderen wechseln kann. init führt dabei sofort /etc/init.d/rc zusammen mit dem neuen Runlevel aus. Dieses Skript startet daraufhin allenfalls fehlende Dienste und stoppt überflüssige. Hierbe bezieht es sich auf den Inhalt von /etc/rcX.d (wobei X den neuen Runlevel bezeichnet). Skripts, deren Name mit „S“ beginnt (wie in “Start”) verweisen auf zu startende Dienste, mit „K“ beginnende (wie in “Kill”) auf zu stoppende. Das Skript startet keinen Dienst erneut, welcher schon im vorangehenden Runlevel aktiv war.


In der Standardeinstellung nutzt Debian 4 unterschiedliche Runlevels:


Level 0 wird nur temporär beim Herunterfahren des Computers benutzt. Dementsprechend enthält es nur "K" Skripte.


Level 1, auch Single-User Modus genannt, entspricht dem System in rudimentärem Zustand. Er umfasst einzig grundlegende Dienste und ist hauptsächlich für den Systemunterhalt gedacht, wo Interaktionen mit normalen Benutzern ohnehin nicht erwünscht sind.


Level 2 ist der normale Operationsmodus, welcher Netzwerkdienste, eine graphische Oberfläche, Benutzerlogins etc. umfasst.


Level 6 gleicht Level 0 mit der Ausnahme, das er während der Phase des Herunterfahrens vor einem Neustart verwendet wird


Es existieren weitere Runlevel, insbesondere 3 bis 5. Standardmässig sind sie derart konfiguriert, dass sie sich wie Level 2 verhalten. Jedoch können Sie durch den Administrator auf spezielle Bedürfnisse angepasst werden, indem Dateien in den Verzeichnissen /etc/rcX.d hinzugefügt oder gelöscht werden.


Boot-Sequenz eines Computers, auf dem Linux läuft.


Initalisierungs Script


Alle Skripts in den verschiedenen /etc/rcX.d-Verzeichnissen sind in der Tat symbolische Links, welche bei der Paketinstallation durch das Programm update-rc.d erzeugt werden. Sie verweisen auf die eigentlichen Skripts, welche in /etc/init.d/ liegen. Der Administrator kann die pro Runlevel verfügbaren Dienste durch erneuten Aufruf von update-rc.d mit angepassten Parametern einstellen. Die update-rc.d1 Manualseite beschreibt die Syntax detailliert. Man beachte, dass das Löschen aller symbolischer Links (Parameter remove parameter) keine gute Methode ist, um einen Service auszuschalten. Stattdesssen sollte man den Dienst einfach derart konfigurieren, dass er im gewünschten Runlevel nicht startet (wobei man die zugehörigen Stoppaufrufe beibehält für den Fall dass der Dienst im vorangegangenen Runlevel lief). Da der update-rc.d-Befehl eine etwas eigentümliche Bedienung aufweist, zieht man möglicherweise rcconf (aus dem Paket rcconf) vor, welches ein wenig benutzerfreundlicher ist.


update-rc.d


Debian Grundregel Neustart Dienste


invoke-rc.d


servicerestart


Neustart von Diensten


Die Unterhaltsskripts einiger Debian-Pakete starten manchmal einige Dienste, um deren Verfügbarkeit sicherzustellen, oder um ihnen gewisse Optionen mitzugeben. Der Befehl, welcher einen Dienst kontrolliert, /etc/init.d/service operation, orientiert sich jedoch nicht an den Runlevels. Er nimmt (fälschlicherweise) stets an, der Dienst werde aktuell verwendet, und kann deswegen unsachgemäss handeln (bspw. einen Dienst starten, welcher ausdrücklich gestoppt war, oder einen Dienst stoppen, welcher bereits schon gestoppt war etc.). Debian führte deswegen das Programm invoke-rc.d ein. Dieses muss von den Unterhaltsskripts verwendet werden, um Initialisierungsskripts von Diensten aufzurufen, und es führt hierbei nur die notwendigen Befehle aus. Man beachte, dass entgegen allgemeinem Gebrauch die Endung .d hier in einem Programmnamen verwendet wird, nicht in einem Verzeichnisnamen.


Schliesslich startet init Kontrollprogramme für verschiedene virtuelle Konsolen (getty). Es zeigt stets einen Prompt an, wartet auf einen Benutzernamen und führt anschliessend login user aus, um eine Sitzung zu initiieren.


getty


Vokabular Konsole und Terminal


Die ersten Computer wurden in der Regel in mehrere, sehr große Teile unterteilt: das Speichergehäuse und die zentrale Verarbeitungseinheit wurden getrennt von den Peripheriegeräten von den Betreibern verwendet werden, um sie zu steuern. Diese waren Teil der separaten Eingabeperipherie, die "Konsole". Dieser Begriff wurde beibehalten, aber ihre Bedeutung hat sich verändert. Es wurde mehr oder weniger ein Synonym zu "Terminal", das eine Tastatur und einen Bildschirm beinhaltet.


Mit der Entwicklung von Computern, haben Betriebssysteme mehrere virtuelle Konsolen angeboten, um mehrere unabhängige Sitzungen zur gleichen Zeit zu ermöglichen, auch wenn nur eine Tastatur und Bildschirm vorhanden sind. Die meisten GNU / Linux-Systeme bieten sechs virtuelle Konsolen (im Textmodus), sie sind zugänglich, indem Sie die Tastenkombination Control Alt F1 bis Control Alt F6 drücken.


Durch die Erweiterung können sich die Begriffe "Konsole" und "Terminal" auch auf einen Terminal-Emulator in einer grafischen X11-Sitzung (z. B. xterm , gnome-terminal oder beziehen konsole ) beziehen.


Fernlogin


Es ist wesentlich für ein Administrator in der Lage zu sein sich mit einem Computer in der Ferne zu verbinden. Server, in einem Serverraum, werden nur selten mit Tastaturen und Monitoren ausgestattet - aber sie sind mit dem Netzwerk verbunden.


ZURÜCK ZU DEN GRUNDLAGEN Client, Server


Client/Server Architektur


ServerClient/Server Architektur


Ein System, in denen mehrere Prozesse miteinander kommunizieren wird häufig als "Client / Server" beschrieben. Der Server ist das Programm, welcher die Anfragen von einem Client entgegen nimmt und sie ausführt. Der Client steuert die Operationen des Servers, so dass der Server keine Eigeninitiative übernimmt.


Anmelden Entfernte Anmeldung


Entfernte Anmeldung


Entfernte Anmeldung: telnet


telnet


Das telnet Protokoll, welches den ältesten Remote-Login-Dienst darstellt, ist das Schlimmste in Sachen Sicherheit. Daten und Passwörter werden im Klartext gesendet - das heißt, nicht verschlüsselt - so dass sie anfällig für das Abhören von Netzwerkverkehr sind. Wenn nötig, kümmern Sie sich darum diesen veralteten Dienst, welcher nicht mehr standardmäßig installiert ist zu entfernen:


# apt-get remove telnetd


Es gibt jedoch eine Anpassung, die die meisten Mängel korrigiert, es wird SSL (Secure Socket Layer) verwendet um die Partner zu authentifizieren und die Kommunikation zu verschlüsseln. Die telnetd-ssl und telnet-ssl -Pakete bieten jeweils die Server-und Client-Software.


telnet-ssl


telnetd-ssl


Vokabular Authentifizierung, Verschlüsselung


Wenn ein Client die Fähigkeit benötigt, auf dem Server Aktionen auszuführen, ist die Sicherheit sehr wichtig. Sie müssen die Identität des Clients, durch Authentifizierung sicherstellen. Diese Identität besteht üblicherweise aus einem Passwort, das geheim gehalten werden muss, sodass kein anderer Client an das Passwort kommen kann. Dies ist der Zweck der Verschlüsselung, welche eine Form der Kodierung darstellt, die es beiden Systemen ermöglicht vertrauliche Informationen über einen öffentlichen Kanal auszutauschen und dabei sicherstellt das die Daten in nicht lesbarer Form übertragen werden, um nicht von Fremden mitgelesen werden zu können.


Authentifizierung und Verschlüsselung werden oft zusammen genannt, weil sie beide oft zusammen verwendet werden, und weil sie meist mit ähnlichen mathematischen Konzepten umgesetzt werden.


Sichere Fern-Anmeldung: SSH


SSH


Secured Shell


Das SSH (Secured Shell)-Protokoll wurde im Gegensatz zu telnet mit Sicherheit und Zuverlässigkeit im Vordergrund konzipiert. Verbindungen über SSH sind sicher: Der Partner wird authentifiziert und alle Daten werden verschlüsselt ausgetauscht.


KULTUR SSH im Vergleich zu RSH


RSH


Remote Shell


SSH-Tools bieten eine sichere Variante der Programme aus der klassischen RSH (Remote Shell) Familie - rsh , rlogin und rcp . Diese sind noch in den rsh-server und rsh-client -Paketen verfügbar, aber von ihrer Verwendung wird dringend abgeraten.


SSH bietet auch zwei File-Transfer-Dienste. scp ist ein Kommandozeilen-Tool, das wie cp funktioniert, außer dass jeder Pfad zu einem anderen Rechner vorangestellt mit den Namen der Maschine gefolgt von einem Doppelpunkt verwendet werden kann.


$ scp file machine:/tmp/


sftp ist ein interaktiver Befehl der ftp ähnelt. In einer einzigen Sitzung kann sftp mehrere Dateien übertragen und es ist auch möglich damit Dateien auf einem entfernten Rechner zu manipulieren (Löschen, umbenennen, Berechtigungen anpassen, etc.)


scp


sftp


Debian nutzt OpenSSH, eine freie Version von SSH, das vom OpenBSD Projekt gepflegt wird, einem freien Betriebssystem das auf dem BSD Kernel basiert und seinen Fokus auf Sicherheit setzt. OpenSSH ist eine Abspaltung (fork) der ursprünglichen SSH Software der finnischen Firma SSH Communications Security Corp. Diese Firma entwickelte SSH zunächst als freie Software, entschied sich schließlich jedoch die Entwicklung unter einer proprietären Lizenz fortzusetzen. Das OpenBSD Projekt schuf daraufhin OpenSSH um weiterhin eine freie version von SSH anbieten zu können.


OpenSSH


ZURÜCK ZU DEN GRUNDLAGEN Fork


fork


Ein sogenannter "Fork" im Software-Bereich, benennt ein neues Projekt, das als Klon eines bestehenden Projektes beginnt um mit dem bestehenden Projekt zu konkurrieren. Von da an gehen in der Regel beide Projekte in Form von neuen Entwicklungen schnell auseinander. Ein "Fork" ist oft das Ergebnis von Meinungsverschiedenheiten innerhalb der Entwicklungsteams.


Die Möglichkeit ein Projekt zu forken ist ein direktes Resultat der Eigenheiten freier Software; ein Fork ist ein belebendes Ereignis, wenn es das Weiterbestehen eines Projektes als freie Software ermöglicht (beispielsweise bei einem Lizenzwechsel). Ein Fork, der aus technischen oder persönlichen Gründen durchgeführt wird, ist oft nur eine Verschwendung menschlicher Ressourcen; eine andere Lösung wäre vorzuziehen. Wiedervereinigungen zweier Projekte, die sich vorher durch einen Fork voneinander getrennt haben, gab es auch schon.


Seit Etch ist OpenSSH in zwei Pakete aufgeteilt. Der Client-Teil befindet sich im openssh-client-Paket, der Server-Teil im openssh-server-Paket. Das ssh-Meta-Paket ist von beiden Paketen abhängig und ermöglicht die Installation beider Pakete (apt-get install ssh).


WEITERFÜHRENDE INFORMATIONEN Hardware-Beschleunigung für SSH


OpenSSLHardware Beschleunigung


Manche Hardware stellt native Unterstützung für mathematische Funktionen, die für Verschlüsselungen verwendet werden, zur Verfügung, was die notwendigen Berechnungen beschleunigen kann und somit die Performance einiger Tools verbessern kann (und die Last des Hauptprozessors verringert). Zu diesen Tools zählt insbesondere die OpenSSL-Bibliothek, die wiederum von OpenSSH verwendet wird.


Obwohl ein Projekt mit dem Ziel der Vereinheitlichung von Treibern existiert (hauptsächlich auf Kernel-Ebene), wird die Vielzahl von Hardware-Komponenten auf ungleichmäßige und heterogene Art gehandhabt. Zum Beispiel wird das Padlock-System, das in Via C3-Prozessoren enthalten ist, nur teilweise unterstützt. Während der Linux-Kernel verschiedene Verschlüsselungsalgorithmen zur Verfügung stellt, erlaubt die OpenSSL 0.9.8-Bibliothek in Squeeze nur die Weitergabe von AES-Verschlüsselungen an die dafür vorgesehene Hardware, aber nicht die Weitergabe von SHA-Algorithmen; um dies tun zu können, muss man die Bibliothek mit einem Patch rekompilieren.


Schlüssel-basierte Authentifizierung


Jedes Mal, wenn sich jemand über SSH anmeldet, fragt der Remote-Server nach einem Passwort zur Authentifizierung des Benutzers. Dies kann problematisch sein, wenn Sie eine Verbindung automatisieren möchten, oder wenn Sie ein Tool, das häufige Verbindungen über SSH benötigt einsetzen. SSH bietet deshalb eine Schlüssel-basierte Authentifizierung.


Der User generiert ein neues Schlüsselpaar auf der Client-Maschine via ssh-keygen -t rsa; der öffentliche Schlüssel wird in ~/.ssh/id_rsa.pub, der entsprechende private Schlüssel in ~/.ssh/id_rsa gespeichert. Der Nutzer verwendet dann ssh-copy-id server, um den öffentlichen Schlüssel der Datei ~/.ssh/authorized_keys auf dem Server hinzuzufügen. Wenn der private Schlüssel zur Zeit der Erzeugung nicht mit einer "Passphrase" versehen wurde, funktionieren alle folgenden Logins auf dem Server ohne Eingabe eines Passworts. Anderenfalls muss der private Schlüssel jedes mal aufs Neue entschlüsselt werden, indem die Passphrase eingegeben wird. Glücklicherweise erlaubt es das Programm ssh-agent, die privaten Schlüssel im Speicher zu behalten, um das Passwort nicht jedes mal erneut eingeben zu müssen. Um diese Möglichkeit nutzen zu können, verwendet man ssh-add (ein mal pro Sitzung), unter der Voraussetzung, dass die Sitzung einer Instanz von ssh-agent zugeordnet ist. Debian aktiviert dieses Programm standardmäßig beim Start einer graphischen Sitzung, was aber über eine Änderung von /etc/X11/Xsession.options deaktiviert werden kann. In einer Konsolensitzung kann es manuell via eval $(ssh-agent) gestartet werden.


Sicherheit Schutz des Privaten Schlüssels


Wer auch immer im Besitz des privaten Schlüssels ist, kann sich in den entsprechend konfigurierten Account einloggen. Daher ist der Zugang zum privaten Schlüssel mit einer "Passphrase" gesichert. Jemand, der in Besitz einer Kopie dieses Schlüssels (zum Beispiel ~/.ssh/id_rsa) gelangt, muss dann zusätzlich noch die Passphrase kennen, um den Schlüssel nutzen zu können. Dieser zusätzliche Schutz ist aber dennoch nicht unüberwindbar, und wenn Sie denken, dass der Schlüssel in falsche Hände gelangt sein könnte, dann sollten Sie ihn von den Computern, auf denen er eingerichtet wurde, entfernen (indem Sie ihn aus authorized_keys entfernen) und durch neu generierte Schlüssel ersetzen.


Kultur OpenSSL Schwachstelle in Debian Etch


Die OpenSSL-Bibliothek, die ursprünglich mit Debian Etch ausgeliefert wurde, besaß ein ernstes Problem im integrierten Zufallszahlengenerator (RNG). Der Debian-Maintainer hatte eine Änderung vorgenommen, damit die Bibliothek keine Ursache von Warnungen wird, wenn Programme, die diese Bibliothek verwenden, von Speicher-Test-Programmen wie valgrind analysiert werden. Unglücklicherweise bewirkte diese Änderung, dass der RNG nur eine Entropie-Quelle verwendete, die mit der Prozessnummer (PID) zusammenhängt, wobei die hierfür zur Verfügung stehenden 32.000 Zahlen nicht genügend Zufälligkeit liefern können.


Konkret bedeutet dies, dass sobald OpenSSL zur Generierung neuer Schlüssel verwendet wurde, immer einen Schlüssel aus einer bekannten Menge von einigen hunderttausend Schlüsseln (32.000 multipliziert mit einer kleinen Zahl von Schlüssellängen) produziert wurde. Dies betraf SSH-Schlüssel, SSL-Schlüssel und X.509-Zertifikate, wie sie von einer Vielzahl von Applikationen verwendet werden, wie beispielsweise OpenVPN. Ein Cracker musste nur alle dieser möglichen Schlüssel ausprobieren, um sich unautorisierten Zugang verschaffen zu können. Um die Auswirkungen dieses Problems zu verringern, wurde der SSH-Daemon so modifiziert, dass er die problematischen Schlüssel, die in den Paketen openssh-blacklist und openssh-blacklist-extra aufgelistet sind, nicht akzeptiert. Zusätzlich erlaubt das Kommando ssh-vulnkey die Identifizierung von potentiell kompromittierten Schlüsseln im System.


Eine detaillierte Analyse dieses Vorkommnisses zeigt, dass dies eine Folge mehrerer (kleiner) Probleme ist, sowohl auf Seiten des OpenSSL-Projektes als auch des Debian-Paket-Maintainers. Eine weit verbreitete Bibliothek wie OpenSSL sollte - ohne Modifikationen - keine Warnungen erzeugen, wenn sie von valgrind getestet wird. Weiterhin sollte der Quelltext (insbesondere die Teile, die so wichtig sind wie der RNG) besser kommentiert sein, um solche Fehler zu vermeiden. Der Debian-Maintainer seinerseits wollte seine Änderungen von den OpenSSL-Entwicklern validieren lassen, wofür er aber nicht den entsprechenden Patch zur Überprüfung vorgezeigt hat, sondern nur die Änderungen beschrieben hat. Er hat sich selbst auch nicht deutlich als Maintainer des entsprechenden Debian-Pakets kenntlich gemacht. Schließlich hat er die Änderungen, die er am ursprünglichen Code vorgenommen hat, nicht gründlich dokumentiert; alle Modifizierungen sind zwar in einem Subversion-Repository gespeichert, aber alle sind während der Erzeugung des Quelltext-Pakets in einem einzigen Patch zusammengefasst worden.


Es ist schwierig, unter solchen Umständen die geeigneten Mittel zu finden, um solche Vorfälle in Zukunft verhindern zu können. Die Lehre, die hierraus gezogen werden kann, ist, dass jede Änderung, die Debian in Upstream-Software einführt, gerechtfertigt, dokumentiert und, wenn möglich, an das Upstream-Projekt übermittelt und der Öffentlichkeit zur Diskussion gestellt werden muss. Aus diesen Gründen wurde das neue Quellpaket-Format (“3.0 (quilt)”) und der Debian-Patch-Tracker entwickelt.


Verwenden von Remote-X11-Anwendungen


Das SSH-Protokoll erlaubt die Weiterleitung graphischer Daten ("X11"-Sitzung, entsprechend dem Namen des weitverbreitetsten graphischen Systems unter Unix); der Server stellt dann einen entsprechenden Kanal für diese Daten bereit. Konkret bedeutet dies, dass ein entfernt ausgeführtes, graphisches Programm mit dem X.org-Server auf dem lokalen Bildschirm dargestellt werden kann, und die gesamte Sitzung (Input und Darstellung) sicher ist. Da diese Methode es entfernten Anwendungen erlaubt, mit dem lokalen System zu interagieren, ist sie standardmäßig deaktiviert. Sie kann über die Option X11Forwarding yes in der Server-Konfigurationsdatei (/etc/ssh/sshd_config) aktiviert werden. Schließlich muss der Benutzer dieses Verhalten mit Hilfe der Option -X des ssh-Kommandos verlangen.


Erstellen von verschlüsselten Tunneln via Port Weiterleitung (port forwarding)


Port Weiterleitung


Die -R- und -L-Optionen erlauben es ssh, "verschlüsselte Tunnel" zwischen zwei Maschinen zu erzeugen, um auf sichere Art einen lokalen TCP-Port (siehe Info-Box ) auf einen entfernten Rechner weiterzuleiten und umgekehrt.


Vokabular Tunnel


tunnel SSHVPN


Das Internet und die meisten LANs, die damit verbunden sind, arbeiten im Paket-Modus und nicht im connected-Modus, was bedeutet, dass ein Paket, das von einem Computer zu einem anderen transportiert werden soll, auf dem Weg dazwischen von mehreren zwischengeschalteten Routern gestoppt wird, um schließlich zum Zielort zu gelangen. Man kann dennoch einen connected-Modus simulieren, bei dem der Datenstrom in IP-Pakete gekapselt ist. Diese Pakete folgen ihrer normalen Route, aber der Datenstrom wird am Zielort wieder in die unveränderte Form gebracht. Dies wird "Tunnel" genannt, analog zu einem Straßentunnel, in dem Fahrzeuge direkt vom Eingang (Input) zum Ausgang (Output) fahren, ohne irgendwelchen Kreuzungen zu begegnen, im Gegensatz zu einem Weg auf der Oberfläche, der Kreuzungen und Richtungswechsel beinhalten würde.


Man kann nun die Gelegenheit nutzen, um dem Tunnel eine Verschlüsselung hinzuzufügen: Der Datenstrom, der durch diesen Tunnel läuft, ist somit von außen betrachtet in einer unkenntlichen Form, aber am Tunnelausgang wird er in entschlüsselter Form ausgegeben.


ssh -L 8000:server:25 intermediary eröffnet eine SSH-Sitzung mit dem Host intermediary und lauscht auf Port 8000 (siehe ). Für jede Verbindung, die an diesem Port hergestellt wird, wird ssh eine Verbindung vom Rechner intermediary zum Port 25 des server aufbauen und beide Verbindungen verknüpfen.


ssh -R 8000:server:25 intermediary eröffnet ebenfalls eine SSH-Sitzung zum Rechner intermediary, aber ssh lauscht dann auf diesem Rechner an Port 8000 (siehe ). Jede Verbindung, die an diesem Port hergestellt wird, wird ssh veranlassen, eine Verbindung vom lokalen Rechner zum Port 25 des server zu öffnen und beide Verbindungen zu verknüpfen.


In beiden Fällen werden Verbindungen zu Port 25 auf dem Host server hergestellt, die durch den SSH-Tunnel laufen, der zwischen dem lokalen Rechner und dem Rechner intermediary hergestellt wurde. Im ersten Fall ist der Eingang zum Tunnel der Port 8000, und die Daten laufen zum Rechner intermediary, bevor sie zum server im "öffentlichen" Netzwerk geleitet werden. Im zweiten Fall sind Ein- und Ausgang im Tunnel vertauscht: der Eingang ist Port 8000 auf dem Rechner intermediary, der Ausgang ist auf dem lokalen Host, und die Daten werden dann zum server geleitet. In der Praxis ist der Server normalerweise entweder der lokale Rechner oder der intermediäre. Auf diese Weise sichert SSH die Verbindung von einem Ende zum anderen.


Weiterleiten eines lokalen Ports via SSH


Weiterleitung eines entfernten Ports via SSH


Benutzung von entfernten grafischen Benutzeroberflächen (Desktops)


VNC (Virtual Network Computing) ermöglicht einen Zugang zu entfernten grafischen Benutzeroberflächen (Desktops)


VNC


Virtual Network Computing


grafische Arbeitsflächeentfernt


entfernte grafische Arbeitsfläche


Arbeitsfläche, entfernte grafische desktop


Dieses Werkzeug wird hauptsächlich für die technische Hilfestellung verwendet; der Administrator sieht die Fehler wie der Benutzer sie wahrnimmt und kann ihm direkt einen Lösungsweg präsentieren, ohne dass er direkt vor Ort sein muss.


vino


krfb


x11vnc


Zunächst muss der Nutzer den Zugriff auf seine Sitzung erlauben. Die grafischen Arbeitsumgebungen von GNOME und KDE enthalten vino beziehungsweise krfb, die eine grafische Schnittstelle bereitstellen, die den Zugriff auf eine bestehende Sitzung über VNC ermöglicht (zu finden in den Menüs System Einstellungen Entfernter Bildschirm beziehungsweise K-Menü Internet Krfb- Arbeitsfläche freigeben). Bei anderen grafischen Arbeitsumgebungen dient der Befehl x11vnc (aus dem gleichnamigen Debian Paket) dem gleichen Zweck; Sie können es für den Anwender durch ein besonderes Icon verfügbar machen.


vinagre


tsclient


krdc


xvnc4viewer


Wenn die grafische Sitzung durch VNC freigeschaltet wurde, muss sich der Administrator über einen VNC-Client mit ihr verbinden. GNOME verfügt zu diesem Zweck über vinagre und tsclient, während KDE krdc enthält (im Menü unter K-Menü Internet Krdc - Verbindung zu Fremdrechner). Es gibt andere VNC-Clients, die die Befehlszeile verwenden, wie zum Beispiel K Internet Remote Desktop Client im gleichnamigen Debian Paket. Sobald die Verbindung hergestellt ist, kann der Administrator sehen, was vorgeht, kann aus der Ferne auf dem Rechner arbeiten und dem Nutzer zeigen, wie er vorgehen soll.


SICHERHEIT VNC über SSH


SSH TunnelVNC


Falls Sie über VNC eine Verbindung herstellen und Ihre Daten nicht im Klartext über das Netzwerk schicken wollen, können Sie sie in einem SSH-Tunnel verbergen (siehe ). Sie müssen nur wissen, das VNC standardmäßig den Port 5900 für den ersten Bildschirm ("localhost:0" genannt), 5901 für den zweiten ("localhost:1" genannt) usw. verwendet.


Der Befehl ssh -L localhost:5901:localhost:5900 -N -T machine erstellt einen Tunnel zwischen dem lokalen Port 5901 in der localhost-Schnittstelle und Port 5900 auf dem Rechner machine. Das erste "localhost" beschränkt SSH darauf, nur an dieser Schnittstelle des lokalen Rechners auf Anfragen zu warten. Das zweite "localhost" bezeichnet die Schnittstelle des entfernten Rechners, die den Netzverkehr entgegenehmen wird, der in "localhost:5901" eintritt. Somit wird vncviewer localhost:1 den VNC-Client mit dem entfernten Bildschirm verbinden, obwohl Sie den Namen des lokalen Rechners angeben.


Wenn die VNC-Sitzung beendet ist, vergessen Sie nicht, den Tunnel zu schließen, indem Sie auch die entsprechende SSH-Sitzung verlassen.


ZURÜCK ZU DEN GRUNDLAGEN Display Manager


gdm


kdm


xdm


ManagerDisplaymanager


Displaymanager


gdm, kdm und xdm sind Displaymanager. Sie übernehmen kurz nach dem Hochfahren die Kontrolle über die grafische Schnittstelle, um dem Nutzer einen Anmeldebildschirm anzuzeigen. Sobald der Nutzer sich angemeldet hat, führen sie das Programm aus, das zum Starten der grafischen Arbeitssitzung erforderlich ist.


VNC funktioniert auch für mobile Anwender oder für Angestellte, die sich gelegentlich von zu Hause aus anmelden müssen, um auf einen entfernten Bildschirm ähnlich dem an ihrem Arbeitsplatz zuzugreifen. Die Konfigurierung eines derartigen Dienstes ist komplizierter: zunächst installieren Sie das Paket vnc4server, passen die Konfiguration des Displaymanagers dahingehend an, dass er Anfragen nach XDMCP Query annimmt (für gdm kann dies grafisch über das Menü System Systemverwaltung Anmeldefenster und dann den Reiter "Entfernt" geschehen. Beachten Sie, dass dies nur für gdm gilt und nicht für gdm3, die Version, die standardmäßig in Squeeze installiert ist.) und starten schließlich den VNC-Server mit inetd, so dass eine Sitzung automatisch beginnt, wenn ein Nutzer versucht, sich anzumelden. Sie können zum Beispiel folgende Zeile zu /etc/inetd.conf hinzufügen:


5950 stream tcp nowait nobody.tty /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16 securitytypes=none


Das Umleiten ankommender Verbindungen zum Displaymanager löst das Problem der Legitimierung, weil nur Nutzer mit einem lokalen Konto den Anmeldeschirm von gdm passieren können (oder in gleicher Weise kdm, xdm usw.). Da dieses Verfahren problemlos mehrere gleichzeitige Anmeldungen ermöglicht (vorausgesetzt, dass der Server ausreichend leistungsfähig ist), kann es sogar dazu verwendet werden, vollständige Arbeitsflächen für mobile Nutzer bereitzustellen (oder für weniger leistungsstarke Arbeitsplatzrechner, die als Thin Clients konfiguriert sind). Nutzer melden sich einfach mit server:50 beim Bildschirm des Servers an, da der verwendete Port 5950 ist.


vnc4server


Berechtigungen verwalten


Linux ist definitiv ein Mehrbenutzersystem, und daher ist es erforderlich, ein Berechtigungssystem bereitzustellen, um die Menge der genehmigten Arbeitsvorgänge an Dateien und Verzeichnissen zu kontrollieren, einschließlich aller Systemressourcen und Laufwerke (in einem Unixsystem wird jedes Laufwerk als eine Datei oder ein Verzeichnis dargestellt). Dies ist allen Unixsystemen gemein, aber eine Erinnerung ist immer sinnvoll, vor allem da es einige sehr interessante und relativ unbekannte Verwendungen gibt.


Rechte


Berechtigungen


BenutzerEigentümer


GruppeEigentümer


EigentümerBenutzer


EigentümerGruppe


Jede Datei und jeder Ordner hat spezifische Berechtigungen für drei Kategorien von Benutzern:


Sein Eigentümer (symbolisiert durch u wie in "user");


seine Gruppe (symbolisiert durch g wie in "group"), alle Mitglieder der Gruppe darstellend;


Sonstige (symbolisert durch o wie in "other").


Drei Arten von Berechtigungen können kombiniert werden miteinander


lesen (symbolisiert mit r für "read");


schreiben (oder ändern,symbolisiert mit w


ausführen (symbolisiert mit x


Lesen, Recht


Schreiben, Recht


Änderung, Recht


ausführenRecht


Im Falle einer Datei sind diese Rechte leicht zu verstehen: Lesezugriff erlaubt das Lesen des Inhalts (einschließlich des Kopierens), Schreibzugriff erlaubt es, ihn zu verändern, und Ausführungszugriff erlaubt es Ihnen, es zu auszuführen (was nur funktionieren wird, wenn es ein Programm ist).


SICHERHEIT setuid und setgid ausführbare Dateien


Zwei besondere Rechte sind für ausführbare Dateien wichtig: setuid und setgid (durch den Buchstaben "s" dargestellt). Beachten Sie, dass wir häufig von einem "Bit" sprechen, da jedes dieser booleschen Werte durch eine 0 oder eine 1 repräsentiert werden kann. Diese zwei Rechte erlauben es jedem Nutzer, das Programm mit den Rechten des Eigentümers beziehungsweise der Gruppe auszuführen. Dieser Mechanismus gewährt Zugang zu Merkmalen, die Rechte auf einer höheren Ebene erfordern, als Sie normalerweise haben würden.


setuid, Recht


setgid, Recht


Da ein Root-Programm mit setuid


Ein Verzeichnis wird anders gehandhabt. Lesezugriff gewährt das Recht, die Liste der Einträge (Dateien und Verzeichnisse) durchzugehen, Schreibzugriff erlaubt es, Dateien zu erstellen oder zu löschen, und Ausführungszugriff erlaubt es, es zu durchqueren (insbesondere dorthin mit dem Befehl cd zu gehen). Ein Verzeichnis durchqueren zu können, ohne es lesen zu können, ermöglicht es, auf diejenigen darin enthaltenen Einträge zuzugreifen, die namentlich bekannt sind, aber nicht, sie zu finden, wenn Sie nicht wissen, dass sie vorhanden sind oder wie sie heißen.


SICHERHEIT setgid-Verzeichnis und Sticky-Bit


Das setgid-Bit gilt auch für Verzeichnisse. Und neu erstellte Einträge in solchen Verzeichnissen werden automatisch der Benutzergruppe des übergeordneten Verzeichnisses zugewiesen, anstatt wie gewöhnlich die Hauptgruppe des Erstellers zu übernehmen. Durch diese Einstellung wird vermieden, dass der Nutzer die Hauptgruppe des Eintrags ändern muss (mit dem Befehl newgrp), wenn er in einem Verzeichnisbaum arbeitet, der von mehreren Nutzern der selben Gruppe gemeinsam genutzt wird.


Sticky-Bit


Das "sticky" Bit (dargestellt durch den Buchstaben "t") ist ein Recht, das nur in Verzeichnissen sinnvoll ist. Es wird vor allem für temporäre Verzeichnisse benutzt, in denen jeder Schreibzugriff hat (wie zum Beispiel /tmp/): es schränkt das Löschen von Dateien ein, so dass dies nur ihr Eigentümer (oder der Eigentümer des übergeordneten Verzeichnisses) kann. Ohne dieses Recht könnte jeder die Dateien anderer Nutzer in /tmp/ löschen.


Drei Befehle steuern die einer Datei zugeordneten Berechtigungen:


chown user file ändert den Besitzer der Datei;


chgrp group file verändert die Besitzer-Gruppe;


chmod rights file ändert die Berechtigungen für die Datei.


Es gibt zwei Arten, die Rechte darzustellen. Von ihnen ist die symbolische Darstellung wohl am einfachsten zu verstehen und zu merken. Es geht um die oben erwähnten Buchstabensymbole. Sie können Rechte für jede Kategorie von Nutzern festlegen (u/g/o), indem sie sie entweder ausdrücklich setzen (mit =), sie hinzufügen (+) oder sie entfernen (-). So gewährt die Formel u=rwx,g+rw,o-r dem Eigentümer Lese-, Schreib- und Ausführungszugriff, fügt Lese- und Schreibzugriff für die Eigentümergruppe hinzu und entfernt den Lesezugriff für andere Nutzer. Rechte, die in einem solchen Befehl nicht durch Hinzufügen oder Entfernen modifiziert werden, bleiben unverändert. Der Buchstabe a, für "all", umfasst alle drei Nutzerkategorien, so dass a=rx allen drei Kategorien die gleichen Rechte gewährt (lesen und ausführen, aber nicht schreiben).


chmod


chown


chgrp


Oktale Darstellung von Berechtigungen


Berechtigung, oktale Darstellung


Die (oktale) Zahlendarstellung ordnet jeder Berechtigung einen Wert zu: 4 für Lesen, 2 für Schreiben und 1 für Ausführen. Wir verknüpfen jede Kombination von Berechtigungen durch die Summe der Zahlen. Jeder Wert wird dann einer anderen Kategorie von Nutzern zugeordnet, indem sie von vorne nach hinten in der üblichen Reihenfolge (Eigentümer, Gruppe, Sonstige) angeordnet werden.


So wird zum Beispiel der Befehl chmod 754 datei die folgenden Berechtigungen vergeben: Schreiben, Lesen und Ausführen für den Eigentümer (da 7 = 4 + 2 + 1); Schreiben und Ausführen für die Gruppe (da 5 = 4 + 1); nur Lesen für Sonstige. Die 0 bedeutet keine Berechtigung; so gestattet chmod 600 datei dem Eigentümer Lese-/Schreibzugriff, und keine Berechtigungen für alle anderen. Die häufigsten Berechtigungskombinationen sind 755 für ausführbare Dateien und Verzeichnisse und 644 für Dateien, die Daten enthalten.


Um spezielle Berechtigung darzustellen, können Sie dieser Zahl eine vierte Ziffer nach dem gleichen Prinzip voranstellen, wobei die setuid, setgid und sticky Bits jeweils 4, 2 und 1 sind. chmod 4754 wird das setuid Bit mit den zuvor beschriebenen Berechtigungen verbinden.


Beachten Sie, dass die oktale Schreibweise es nur erlaubt, alle Berechtigungen für eine Datei gleichzeitig zu setzen; Sie können sie nicht dazu benutzen, einfach eine neue Berechtigung hinzuzufügen, wie den Lesezugriff für die Eigentümergruppe, da Sie die bestehenden Berechtigungen berücksichtigen und den entsprechenden neuen numerischen Wert berechnen müssen.


TIP Rekursives Verfahren


Manchmal müssen wir die Berechtigungen für einen ganzen Dateibaum ändern. Alle oben beschriebenen Befehle haben eine -R Option, um rekursiv in Unterverzeichnissen zu operieren.


Die Unterscheidung zwischen Verzeichnissen und Dateien verursacht manchmal Probleme mit rekursiven Aktionen. Daher wurde für die symbolische Darstellung von Berechtigungen der Buchstabe "X" eingeführt. Er stellt ein Ausführungsrecht dar, das nur für Verzeichnisse gilt (und nicht für Dateien, die dieses Recht nicht haben). So wird chmod -R a+X verzeichnis Ausführungsrechte für alle Kategorien von Nutzern (a) nur für all die Unterverzeichnisse und Dateien hinzufügen, für die wenigstens eine Nutzerkategorie (selbst wenn es ihr einziger Eigentümer ist) bereits Ausführungsrechte hat.


TIP Den Eigentümer und die Gruppe wechseln


Häufig möchten Sie die Gruppe einer Datei und gleichzeitig ihren Eigentümer wechseln. Der Befehl chown hat hierfür eine besondere Syntax: chown eigentümer:gruppe


WEITERE SCHRITTE umask


Wenn eine Anwendung eine Datei erstellt, teilt sie ihr vorläufige Berechtigungen zu, wissend dass das System bestimmte Berechtigungen entfernt, wie sie mit dem Befehl umask vorgegeben wurden. Geben Sie umask in einer Shell ein; Sie werden eine Maske wie 0022 sehen. Dies ist einfach eine oktale Darstellung der Berechtigungen, die systematisch entfernt werden (in diesem Fall die Schreibrechte für die Gruppe und sonstige Nutzer).


umask


BerechtigungenMaske


MaskeBerechtigungsmaske


Falls Sie einen neuen oktalen Wert eingeben, verändert der Befehl umask die Maske. Bei Verwendung in der Startdatei einer Shell (zum Beispiel ~/.bash_profile) wird er grundsätzlich die Standardmaske für Ihre Arbeitssitzungen ändern.


Administrations-Schnittstellen


SchnittstelleAdministrations-Schnittstelle


Administration, Schnittstellen


Eine grafische Schnittstelle für die Administration zu benutzen, ist unter verschiedenen Umständen interessant. Ein Administrator kennt nicht unbedingt alle Konfigurationseinzelheiten für alle seine Dienste, und er hat nicht immer Zeit, auf die Suche nach der Dokumentation für die Angelegenheit zu gehen. Eine grafische Schnittstelle für die Administration kann daher die Bereitstellung eines neuen Dienstes beschleunigen. Sie kann auch Einrichtung von Diensten vereinfachen, die schwierig zu konfigurieren sind.


Eine derartige Schnittstelle ist nur eine Hilfe und kein Selbstzweck. Auf jeden Fall muss der Administrator ihr Verhalten beherrschen, um mögliche Probleme zu verstehen und zu umgehen.


Da keine Schnittstelle vollkommen ist, könnten Sie versucht sein, verschiedene Lösungen auszuprobieren. Dies sollte jedoch möglichst vermieden werden, da verschiedene Programme manchmal in ihren Funktionsweisen zueinander inkompatibel sind. Selbst wenn sie alle darauf abzielen, sehr flexibel zu sein, und versuchen, die Konfigurationsdatei als ihren einzigen Bezugspunkt zu verwenden, sind sie nicht immer in der Lage, auch externe Veränderungen einzubeziehen.


Administrieren auf einer Webschnittstelle: webmin


webmin


Dies ist ohne Zweifel eine der erfolgreichsten Administrations-Schnittstellen. Es ist ein modulares System, das mittels eines Webbrowsers bedient wird und ein weites Spektrum an Bereichen und Werkzeugen abdeckt. Darüberhinaus ist es interantionalisiert und in vielen Sprachen verfügbar.


Leider ist webmin seit Etch nicht mehr in Debian enthalten. Sein Debian-Betreuer - Jaldhar H. Vyas - hat die Pakete, die er erstellt hatte, entfernt, da er nicht mehr die erforderliche Zeit hatte, um sie auf einem akzeptablen Qualitätsniveau zu halten. Kein anderer hat die Aufgabe offiziell übernommen, daher enthält Squeeze das Paket webmin nicht.


Auf der Webseite webmin.com ist jedoch ein inoffizielles Paket veröffentlicht. Im Gegensatz zu den in Sarge enthaltenen Paketen, ist dieses Paket monolithisch; alle seine Konfigurierungsmodule werden standardmäßig installiert und aktiviert, selbst wenn der dazugehörige Dienst auf dem Rechner nicht installiert ist.


SICHERHEIT Das Root-Passwort ändern


Beim ersten Anmelden wird die Identifizierung durch den Benutzernamen von Root und sein normales Passwort erlangt. Es ist empfehlenswert, das für webmin verwendete Passwort möglichst bald zu ändern, so dass im Falle einer Gefährdung das Root-Passwort für den Server nicht betroffen ist, selbst wenn hierdurch dem Rechner wichtige Administrationsrechte verliehen werden.


Vorsicht! Da webmin so viele Funktionen hat, könnte ein böswilliger Nutzer bei einem Zugriff die Sicherheit des gesamten Systems gefährden. Im allgemeinen wird von derartigen Schnittstellen für ein wichtiges System mit starken Sicherheitsauflagen (Firewall, sensible Server usw.) abgeraten.


Webmin wird durch eine Webschnittstelle bedient, aber es erfordert nicht die Installation von Apache. Im Grunde hat diese Software ihren eigenen integrierten Mini-Webserver. Dieser Server wartet an Port 10000 auf Anfragen und akzeptiert sichere HTTP-Verbindungen.


Die mitgelieferten Module decken eine große Vielfalt von Diensten ab, unter anderem:


alle Basisdienste: Anlegen von Benutzern und Gruppen, Verwaltung von crontab-Dateien, Init-Skripte, Betrachtung von Protokolldateien usw.


bind; Konfiguration des DNS Dervers (Nameserver);


postfix; Konfiguration des SMTP Servers (E-mail);


inetd: Konfigurierung des inetd-Superservers;


Quota: Verwaltung der Benutzer-Quota;


dhcpd: Konfiguration für den DHCP Server;


proftpd; Konfiguration für den FTP-Server;


samba; Konfiguration für den Samba Datei Server


Software: Installation und Entfernung von Software aus Debian-Paketen und Systemaktualisierungen.


Die Administrations-Schnittstelle ist in einem Webbrowser über die Adresse https://localhost:10000 zu erreichen.. Vorsicht! Nicht alle Module sind sofort nutzbar. Manchmal müssen sie durch die Angabe der Speicherorte der jeweiligen Konfigurationsdateien und einiger ausführbarer Dateien (Progamme) konfiguriert werden. Häufig wird das System sie freundlich darauf hinweisen, falls es ihm nicht gelingt, ein gewünschtes Modul zu aktivieren.


ALTERNATIVE gnome-system-tools


gnome-system-tools


Das GNOME-Projekt bietet in dem Paket gnome-system-tools ebenfalls eine grafische Administrations-Schnittstelle an. Es ist standardmäßig bei einem Desktop-System installiert und umfasst Anwendungen, die im Menü unter SystemAdministration zu finden sind. Diese Anwendungen sind leicht zu bedienen und decken nur eine begrenzte Anzahl von Basisdiensten ab: Verwaltung von Benutzern und Gruppen, Zeiteinstellung, Netzwerkkonfigurierung, Plattenverwaltung und Verwaltung der Startprogramme.


Pakete konfigurieren: debconf


debconf


dpkg-reconfigure


Viele Pakete werden automatisch konfiguriert, nachdem während der Installation einige Fragen durch das Programm Debconf gestellt werden. Diese Pakete können mit dem Befehl dpkg-reconfigure paket anders konfiguiert werden.


In den meisten Fällen sind diese Einstellungen sehr einfach; es werden nur einige wenige Variablen in der Konfigurationsdatei geändert. Diese Variablen sind häufig zwischen zwei "Begrenzungs"-Zeilen gruppiert, so dass eine Rekonfigurierung des Pakets nur Einfluss auf den eingeschlossenen Bereich hat. In anderen Fällen wird eine Rekonfigurierung nichts ändern, falls das Skript eine manuelle Änderung der Konfigurationsdatei entdeckt, damit diese menschlichen Eingriffe bewahrt werden (da das Skript nicht sicherstellen kann, dass seine eigenen Veränderungen nicht die vorhandenen Einstellungen stören werden).


DEBIAN POLITIK Veränderungen bewahren


Die Debian Politik legt ausdrücklich fest, dass alles getan werden sollte, um manuelle Veränderungen einer Konfigurationsdatei zu bewahren. Daher treffen immer mehr Skripte Vorsichtsmaßnahmen für das Editieren von Konfigurationsdateien. Das allgemeine Prinzip ist einfach: das Skript wird nur dann Änderungen vornehmen, wenn es den Status der Konfigurationsdatei kennt, was durch einen Vergleich der Prüfsumme der Datei mit derjenigen der letzten automatisch erzeugten Datei überprüft wird. Falls sie gleich sind, ist es dem Skript erlaubt, die Konfigurationsdatei zu ändern. Anderenfalls entscheidet es, dass die Datei verändert wurde und fragt, welche Aktion es durchführen soll (eine neue Datei installieren, die alte Datei speichern oder zu versuchen, die neuen Änderungen in die bestehende Datei zu integrieren). Dieses vorsorgliche Prinzip hatte lange Zeit nur Debian, jedoch haben andere Distributionen begonnen, es auch anzunehmen.


Das Programm ucf (aus dem gleichnamigen Debian-Paket) kann dazu verwendet werden, ein derartiges Verhalten umzusetzen.


ucf


syslog Systemereignisse


rsyslogd


DateienProtokolldateien


ProtokolleDistribution


Prinzip und Mechanismus


Der rsyslogd-Daemon ist verantwortlich für das Sammeln von Service-Mitteilungen, die von den Anwendungen und vom Kernel kommen, und für die weitere Verteilung in Protokolldateien (die normalerweise im Verzeichnis /var/log/ gespeichert werden). Er befolgt die Konfigurationsdatei /etc/rsyslog.conf.


ERGÄNZUNGEN Wechsel von sysklogd zu rsyslog


sysklogd


Debian Squeeze installiert standardmäßig rsyslog, während ältere Versionen (bis zu Etch, aber nicht Lenny) sysklogd benutzt haben. Der Übergang verlief nicht automatisch, und im Falle eines Upgrades von Etch sollte rsyslog manuell installiert werden, falls Sie mit Debians Standardauswahl synchron bleiben wollen.


Die Umstellung vom einen auf das andere ist schmerzlos, da die Standardkonfiguration sehr ähnlich ist, und die Syntax des älteren /etc/syslog.conf mit dem neuen /etc/rsyslog.conf kompatibel ist.


Jede Protokollnachricht ist einem Anwendungsuntersystem zugeordnet (in der Dokumentation "facility" genannt):


auth und authpriv: für Authentifizierung;


cron: kommt von den Diensten für die Aufgabenterminierung cron und atd;


daemon: betrifft einen nicht näher bestimmten Daemon (DNS, NTP usw.);


ftp: bezieht sich auf den FTP-Server;


kern: eine vom Kernel kommende Nachricht;


lpr: kommt vom Druck-Subsystem;


mail: kommt vom E-Mail-Subsystem;


news: Usenet-Subsystemnachricht (insbesondere von einem NNTP-Server - Network News Transfer Protocol - der Nachrichtenforen verwaltet);


syslog: Meldungen vom syslogd-Server selbst;


user: Benutzermeldungen (allgemein);


uucp: Meldungen vom UUCP-Server (Unix to Unix Copy Program, ein altes vor allem zur Verteilung von E-Mails verwendetes Protokoll);


local0 bis local7: für die lokale Verwendung reserviert.


Jede Nachricht ist auch einer Prioritätsstufe zugeordnet. Hier sind sie in abnehmender Reihenfolge:


emerg: "Hilfe!" Es gibt einen Notfall, das System ist möglicherweise unbrauchbar.


alert: Beeilung! Jede Verzögerung kann gefährlich sein, es muss sofort etwas unternommen werden.


crit: die Umstände sind kritisch;


err: Fehler;


warn: Warnung (möglicher Fehler);


notice: die Umstände sind normal, aber die Nachricht ist wichtig;


info: informative Nachricht;


debug: Fehlerbeseitigungsnachricht.


Die Konfigurationsdatei


Die Syntax der Datei /etc/rsyslog.conf ist auf der Handbuchseite rsyslog.conf5 ausführlich erläutert, im Paket rsyslog-doc ist aber auch eine HTML-Dokumentation verfügbar (/usr/share/doc/rsyslog-doc/html/index.html). Das Grundprinzip besteht darin, Paare von "selector" und "action" zu verfassen. Der Selektor bestimmt alle relevanten Nachrichten, und die Aktionen beschreiben, wie mit ihnen umzugehen ist.


Syntax des Selektors


Der Selektor ist eine durch Semikolon getrennte Liste von subsystem.priorität-Paaren (Beispiel: auth.notice;mail.info). Ein Stern kann für alle Subsysteme oder alle Prioritäten stehen (Beispiele: *.alert oder mail.*). Mehrere Subsysteme können in einer Gruppe zusammengefasst werden, indem sie durch ein Komma getrennt werden (Beispiel: auth,mail.info). Die angezeigte Priorität bezieht sich auch auf Meldungen gleicher oder höherer Priorität; so bezeichnet auth.alert Nachrichten des auth-Subsystems mit der Priorität alert oder emerg. Mit einem vorangestellten Ausrufezeichen (!) bezeichnet sie das Gegenteil, mit anderen Worten nur die niedrigeren Prioritäten; so bezeichnet auth.!notice Meldungen, die von auth mit den Prioritäten info oder debug verschickt worden sind. Mit einem vorangestellten Gleichheitszeichen (=) bezieht sie sich genau und ausschließlich auf die angezeigte Priorität (bei auth.=notice handelt es sich ausschließlich um Meldungen von auth mit der Priorität notice).


Jedes Element in der Selektorliste setzt vorhergehende Elemente außer Kraft. Es ist somit möglich, eine Menge einzugrenzen oder bestimmte Elemente von ihr auszuschließen. Zum Beispiel bedeutet kern.info;kern.!err Meldungen vom Kernel mit einer Priorität zwischen info und warn. Die Priorität none bezeichnet die leere Menge (keine Prioritäten) und kann dazu dienen, ein Subsystem von einer Menge von Meldungen auszuschließen. So bezeichnet *.crit;kern.none alle Meldungen mit der Priorität crit oder höher, die nicht vom Kernel kommen.


Syntax von Aktionen


ZURÜCK ZU DEN GRUNDLAGEN Die benannte Pipe, eine beständige Pipe


benannte Pipe


Pipe, benannte Pipe


Eine benannte Pipe ist eine besondere Dateiart, die wie eine gewöhnliche Pipe funktioniert (die Pipe, die sie mit dem Symbol "|" auf der Befehlszeile erstellen), aber durch eine Datei. Dieses Vorgehen hat den Vorteil, dass sich so zwei unzusammenhängende Prozesse verknüpfen lassen. Alles, was in eine benannte Pipe geschrieben wird, blockiert den schreibenden Prozess, bis ein anderer Prozess die geschriebenen Daten zu lesen versucht. Dieser zweite Prozess liest die Daten, die vom ersten geschrieben wurden, der daraufhin seinen Ablauf wieder aufnehmen kann.


Eine derartige Datei wird durch den Befehl mkfifo erstellt.


Die verschiedenen möglichen Aktionen sind:


die Meldung zu einer Datei hinzufügen (Beispiel: /var/log/messages);


die Meldung an einen entfernten syslog-Server schicken (Beispiel: @log.falcot.com);


die Meldung an eine bestehende benannte Pipe schicken (Beispiel: |/dev/xconsole);


die Meldung an einen oder mehrere Benutzer schicken, falls sie angemeldet sind (Beispiel: root,rhertzog);


die Meldung an alle angemeldeten Benutzer schicken (Beispiel: *);


die Nachricht in eine Textkonsole schreiben (Beispiel: /dev/tty8).


SICHERHEIT Protokolle weiterleiten


Protokollweiterleiten


Es ist eine gute Idee, die wichtigsten Protokolle auf einem getrennten Rechner aufzuzeichnen (vielleicht speziell diesem Zweck zugeordnet), da dies einen möglichen Eindringling daran hindert, Spuren seines Eindringens zu verwischen (es sei denn natürlich, dass er auch diesen anderen Server kompromittiert). Außerdem haben Sie im Falle eines wesentlichen Problems (wie einem Kernel-Crash) die Protokolle auf einem anderen Rechner verfügbar, was Ihre Chancen erhöht, den Ablauf der Ereignisse, die den Crash verursacht haben, zu bestimmen.


Für den Empfang von Protokollmeldungen, die von anderen Rechnern geschickt werden, müssen Sie rsyslog rekonfigurieren: faktisch reicht es aus, die gebrauchsfertigen Einträge in /etc/rsyslog.conf ($ModLoad imudp und $UDPServerRun 514) zu aktivieren.


Der inetd-Superserver


Inetd (häufig "Internet-Superserver" genannt) ist ein Server der Server. Er führt selten genutzte Server nach Bedarf aus, so dass sie nicht ständig laufen müssen.


inetd


Superserver


Die Datei /etc/inetd.conf listet diese Server und ihre üblichen Ports auf. Der Befehl inetd wartet auf allen von ihnen auf Anfragen; wenn er eine Verbindung zu einem dieser Ports entdeckt, führt er das entsprechende Serverprogramm aus.


DEBIAN POLITIK Einen Server in inetd.conf registrieren


Häufig wollen Pakete einen neuen Server in der Datei /etc/inetd.conf registrieren, aber die Debian Politik verbietet es einem Paket, eine Konfigurationsdatei zu verändern, die ihm nicht gehört. Deshalb wurde das updated-inetd-Skript (in dem gleichnamigen Paket) geschaffen: es verwaltet die Konfigurationsdatei, und andere Pakete können es daher benutzen, um einen neuen Server bei der Konfiguration des Superservers zu registrieren.


Jede signifikante Zeile der Datei /etc/inetd.conf beschreibt einen Server in sieben Feldern (getrennt durch Leerzeichen):


Die TCP- oder UDP-Portnummer, oder der Dienstname (der einer Standardportnummer mit der Information, die in der Datei /etc/services enthalten ist, zugeordnet ist).


Der Socket-Typ: stream für eine TCP-Verbindung, dgram für UDP-Datagramme.


Das Protokoll: tcp oder udp.


Die Optionen: zwei mögliche Werte: wait oder nowait, um inetd mitzuteilen, ob es auf das Ende des gestarteten Prozesses warten soll, bevor es eine andere Verbindung annimmt, oder nicht. Für TCP-Verbindugen, die einen Kanal leicht mehrfach nutzen können, können Sie normalerweise nowait verwenden. Für Programme, die über UDP antworten, sollten Sie nowait nur dann verwenden, wenn der Server in der Lage ist, mehrere Verbindungen parallel zu verwalten. Sie können an dieses Feld einen Punkt anhängen, gefolgt von der Höchstzahl der Verbindungen, die pro Minute erlaubt ist (der Standardgrenzwert ist 40).


Der Benutzername des Benutzers, unter dessen Identität der Server laufen wird.


Der vollständige Pfad zu dem auszuführenden Serverprogramm.


Die Argumente: dies ist eine vollständige Liste der Argumente des Programms einschließlich seines eigenen Namens (argv[0] in C).


Das folgende Beispiel illustriert die häufigsten Fälle:


Auszug aus /etc/inetd.conf


talk dgram udp wait nobody.tty /usr/sbin/in.talkd in.talkd finger stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/in.fingerd ident stream tcp nowait nobody /usr/sbin/identd identd -i


tcpd


Das Programm tcpd wird häufig in /etc/inetd.conf benutzt. Es ermöglicht es, ankommende Verbindungen durch die Verwendung von Zugangskontrollregeln, die auf der Handbuchseite hosts_access5 dokumentiert sind, zu begrenzen, und die in den Dateien /etc/hosts.allow und /etc/hosts.deny konfiguriert sind. Sobald geklärt ist, dass die Verbindung authorisiert ist, führt tcpd den wirklichen Server aus (wie /usr/bin/in.fingerd in unserem Beispiel).


COMMUNITY Wietse Venema


Wietse Venema


Venema, Wietse


Wietse Venema, dessen Fachkenntnis im Bereich Sicherheit ihn zu einem angesehenen Programmierer gemacht hat, ist der Verfasser des tcpd-Programms. Er ist auch der Haupturheber von Postfix, dem modularen E-Mailserver (SMTP, Simple Mail Transfer Protocol), das dafür ausgelegt ist, sicherer und verlässlicher zu sein als sendmail, das sich durch eine lange Vorgeschichte von Sicherheitsschwachstellen auszeichnet.


ALTERNATIVE Weitere inetd Befehle


Es herrscht kein Mangel an Alternativen. Zusätzlich zu den bereits erwähnten openbsd-inetd und netkit-inetd gibt es inetutils-inetd, micro-inetd, rlinetd und xinetd.


Die jüngste Verkörperung eines Superservers bietet sehr interessante Möglichkeiten. Vor allem kann seine Konfiguration in mehrere Dateien aufgeteilt werden (natürlich gespeichert im Verzeichnis /etc/xinetd.d/), was das Leben eines Administrators leichter machen kann.


Aufgaben zeitlich festlegen mit cron und atd


cron


atd


scheduled commands


command scheduling


cron ist der für die Ausführung zeitlich festgelegter und sich wiederholender Befehle (täglich, wöchentlich usw.) zuständige Daemon; atd ist derjenige, der nur einmal auszuführende Befehle erledigt, aber zu einem bestimmten Zeitpunkt in der Zukunft.


In einem Unix-System sind viele Aufgaben für ihre regelmäßige Ausführung zeitlich festgelegt:


die Protokolldateien rotieren;


Aktualisieren der Datenbank mit dem Programm locate;


Backups;


Wartungsskripte (wie das Entfernen temporärer Dateien).


Standardmäßig können alle Nutzer die Ausführung von Aufgaben planen. Daher hat jeder Nutzer sein eigenes crontab, in dem er seine geplanten Befehle eintragen kann. Es kann durch den Aufruf von crontab -e editiert werden (sein Inhalt ist in der Datei /var/spool/cron/crontabs/benutzer gespeichert).


SICHERHEITcron oder atd einschränken


Sie können den Zugang zu cron einschränken, indem sie eine ausdrückliche Authorisierungsdatei (Whitelist) in /etc/cron.allow erstellen, in der sie nur diejenigen Benutzer angeben, denen es erlaubt ist, Befehle zeitlich festzulegen. Allen übrigen wird diese Fähigkeit automatisch entzogen. Um im umgekehrten Fall ein oder zwei Störenfriede auszusperren, könnten Sie ihre Benutzernamen in die ausdrückliche Verbotsliste (Blacklist) /etc/cron.deny schreiben. Das gleiche Merkmal ist auch für atd mit den Dateien /etc/at.allow und /etc/at.deny verfügbar.


Der Root-Benutzer hat sein eigenes crontab, kann aber auch die Datei /etc/crontab benutzen oder zusätzliche crontab-Dateien in das Verzeichnis /etc/cron.d schreiben. Die beiden letztgenannten Lösungen haben den Vorteil, das man mit ihnen die Benutzeridentität spezifizieren kann, die bei der Ausführung des Befehls verwendet werden muss.


Das Paket cron enthält standardmäßig einige zeitlich festgelegte Befehle, die folgendermaßen ausgeführt werden:


Programme im Verzeichnis /etc/cron.hourly/ stündlich;


Programme in /etc/cron.daily/ täglich;


Programme in /etc/cron.weekly/ wöchentlich;


Programme in /etc/cron.monthly/ monatlich.


Viele Debian-Pakete sind auf diesen Dienst angewiesen, sie legen Unterhaltungsskripte in diese Verzeichnisse, die den optimalen Betrieb ihrer Dienste sicherstellen.


Aufbau der Datei crontab


crontab


TIP Abkürzungen für cron


cron erkennt einige Abkürzungen, die die ersten fünf Felder eines crontab-Eintrags ersetzen. Sie entsprechen den üblichsten Planungsoptionen:


@yearly: jährlich (1. Januar um 00:00 Uhr);


@monthly: monatlich (am Ersten des Monats um 00:00 Uhr);


@weekly: wöchentlich (sonntags um 00:00 Uhr);


@daily: täglich (um 00:00 Uhr);


@hourly: stündlich (zu Beginn jeder Stunde).


SONDERFALL cron und Sommerzeit


In Debian berücksichtigt cron die Zeitumstellung (für die Sommerzeit oder genau genommen für jede bedeutende Änderung der Ortszeit) so gut wie möglich. So werden die Befehle, die während einer nicht existenten Stunde hätten ausgeführt werden sollen (zum Beispiel Aufgaben, die für 02:30 Uhr während der Zeitumstellung im Frühjahr geplant waren, da die Uhr um 02:00 Uhr direkt nach 03:00 Uhr springt) kurz nach der Zeitumstellung (das heißt um 03:00 Uhr Sommerzeit) ausgeführt. Auf der anderen Seite, im Herbst, wenn Befehle wiederholt ausgeführt würden (um 02:30 Uhr Sommerzeit und dann wieder eine Stunde später um 02:30 Uhr Normalzeit, da die Uhr um 03:00 Uhr Sommerzeit zurück nach 02:00 Uhr springt), werden sie nur einmal ausgeführt.


Seien Sie jedoch vorsichtig: wenn die Reihenfolge, in der verschiedene geplante Aufgaben und die Verzögerung zwischen den jeweiligen Ausführungszeitpunkten eine Rolle spielt, sollten Sie die Kompatibilität dieser Einschränkungen mit dem Verhalten von cron überprüfen; falls erforderlich, können Sie einen speziellen Zeitplan für die beiden problematischen Nächte des Jahres aufstellen.


Jede wesentliche Zeile eines crontab beschreibt einen zeitlich festgelegten Befehl mit den folgenden sechs (oder sieben) Feldern:


den Wert für die Minute (Zahl von 0 bis 59);


den Wert für die Stunde (von 0 bis 23);


den Wert für den Tag des Monats (von 1 bis 31);


den Wert für den Monat (von 1 bis 12);


den Wert für den Wochentag (von 0 bis 7, wobei 1 dem Montag entspricht und Sonntag sowohl durch 0 als auch durch 7 dargestellt wird; es ist auch möglich, die ersten drei Buchstaben des englischen Namens des Wochentages zu verwenden, wie Sun, Mon usw.;


der Benutzername, unter dessen Identität der Befehl ausgeführt werden muss (in der Datei /etc/crontab und in den Fragmenten, die sich in /etc/cron.d/ befinden, aber nicht in den eigenen crontab-Dateien des Benutzers);


der auszuführende Befehl (wenn die durch die ersten fünf Spalten festgelegten Bedingungen erfüllt sind).


Alle diese Einzelheiten sind auf der Handbuchseite crontab 5 dokumentiert.


Jeder Wert kann in Form einer Liste der möglichen Werte (durch Kommata getrennt) angegeben werden. Die Syntax a-b bezeichnet das Intervall aller Werte zwischen a und b. Die Syntax a-b/c bezeichnet das Interval mit einer schrittweisen Erhöhung um c (Beispiel: 0-10/2 bedeutet 0,2,4,6,8,10). Ein Stern * ist ein Platzhalter, der alle möglichen Werte vertritt.


Beispiel einer crontab-Datei


#Format #min hour day mon dow command # Daten jede Nacht um 19:25 h herunterladen 25 19 * * * $HOME/bin/get.pl # 08:00 Uhr, werktags (Montag bis Freitag) 00 08 * * 1-5 $HOME/bin/dosomething # den IRC proxy nach jedem Hochfahren neu starten @reboot /usr/bin/dircproxy


TIP Einen Befehl beim Hochfahren ausführen


Um einen Befehl einmalig unmittelbar nach dem Hochfahren des Rechners auszuführen, können Sie das Makro @reboot verwenden (ein einfacher Neustart von cron löst keinen Befehl aus, der mit @reboot eingerichtet worden ist). Dieses Makro ersetzt die ersten fünf Felder eines crontab-Eintrags.


Verwendung des Befehls at


at


Das at führt einen Befehl zu einem spezifischen Zeitpunkt in der Zukunft aus. Es nimmt die gewünschte Zeit und das gewünschte Datum als Befehlszeilenparameter sowie den auszuführenden Befehl in seiner Standardeingabe. Der Befehl wird dann ausgeführt, als sei er in der aktuellen Shell eingegeben worden. at sorgt sogar dafür, die gegenwärtige Umgebungseinstellung festzuhalten, um die gleichen Bedingungen zu reproduzieren, wenn es den Befehl ausführt. Die Zeit wird nach folgenden Regeln eingegeben: 16:12 oder 4:12pm bedeutet 16:12 Uhr. Das Datum kann in verschiedenen europäischen und westlichen Formaten angegeben werden, einschließlich DD.MM.YY (27.07.12, folglich den 27. Juli 2012 darstellend), YYYY-MM-DD (was dasselbe Datum in der Form 2012-07-27 darstellt), MM/DD/[CC]YY (d.h. 12/25/12 oder 12/25/2012 wird der 25. Dezember 2012 sein), or einfach MMDD[CC]YY (so dass 122512 oder 12252012 jeweils den 25. Dezember 2012 darstellen). Ohne diese Angabe wird der Befehl ausgeführt, sobald die Uhr die angegebene Zeit erreicht (am selben Tag oder morgen, falls diese Zeit am selben Tag bereits vorüber ist). Sie können auch einfach "today" oder "tomorrow" schreiben, was sich selbst erklärt.


$ at 09:00 27.07.12 <<END > echo "Vergiss nicht, Raphaël zum Geburtstag zu gratulieren!" \ > | mail lolando@debian.org > END Hinweis: Befehle werden durch /bin/sh ausgeführt Job 31 am Fri 27. Jul 09:00:00 2012


Eine alternative Syntax verschiebt die Ausführung um eine bestimmte Zeit: at now + zahl dauer. Die dauer kann minuten, stunden, tage oder wochen sein. Die zahl zeigt lediglich die Anzahl der genannten Einheiten an, die vor der Ausführung des Befehls verstrichen sein müssen.


Um eine mit cron geplante Aufgabe zu annullieren, führen Sie einfach crontab -e aus und löschen die entsprechende Zeile in der crontab-Datei. Für at-Aufgaben ist es fast genauso einfach: Führen Sie atrm aufgabennummer aus. Die Nummer einer Aufgabe wird vom at-Befehl angezeigt, wenn sie sie planen, aber Sie können sie auch durch den Befehl atq wiederfinden, der die aktuelle Liste der geplanten Aufgaben ausgibt.


atrm


atq


Asynchrone Aufgaben planen: anacron


anacron ist ein Daemon, der cron für Rechner ergänzt, die nicht ständig laufen. Da regelmäßige Aufgaben normalerweise für die Nacht geplant sind, werden sie nie ausgeführt, falls der Rechner zu dieser Zeit ausgeschaltet ist. Der Zweck von anacron ist, sie auszuführen unter Berücksichtigung der Zeiten, in denen der Rechner nicht läuft.


anacron


Bitte beachten Sie, dass anacron solche Aktivitäten häufig einige Minuten nach dem Hochfahren des Rechners ausführen wird, was den Computer langsamer reagieren lässt. Daher werden Aufgaben in der Datei /etc/anacrontab mit dem Befehl nice gestartet, was ihre Ausführungspriorität reduziert und so ihren Einfluss auf das übrige System begrenzt. Vorsicht, das Format dieser Datei ist nicht das gleiche wie /etc/crontab; falls Sie besondere Anforderungen an anacron haben, sehen Sie auf der Handbuchseite anacrontab 5 nach.


ZURÜCK ZU DEN GRUNDLAGEN Prioritäten und der Befehl nice


Unix-Systeme (und damit auch Linux) sind Mehrprogramm- und Mehrplatzsysteme. So können mehrere Prozesse parallel laufen und verschiedenen Benutzern gehören: der Kernel vermittelt den Ressourcenzugang zwischen den verschiedenen Prozessen. Als Teil dieser Aufgabe verfügt er über ein Prioritätenkonzept, das es ihm erlaubt, je nach Bedarf bestimte Prozesse gegenüber anderen zu begünstigen. Wenn Sie wissen, dass ein Prozess mit geringer Priorität laufen kann, können Sie dies anzeigen, indem Sie ihn mit nice programm laufen lassen. Das Programm wird dann einen geringeren Anteil an der CPU einnehmen und weniger Auswirkungen auf andere laufende Prozesse haben. Falls kein anderer Prozess laufen muss, wird das Programm natürlich nicht künstlich zurückgehalten.


nice arbeitet mit Stufen von "niceness": die positiven Stufen (von 1 bis 19) verringern zunehmend die Priorität, während die negativen Stufen (von -1 bis -20) sie erhöhen - aber nur Root kann diese negativen Stufen benutzen. Falls nichts anderes angegeben ist (siehe die Handbuchseite nice 1), erhöht nice die aktuelle Stufe um 10.


Falls Sie bemerken, dass eine bereits laufende Aufgabe mit nice hätte gestartet werden sollen, ist es nicht zu spät, dies zu korrigieren; der Befehl renice ändert die Priorität eines bereits laufenden Prozesses in die eine oder andere Richtung (es ist jedoch dem Root-Benutzer vorbehalten, die "niceness" eines Prozesses zu reduzieren).


Das Installieren des anacron-Pakets deaktiviert die Ausführung der Skripte in den Verzeichnissen /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/ durch cron. Hierdurch wird eine doppelte Ausführung durch anacron und cron vermieden. Der Befehl cron bleibt jedoch aktiv und führt die übrigen geplanten Aufgaben aus (vor allem die von den Benutzern geplanten).


Quota


quota


Das Quota-System erlaubt es, die Zuteilung von Speicherplatz an einen Benutzer oder eine Gruppe von Benutzern zu begrenzen. Um es einzurichten, benötigen Sie einen Kernel, der es unterstützt (der mit der Option CONFIG_QUOTA kompiliert wurde) - was bei Debian-Kerneln der Fall ist. Die Quota-Verwaltungssoftware befindet sich in dem Debian-Paket quota.


Um die Optionen usrquota und grpquota in einem Dateisystem zu aktivieren, müssen Sie sie in /etc/fstab jeweils für die Benutzer- und die Gruppen-Quota angeben. Durch einen Neustart des Rechners werden dann die Quota während der Inaktivität der Festplatte aktualisiert (eine notwendige Voraussetzung für das korrekte Erfassen bereits genutzten Speicherplatzes).


Der Befehl edquota benutzer (oder edquota -g gruppe) erlaubt es Ihnen, die Grenzwerte zu ändern und zugleich die aktuelle Verwendung des Speicherplatzes zu überprüfen.


edquota


WEITERE SCHRITTE Quota mit einem Skript festlegen


setquota


Das Programm setquota kann dazu verwendet werden, mithilfe eines Skripts selbsttätig zahlreiche Quota zu ändern. Seine Handbuchseite setquota 8 beschreibt ausführlich die zu verwendende Syntax.


Das Quota-System erlaubt es Ihnen, vier Grenzen zu setzen:


zwei Grenzen ("weich" und "hart" genannt) beziehen sich auf die Anzahl der verwendeten Blöcke. Falls das Dateisystem mit einer Blockgröße von 1 Kilobyte erstellt wurde, enthält ein Block 1024 Bytes derselben Datei. Unvollständig gefüllte Blöcke führen daher zu einem Verlust an Speicherplatz. Eine Quota von 100 Blöcken, die es theoretisch erlaubt, 102.400 Bytes zu speichern, wird mit nur 100 Dateien zu je 500 Bytes vollständig gefüllt sein, was insgesamt nur 50.000 Bytes entspricht.


zwei Grenzen (weich und hart) beziehen sich auf die Anzahl der verwendeten Inodes. Jede Datei belegt wenigstens einen Inode, um Informationen über sich zu speichern (Berechtigungen, Eigentümer, Zeitstempel des letzten Zugriffs usw.). Es ist daher eine Grenze für die Anzahl von Benutzerdateien.


Eine "weiche" Grenze kann vorübergehend überschritten werden; der Benutzer wird lediglich durch den Befehl warnquota, der gewöhnlich durch cron aufgerufen wird, gewarnt, dass er die Quota überschreitet. Eine "harte" Grenze kann niemals überschritten werden; das System wird jede Operation abweisen, die das Überschreiten einer harten Quota herbeiführen würde.


WORTSCHATZ Blöcke und Inodes


Block (Speicherplatte)


Inode


Das Dateisystem unterteilt die Festplatte in Blöcke - kleine zusammenhängende Bereiche. Die Größe dieser Blöcke wird während der Erstellung des Dateisystems festgelegt und variiert normalerweise zwischen 1 und 8 Kilobytes.


Ein Block kann entweder dazu genutzt werden, die tatsächlichen Daten einer Datei zu speichern oder die vom Dateisystem verwendeten Meta-Daten. Zu diesen Meta-Daten gehören insbesondere die Inodes. Ein Inode belegt einen Block auf der Festplatte (aber dieser Block wird bei der Block-Quota nicht berücksichtigt, sondern nur bei der Inode-Quota) und enthält sowohl Informationen über die Datei, zu der er gehört (Name, Eigentümer, Berechtigungen usw.), als auch die Zeiger zu den Datenblöcken, die tatsächlich genutzt werden. Für sehr große Dateien, die mehr Blöcke belegen, als in einem einzelnen Inode referenziert werden können, gibt es ein indirektes Blocksystem; der Inode verweist auf eine Liste von Blöcken, die nicht direkt Daten enthalten, sondern eine Liste anderer Blöcke.


warnquota


Mit dem Befehl edquota -t können Sie eine höchstens erlaubte "Schonfrist" festlegen, bis zu der eine weiche Grenze überschritten werden darf. Nach Ablauf dieser Frist wird die weiche Grenze wie eine harte behandelt werden, und der Benutzer wird seinen Speicherplatzverbrauch auf diese Grenze zurückführen müssen, um etwas auf die Festplatte schreiben zu können.


WEITERE SCHRITTE Eine Standardquota für neue Benutzer einrichten


Um selbsttätig eine Quota für neue Benutzer einzurichten, müssen Sie (mit edquota oder setquota) einen Muster-Benutzer konfigurieren und seinen Benutzernamen in der QUOTAUSER-Variablen der Datei /etc/adduser.conf angeben. Diese Quota-Konfiguration wird dann selbsttätig auf jeden Nutzer angewendet, der mit dem Befehl adduser erstellt wird.


Das Erstellen von Sicherheitskopien ist eine der Hauptaufgaben eines Administrators, aber es ist ein kompliziertes Thema mit mächtigen Werkzeugen, die häufig schwierig zu bedienen sind.


Sicherheitskopie


Wiederherstellung


Es gibt viele Programme, wie zum Beispiel amanda, ein Client/Server-System mit zahlreichen Optionen, deren Konfigurierung recht schwierig ist. BackupPC ist auch ein Client/Server-Lösungskonzept, jedoch mit einer Web-Schnittstelle für die Konfigurierung, die es benutzerfreundlicher macht. Dutzende weiterer Debian-Pakete dienen als Lösungskonzepte zur Erstellung von Sicherheitskopien, wie Sie leicht mit dem Befehl apt-cache search backup bestätigen können.


amanda


BackupPC


Anstatt einige von ihnen im Einzelnen zu erklären, wird dieser Abschnitt die Überlegungen der Administratoren von Falcot Corp. bei der Festlegung ihrer Backup-Strategie vorstellen.


Bei Falcot Corp. haben Datensicherungen zwei Ziele: versehentlich gelöschte Dateien wiederherzustellen und schnell jeden Rechner (Server oder Arbeitsplatzrechner) wiederherzustellen, dessen Festplatte versagt hat.


Datensicherung mit rsync


Da Bandsicherungen als zu langsam und teuer erachtet wurden, werden die Daten auf den Festplatten eines speziell hierfür bestimmten Servers gesichert, auf dem die Verwendung eines Software-RAIDs (siehe ) die Daten vor einem Festplattenausfall schützen wird. Arbeitsplatzrechner werden nicht individuell gesichert, sondern Benutzer darüber benachrichtigt, dass ihr persöniches Konto auf dem Dateiserver ihrer Abteilung gesichert werden wird. Der Befehl rsync (aus dem gleichnamigen Paket) wird täglich zur Sicherung dieser verschiedenen Server benutzt.


rsync


ZURÜCK ZU DEN GRUNDLAGEN Die feste Verknüpfung, ein zweiter Name für die Datei


Dateiverknüpfungfeste Verknüpfung


feste Verknüpfung


Eine feste Verknüpfung kann, im Gegensatz zu einer symbolischen Verknüpfung, nicht von der verknüpften Datei unterschieden werden. Das Erstellen einer festen Verknüpfung ist im Wesentlichen dasselbe, wie einer bestehenden Datei einen zweiten Namen zu geben. Daher entfernt das Löschen einer festen Verknüpfung nur einen der Namen, die mit der Datei verbunden sind. Solange noch ein weiterer Name der Datei zugeordnet ist, bleiben die darin enthaltenen Daten auf dem Dateisystem bestehen. Interessanterweise nimmt eine feste Verknüpfung, im Gegensatz zu einer Kopie, keinen zusätzlichen Platz auf einer Festplatte ein.


Eine feste Verknüpfung wird durch den Befehl ln ziel verknüpfung erstellt. Die Datei verknüpfung ist dann ein neuer Name für die Datei ziel. Feste Verknüpfungen können nur auf demselben Dateisystem erstellt werden, während symbolische Verknüpfungen dieser Einschränkung nicht unterliegen.


Der verfügbare Festplattenspeicherplatz verhindert die Durchführung einer vollständigen täglichen Datensicherung. Von daher geht dem Befehl rsync eine Duplizierung des Inhalts der vorherigen Datensicherung mithilfe von festen Verknüpfungen voraus, die den Verbrauch von zu viel Festplattenspeicherplatz verhindert. Der rsync-Prozess ersetzt dann nur die Dateien, die seit der vorherigen Datensicherung verändert worden sind. Auf diese Weise kann eine große Anzahl von Datensicherungen auf relativ kleinem Raum untergebracht werden. Da alle Datensicherungen unmittelbar verfügbar und zugänglich sind (zum Beispiel in verschiedenen Verzeichnissen eines bestimmten Netzlaufwerks), können Sie schnell Vergleiche zwischen zwei bestimmten Zeitpunkten anstellen.


Kopie, Sicherungskopie


DatensicherungKopie


dirvish


Dieser Datensicherungsvorgang kann mit dem Programm dirvish leicht umgesetzt werden. Es verwendet einen Sicherungsspeicherplatz ("bank" in seiner Sprache), in den er mit Zeitstempeln versehene Kopien eines Satzes von Sicherungsdateien ablegt (diese Sätze werden in der dirvish-Dokumenation "vaults" genannt).


Die Hauptkonfiguration befindet sich in der Datei /etc/dirvish/master.conf. Sie legt den Ort des Speicherplatzes für die Dateisicherung fest, die Liste der zu verwaltenden "vaults" und Standardwerte für den Verfallstermin der Dateisicherungen. Der Rest der Konfiguration befindet sich in den Dateien bank/vault/dirvish/default.conf und enthält die spezifische Konfiguration des jeweiligen Dateisatzes.


Die Datei /etc/dirvish/master.conf


bank: /backup exclude: lost+found/ core *~ Runall: root 22:00 expire-default: +15 days expire-rule: # MIN HR DOM MON DOW STRFTIME_FMT * * * * 1 +3 months * * 1-7 * 1 +1 year * * 1-7 1,4,7,10 1


Die bank-Einstellung bezeichnet das Verzeichnis, in dem die Dateisicherungen gespeichert werden. Die exclude-Einstellung erlaubt es, Dateien oder Dateitypen von der Sicherung auszuschließen. Das Runall ist eine Liste von Dateisätzen, die mit einem Zeitstempel für jeden Satz gesichert werden sollen, wodurch es möglich ist, der Kopie das korrekte Datum zuzuordnen für den Fall, dass die Dateisicherung nicht genau zu der vorgesehenen Zeit ausgelöst wird. Sie müssen eine Zeit kurz vor dem tatsächlichen Ausführungszeitpunkt angeben (was in Debian standardmäßig 22:04 h ist in Übereinstimmung mit /etc/cron.d/dirvish). Schließlich bestimmen die Einstellungen expire-default und expire-rule die Verfallsregeln für Dateisicherungen. Das obenstehende Beispiel behält Dateisicherungen unbefristet, die am ersten Sonntag jeden Quartals erstellt worden sind, löscht diejenigen vom ersten Sonntag jeden Monats nach einem Jahr und die von den übrigen Sonntagen nach drei Monaten. Sonstige tägliche Dateisicherungen werden 15 Tage lang aufbewahrt. Die Reihenfolge der Regeln ist wichtig. Dirvish verwendet die letzte passende Regel oder die expire-default-Regel, falls keine andere expire-rule passt.


IN DER PRAXIS Planmäßiger Verfall


Die Verfallsregeln werden nicht von dirvish-expire benutzt, um seine Aufgabe zu erledigen. Vielmehr werden die Verfallsregeln angewendet, wenn eine neue Sicherungskopie erstellt wird, um das Verfallsdatum zu bestimmen, das dieser Kopie zugeordnet wird. dirvish-expire geht einfach die gespeicherten Kopien durch und löscht diejenigen, deren Verfallsdatum bereits vergangen ist.


Die Datei /backup/root/dirvish/default.conf


client: rivendell.falcot.com tree: / xdev: 1 index: gzip image-default: %Y%m%d exclude: /var/cache/apt/archives/*.deb /var/cache/man/** /tmp/** /var/tmp/** *.bak


Das obenstehende Beispiel legt den Satz der zu sichernden Dateien fest: dies sind Dateien auf dem Rechner rivendell.falcot.com (für eine lokale Dateisicherung legen Sie einfach den Namen des örtlichen Rechners fest, wie er von hostname angezeigt wird), genauer gesagt, diejenigen im Wurzelverzeichnis (tree: /) außer denen, die unter exclude aufgelistet sind. Die Dateisicherung wird auf den Inhalt eines Dateisystems (xdev: 1) beschränkt sein. Es wird Dateien von anderen Einhängepunkten nicht einschließen. Ein Index der gesicherten Dateien wird erzeugt werden (index: gzip), und das Abbild wird nach Maßgabe des aktuellen Datums benannt werden (image-default: %Y%m%d).


Es gibt zahlreiche Optionen, die alle auf der Handbuchseite dirvish.conf5 dokumentiert sind. Sobald die Konfigurationsdateien erstellt sind, müssen Sie jeden Dateisatz mit dem Befehl dirvish --vault vault --init initialisieren. Von da an wird der tägliche Aufruf von dirvish-runall selbsttätig eine neue Sicherungskopie erstellen, nachdem die verfallenen gelöscht worden sind.


IN DER PRAXIS Entfernte Dateisicherung über SSH


Wenn dirvish Daten auf einen entfernten Rechner sichern muss, wird es ssh verwenden, um sich mit ihm zu verbinden, und wird rsync als Server starten. Dies setzt voraus, dass der Root-Benutzer sich automatisch mit ihm verbinden kann. Genau dies ist bei der Verwendung eines SSH-Legitimierungsschlüssels möglich (siehe ).


Rechner ohne Sicherheitskopien wiederherstellen


Arbeitsplatzrechner, bei denen keine Sicherungskopien erstellt werden, können leicht von CD-ROMs, die mit dem Programm mondo erstellt worden sind, regeneriert werden. Diese startfähigen CD-ROMs ermöglichen eine vollständige Re-Installation des Rechnersystems. Aber Vorsicht: Dateien, die nicht Teil des Systems oder des Benutzerverzeichnisses des betreffenden Benutzers sind, werden durch mondo nicht gesichert. Dies betrifft zum Beispiel die lokalen crontabs des Benutzers wie auch alle Veränderungen der Systemkonfiguration seit der Erstellung der CD-ROM.


mondo


Dateisicherungauf CD-ROM


CD-ROMDateisicherung auf CD-ROM


Die Falcot Corp. Administratoren sind sich der Grenzen ihrer Dateisicherungsstrategie bewusst. Da sie weder den Dateisicherungsserver noch ein Band in einem feuersicheren Tresor schützen können, haben sie ihn in einem getrennten Raum aufgestellt, so dass ein Unglück, wie ein Feuer im Serverraum nicht die Dateisicherungen zusammen mit allem anderen zerstören würde. Darüberhinaus führen sie wöchentlich eine inkrementelle Dateisicherung auf CD-ROM durch - nur Dateien, die seit der letzten Dateisicherung verändert wurden, sind hierin einbezogen.


WEITERE SCHRITTE SQL- und LDAP-Dienste sichern


Viele Dienste (wie SQL- oder LDAP-Datenbanken) können nicht einfach durch das Kopieren ihrer Dateien gesichert werden (es sei denn, sie werden während der Erstellung der Dateisicherungen ordnungsgemäß angehalten, was häufig problematisch ist, weil sie ständig verfügbar sein sollen). Daher ist es erforderlich, ein "Export"-Verfahren zu benutzen, um so einen Datenbank-"Dump" zu erstellen, der auf sichere Weise gespeichert werden kann. Diese Dumps sind häufig recht groß, aber können gut komprimiert werden. Um den erforderlichen Speicherplatz zu verringern, werden Sie wöchentlich nur eine vollständige Textdatei speichern und täglich ein diff, die etwa mit einem Befehl wie diff gestrige_datei heutige_datei erstellt wird. Das Programm xdelta erzeugt inkrementelle Differenzen aus binären Dumps.


xdelta


Dump


KULTUR TAR, der Standard für Bandsicherungen


Dateisicherungauf Band


Band, Dateisicherung


TAR


Früher bestand der einfachste Weg, eine Dateisicherung in Unix durchzuführen, darin, ein TAR-Archiv auf einem Band zu speichern. Der tar-Befehl erhielt sogar seinen Namen von "TapeARchive".


Wechsel im laufenden Betrieb: hotplug


Einführung


Das hotplug-Subsystem des Kernels läd Treiber für Peripheriegeräte, die im laufenden Betrieb gewechselt werden können. Dies schließt USB-Geräte (zunehmend verbreitet), PCMCIA (übliche Erweiterungskarten für Laptops), IEEE 1394 (auch "Firewire" oder "I-Link" genannt), einige SATA-Festplatten und für manche Spitzenserver sogar PCI- und SCSI-Geräte ein. Der Kernel verfügt über eine Datenbank, die jeder Geräte-ID den erforderlichen Treiber zuordnet. Diese Datenbank wird während des Hochfahrens dazu benutzt, alle Treiber für die Peripheriegeräte zu laden, die auf den verschiedenen oben genannten Bussen entdeckt wurden, aber auch wenn ein zusätzliches Hotplug-Gerät verbunden wird. Sobald ein Treiber geladen ist, wird eine Nachricht an udevd geschickt, so dass es einen entsprechenden Eintrag in /dev/ erstellen kann.


hotplug


hotplug


USB


IEEE1394


PCMCIA


SATA


Das Namensproblem


Vor dem Aufkommen von Hotplug-Verbindungen war es leicht, einem Gerät einen festen Namen zuzuordnen. Er beruhte einfach auf der Position des Gerätes auf seinem jeweiligen Bus. Dies ist jedoch nicht möglich, wenn solche Geräte auf dem Bus kommen und gehen können. Der typische Fall ist die Benutzung einer Digitalkamera und eines USB-Sticks, die dem Rechner beide als Plattenlaufwerke erscheinen. Das als erstes angeschlossene könnte /dev/sdb sein und das zweite /dev/sdc (während /dev/sda die eigene Festplatte des Rechners darstellt). Der Gerätename ist nicht festgelegt; er hängt von der Reihenfolge ab, in der die Geräte angeschlossen werden.


Zusätzlich verwenden mehr und mehr Treiber dynamische Werte für die Haupt- und Nebennummern der Geräte, wodurch es unmöglich wird, feststehende Einträge für bestimmte Geträge zu haben, da diese wesentlichen Kennzeichen sich nach einem Neustart ändern können.


udev wurde entwickelt, um genau dieses Problem zu lösen.


IN DER PRAXIS Netzkartenverwaltung


Zahlreiche Rechner haben mehrere Netzwerkkarten (häufig zwei Kabelschnittstellen und eine Wifi-Schnittstelle), und mit Hotplug-Unterstützung auf den meisten Bustypen kann der 2.6 Kernel feste Bezeichnungen der Netzwerkschnittstellen nicht mehr sicherstellen. Aber ein Benutzer, der sein Netzwerk in /etc/network/interfaces konfigurieren will, benötigt eine feste Bezeichnung!


Es wäre schwierig, jeden Benutzer zu bitten, seine eigenen udev-Regeln zu erstellen, um dieses Problem anzugehen. Deshalb wurde udev in einer recht eigenartigen Weise konfiguriert; beim ersten Hochfahren (und überhaupt jedes Mal, wenn eine neue Netzwerkkarte erscheint) verwendet es den Namen der Netzwerkschnittstelle und seine MAC-Adresse, um neue Regeln zu erstellen, die denselben Namen bei nachfolgenden Rechnerstarts wieder zuweisen. Diese Regeln sind in /etc/udev/rules.d/70-persistent-net.rules abgespeichert.


Dieses Vorgehen hat einige Nebenwirkungen, die Sie kennen sollten. Nehmen wir den Fall eines Rechners, der nur eine PCI-Netzwerkkarte hat. Die Netzwerkschnittstelle heißt natürlich eth0. Nun nehmen wir an, dass die Karte ausfällt und vom Administrator ersetzt wird; die neue Karte wird eine neue MAC-Adresse haben. Da der alten Karte die Bezeichnung eth0 zugewiesen war, wir der neuen eth1 zugewiesen, obwohl die alte für immer fort ist (und das Netzwerk wird nicht funktionieren, weil /etc/network/interfaces voraussichtlich eine eth0-Schnittstelle konfigurieren wird). In diesem Fall genügt es, einfach vor einem Neustart des Rechners die Datei /etc/udev/rules.d/70-persistent-net.rules zu löschen. Der neuen Karte wird dann die erwartete Bezeichnung eth0 gegeben.


Wie udev funktioniert


Wenn udev vom Kernel über Erscheinen eines neuen Gerätes benachrichtigt wird, sammelt es verschiedene Informationen über das betreffende Gerät, indem es die entsprechenden Einträge in /sys/ zurate zieht, vor allem diejenigen, die es eindeutig identfizieren (MAC-Adresse bei einer Netzwerkkarte, Seriennummer bei einigen USB-Geräten usw.).


Mit all diesen Informationen versehen konsultiert udev dann alle in /etc/udev/rules.d/ und /lib/udev/rules.d/ enthaltenen Regeln. Im Verlauf dieses Vorgangs entscheidet es, wie das Gerät bezeichnet werden soll, welche symbolische Verknüpfung erstellt werden soll (um ihm einen alternativen Namen zu geben), und welche Befehle ausgeführt werden sollen. All diese Dateien werden der Reihe nach konsultiert und alle Regeln nacheinander ausgewertet (außer wenn eine Datei "GOTO"-Anweisungen verwendet). So kann es mehrere Regeln geben, die sich auf einen gegebenen Vorgang beziehen.


Die Syntax von Regeldateien ist recht einfach: jede Zeile enthält Auswahlkriterien und die Festsetzung von Variablen. Erstere werden gebraucht, um Vorgänge auszuwählen, auf die reagiert werden muss, und letztere bestimmen die zu ergreifenden Maßnahmen. Sie sind alle einfach durch Kommata getrennt, und der Operator teilt sie implizit in Auswahlkriterien (durch Vergleichsoperatoren wie == oder !=) und Zuordnungsanweisungen ein (durch Operatoren wie =, += oder :=).


Vergleichsoperatoren werden bei den folgenden Variablen verwendet:


KERNEL: die Bezeichnung, die der Kernel dem Gerät gibt;


ACTION: die dem Vorgang entsprechende Aktion ("add", wenn ein Gerät hinzugefügt wurde, "remove", wenn es entfernt worden ist);


DEVPATH: der Pfad zum /sys/-Eintrag des Geräts;


SUBSYSTEM: das Kernel-Subsystem, das die Anfrage gestellt hat (es gibt viele, aber einige Beispiele sind "usb", "ide", "net", "firmware" usw.);


ATTR{attribut}: Dateiinhalt der attribute-Datei im /sys/$devpath/-Verzeichnis des Geräts. Hier finden Sie die MAC-Adresse und andere bus-spezifische Kennungen;


KERNELS, SUBSYSTEMS und ATTRS{attributes} sind Varianten, die versuchen, den verschiedenen Optionen auf einem der übergeordneten Geräte des vorliegenden Geräts zu entsprechen;


PROGRAM: überträgt den Test an das angegebene Programm (wahr, falls es 0 ausgibt, unwahr, falls nicht). Der Inhalt der Standardausgabe des Programms wird gespeichert, so dass er vom RESULT-Test erneut verwendet werden kann;


RESULT: führt Tests auf der Standardausgabe durch, die während des letzten Aufrufs von PROGRAM gespeichert wurden.


Der richtige Operand kann Strukturausdrücke benutzen, um mehreren Werten gleichzeitig zu entsprechen. Zum Beispiel entspricht * jeder Zeichenkette (selbst einer leeren); ? entspricht jedem Zeichen und [] entspricht dem Zeichensatz zwischen den eckigen Klammern (oder seinem Gegenteil, falls das erste Zeichen ein Ausrufezeichen ist und zusammenhängende Reihen von Zeichen, wie a-z, angegeben sind).


Was die Zuweisungsoperatoren betrifft, so weist = einen Wert zu (und ersetzt den gegenwärtigen Wert); im Falle einer Liste wird sie geleert und enthält dann nur den zugewiesenen Wert. := macht dasselbe, aber unterbindet spätere Veränderungen derselben Variablen. += fügt einer Liste eine Position hinzu. Die folgenden Variablen können verändert werden:


NAME: der Dateiname des Geräts, der in /dev/ erstellt wird. Nur die erste Zuweisung zählt; die übrigen werden ignoriert.


SYMLINK: die Liste symbolischer Verknüpfungen, die auf dasselbe Gerät zeigen;


OWNER, GROUP und MODE legen den Eigentümer und die Gruppe fest, denen das Gerät gehört, sowie die dazugehörige Berechtigung;


RUN: die Liste der als Reaktion auf dieses Ereignis auszuführenden Programme.


Die Werte, die diesen Variablen zugewiesen werden, können eine Reihe von Ersetzungen benutzen:


$kernel oder %k: entspricht KERNEL;


$number or %n: die Ordnungszahl des Geräts, zum Beispiel wäre dies "3" für sda3;


$devpath oder %p: entspricht DEVPATH;


$attr{attribute} oder %s{attribute}: entspricht ATTRS{attribute};


$major oder %M: die Major-Gerätenummer im Kernel;


$minor oder %m: die Minor-Gerätenummer im Kernel;


$result oder %c: die Zeichenkettenausgabe des letzten von PROGRAM aufgerufenen Programms;


und schließlich %% und $$ für das Prozent- beziehungsweise Dollarzeichen.


Die obenstehenden Listen sind nicht vollständig (sie enthalten nur die wichtigsten Parameter), jedoch sollte die Handbuchseite udev7 es sein.


Ein konkretes Beispiel


Lassen Sie uns den Fall eines einfachen USB-Sticks betrachten und versuchen, ihm eine feststehende Bezeichnung zu geben. Zunächst müssen Sie die Elemente finden, die ihn eindeutig identifizieren. Hierzu stecken Sie ihn ein und führen den Befehl udevadm info -a -n /dev/sdc aus (wobei Sie /dev/sdc durch den Namen ersetzen, der dem Stick tatsächlich zugewiesen ist).


# udevadm info -a -n /dev/sdc [...] looking at device '/devices/pci0000:00/0000:00:10.3/usb1/1-2/1-2.2/1-2.2:1.0/host9/target9:0:0/9:0:0:0/block/sdc': KERNEL=="sdc" SUBSYSTEM=="block" DRIVER=="" ATTR{range}=="16" ATTR{ext_range}=="256" ATTR{removable}=="1" ATTR{ro}=="0" ATTR{size}=="126976" ATTR{alignment_offset}=="0" ATTR{capability}=="53" ATTR{stat}==" 51 100 1208 256 0 0 0 0 0 192 25 6" ATTR{inflight}==" 0 0" [...] looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-2/1-2.2/1-2.2:1.0/host9/target9:0:0/9:0:0:0': KERNELS=="9:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS{device_blocked}=="0" ATTRS{type}=="0" ATTRS{scsi_level}=="3" ATTRS{vendor}=="I0MEGA " ATTRS{model}=="UMni64MB*IOM2C4 " ATTRS{rev}==" " ATTRS{state}=="running" [...] ATTRS{max_sectors}=="240" [...] looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-2/1-2.2': KERNELS=="9:0:0:0" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="iCfg" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bmAttributes}=="80" ATTRS{bMaxPower}=="100mA" ATTRS{urbnum}=="398" ATTRS{idVendor}=="4146" ATTRS{idProduct}=="4146" ATTRS{bcdDevice}=="0100" [...] ATTRS{manufacturer}=="USB Disk" ATTRS{product}=="USB Mass Storage Device" ATTRS{serial}=="M004021000001" [...]


Um eine neue Regel zu erstellen, können Sie Tests für die Variablen des Geräts wie auch für die eines übergeordneten Geräts durchführen. Der obenstehende Fall ermöglicht es uns, zwei Regeln wie die folgenden zu erstellen:


KERNEL=="sd?", SUBSYSTEM=="block", ATTRS{serial}=="M004021000001", SYMLINK+="usb_key/disk" KERNEL=="sd?[0-9]", SUBSYSTEM=="block", ATTRS{serial}=="M004021000001", SYMLINK+="usb_key/part%n"


Sobald diese Regeln in einer Datei festgehalten sind, die zum Beispiel /etc/udev/rules.d/010_local.rules heißt, können Sie den USB-Stick einfach entfernen und wieder einstecken. Sie sehen dann, dass /dev/usb_key/disk die dem USB-Stick entsprechende Platte ist und /dev/usb_key/part1 ihre erste Partition.


WEITERE SCHRITTE Fehlersuche in udevs Konfiguration


Wie viele Daemons, so speichert auch udevd Protokolle in /var/log/daemon.log. Jedoch sind sie standardmäßig nicht sehr ausführlich und reichen gewöhnlich nicht aus, um zu verstehen, was vor sich geht. Der Befehl udevadm control --log-priority=info erhöht den Grad der Ausführlichkeit und behebt dieses Problem. udevadm control --log-priority=err setzt ihn wieder auf den ursprünglichen Ausführlichkeitsgrad zurück.


Energiesteuerung


Energieverwaltung


Verwaltung, Energieverwaltung


Das Thema Energieverwaltung ist häufig problembehaftet. So erfordert das ordnungsgemäße Versetzen des Rechners in den Bereitschaftsbetrieb, dass alle Gerätetreiber des Rechners wissen, wie die Geräte in Stand-by versetzt werden, und dass sie sie bei der erneuten Betriebsaufnahme wieder ordnungsgemäß konfigurieren. Leider gibt es noch viele Geräte, die unter Linux nicht korrekt in den Wartebetrieb übergehen, da ihre Hersteller die erforderlichen Spezifikationen nicht bereitgestellt haben.


BEACHTENSWERT Software im Bereitschaftsbetrieb


Bereitschaft


Software Bereitschaftsbetrieb


Bereitschaftsbetrieb


Ruhezustand


Unter dem Banner des Software-Bereitschaftsbetriebs laufen mehrere neuere Bemühungen, unter Linux einen zuverlässigen Ruhezustand auf einer Platte oder im Speicher zu integrieren. Die jüngsten Kernel sind in dieser Beziehung relativ verlässlich, wenn sie zusammen mit Programmen des Pakets uswsusp eingesetzt werden. Leider sind Probleme im Zusammenhang mit dem Ruhezustand jedoch noch keine ferne Geschichte, und Sie sollten Ihre Hardware testen, bevor Sie ihrer Fähigkeit, aus dem Ruhezustand aufzuwachen, zu sehr vertrauen.


Für diejenigen, die mehr darüber erfahren möchten, wie der Ruhezustand mit ACPI funktioniert, hat Matthew Garrett einen ausgezeichneten Artikel zu diesem Thema in seinem Blog. Garrett, Matthew Matthew Garrett


Advanced Power Management (APM)


Die Steuerung von APM (Advanced Power Management) ist in allen Debian-Kerneln vorhanden, aber standardmäßig ausgeschaltet. Um sie zu aktivieren, fügen Sie die Option apm=on zu den Parametern hinzu, die beim Hochfahren an den Kernel weitergeleitet werden. Bei LILO fügen Sie die Anweisung append="apm=on" zu dem Block hinzu, der angibt, welches Image zu laden ist (in der Datei /etc/lilo.conf) und starten lilo neu. Bei GRUB2 fügen Sie in der Datei /etc/default/grub einfach apm=on zu den Variablen hinter GRUB_CMDLINE_LINUX= hinzu und führen update-grub aus, um den Inhalt des Boot-Menüs zu aktualisieren.


APM


Advanced Power Management


Das Paket apmd stellt einen Daemon bereit, der nach Ereignissen Ausschau hält, die mit der Energieverwaltung in Zusammenhang stehen (das Umschalten zwischen Netz- und Batteriebetrieb bei einem Laptop usw.), und ermöglicht es Ihnen, als Reaktion hierauf bestimmte Befehle auszuführen.


apmd


Heutzutage hat APM wirklich nur noch auf älteren Rechnern, die ACPI nicht richtig unterstützen, eine Daseinsberechtigung. In allen anderen Fällen sollte ACPI verwendet werden.


Modernes Energiesparen: Advanced Configuration and Power Interface (ACPI)


Linux unterstützt ACPI (Advanced Configuration and Power Interface) - den jüngsten Standard in der Energieverwaltung. Er ist nicht nur leistungsstärker und flexibler, sondern auch schwieriger umzusetzen. Das Paket acpid ist in der ACPI-Welt das Pendant zu apmd.


ACPI


Advanced Configuration and Power Interface


Wenn Sie wissen, dass Ihr BIOS das ACPI korrekt handhabt, sollten Sie es dem APM vorziehen (wird durch eine Aktualisierung des BIOS entfernt). Wenn Sie vom einen zum anderen wechseln, müssen Sie darauf achten, das Paket role="pkg">apmd zu entfernen, da es Probleme verursachen könnte, wenn es neben acpid bestehen bleibt (und umgekehrt).


acpid


ACHTUNG Grafikkarte und Bereitschaftsbetrieb


Der Grafikkartentreiber hat häufig ein Problem mit dem Bereitschaftsbetrieb. Bei Schwierigkeiten ist es eine gute Idee, die jüngste Version des X.org-Grafikservers auszuprobieren.


HARDWARE Apple und Energieverwaltung


Auf Apple Powerbooks (das heißt, bei PowerPC-Prozessoren) sollte apmd durch pmud ersetzt werden.


pmud


Powerbook


Laptop-Erweiterungskarten: PCMCIA


PCMCIA-Kartentreiber sind seit der Kernelversion 2.6.13 als Module in den Kernel eingebaut. Auf einem System mit Debian Squeeze brauchen Sie nur die Anwendungsebenenunterstützung, die im Paket pcmciautils enthalten ist, zu installieren.


pcmciautils


Das Paket wireless-tools ist für die korrekte Verwaltung von Wifi-Karten ebenfalls erforderlich.


wireless-tools


Wifi


Netzwerk kabellos


kabelloses Netzwerk


Jedesmal, wenn Sie eine Karte anschließen oder entfernen, konfiguriert oder dekonfiguriert der Daemon sie, indem er ein Skript im Verzeichnis /etc/pcmcia/ ausführt, das seine Einstellungen von den Dateien /etc/pcmcia/*.opts bezieht. Diese Dateien sind geringfügig angepasst worden, damit sie mit einem Debian-System funktionieren; die Konfigurierung des Netzwerks wird an ifup übertragen, falls die Datei /etc/pcmcia/network.opts dies nicht erledigt. Das Gleiche gilt für die Konfigurierung eines kabellosen Netzwerks, die in /etc/network/interfaces statt in /etc/pcmcia/wireless.opts spezifiziert werden kann. Die Datei /usr/share/doc/wireless-tools/README.Debian erläutert die zu verwendende Syntax.


Nach diesem Überblick über wesentliche Dienste, die vielen Unix-Systemen gemein sind, werden wir unsere Aufmerksamkeit auf das Umfeld der verwalteten Rechner richten: das Netzwerk. Damit das Netzwerk ordnungsgemäß funktioniert, sind viele Dienste erforderlich. Sie werden im nächsten Kapitel erörtert.