diff --git a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml index c6f6c46225..e94c4c3703 100644 --- a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml @@ -1,1569 +1,1569 @@ Chris Shumway Umgeschrieben von Uwe Pierau Übersetzt von Unix Grundlagen Übersicht Grundlagen Das folgende Kapitel umfaßt die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden Material gilt auch für jedes andere Unix-ähnliche System. Falls Sie mit dem Material schon vertraut sind, können Sie dieses Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall sehr genau lesen. Nachdem Sie dieses Kapitel gelesen haben, werden Sie folgendes wissen: wie Unix Zugriffsrechte funktionieren, was Prozesse, Dämonen und Signale sind, was eine Shell ist und wie Sie die Login Umgebung ändern, wie Sie mit Texteditoren umgehen, und wie Sie in den Manual-Pages nach weiteren Informationen suchen können. Zugriffsrechte Unix Die Grundlagen von FreeBSD, das ein direkter Abkömmling von BSD UNIX ist, stützen sich auf verschiedene UNIX Grundkonzepte. Das erste und ausgeprägteste: FreeBSD ist ein Multi-User Betriebssystem. Das System ermöglicht, daß mehrere User gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU Zeit unter den Usern. Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in zwei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus: Zugriffsrechte Dateizugriffsrechte Wert Zugriffsrechte Auflistung im Verzeichnis 0 Kein Lesen, Kein Schreiben, Kein Ausführen --- 1 Kein Lesen, Kein Schreiben, Ausführen --x 2 Kein Lesen, Schreiben, Kein Ausführen -w- 3 Kein Lesen, Schreiben, Ausführen -wx 4 Lesen, Kein Schreiben, Kein Ausführen r-- 5 Lesen, Kein Schreiben, Ausführen r-x 6 Lesen, Schreiben, Kein Ausführen rw- 7 Lesen, Schreiben, Ausführen rwx ls Verzeichnisse Sie können auf der Kommandozeile von &man.ls.1; angeben, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die erste Spalte von ls -l könnte wie folgt aussehen: -rw-r--r-- Das erste Zeichen von links ist ein Symbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein special- oder block-Device, ein Socket oder irgendeine andere Pseudo-Datei handelt. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, daß das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert. Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware Geräten? FreeBSD behandelt die meisten Hardware Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /dev gespeichert. Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, daß in das Verzeichnis zum Beispiel mit cd gewechselt werden kann. Das bedeutet auch, daß in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu. Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein. Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in &man.chmod.1;. Verzeichnis-Strukturen Verzeichnis Hierarchien Die FreeBSD Verzeichnis Hierarchie ist die Grundlange, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Konzept, das Sie verstehen sollten, ist das Root-Verzeichnis /. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem um das System in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte anderer Dateisysteme, die später eingehangen werden. Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme ins / Verzeichnis eingepflanzt werden können. Standard Mountpunkte beinhalten /usr, /var, /mnt und /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript &man.rc.8; gemountet, wenn die zugehörigen Einträge nicht mit der Option versehen sind. Konsultieren Sie die &man.fstab.5; Man-Page für mehr Informationen über das Format der Datei /etc/fstab und den Optionen darin. Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in &man.hier.7;. Als Beispiel sein eine kurze Übersicht über die gebräuchlisten Verzeichnisse gegeben: Verzeichnis Beschreibung - / + / Root-Verzeichnis des Dateisystems. - /bin/ + /bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb. - /boot/ + /boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden. - /boot/defaults/ + /boot/defaults/ Vorgaben für die Boot-Konfiguration, siehe &man.loader.conf.5;. - /dev/ + /dev/ Gerätedateien, siehe &man.intro.4;. - /etc/ + /etc/ System Konfigurationsdateien und Skripte. - /etc/defaults/ + /etc/defaults/ Vorgaben für die System Konfigurationsdateien, siehe &man.rc.8;. - /etc/mail/ + /etc/mail/ Konfigurationsdateien von MTAs wie &man.sendmail.8;. - /etc/namedb/ + /etc/namedb/ Konfigurationsdateien von named, siehe &man.named.8;. - /etc/periodic/ + /etc/periodic/ Täglich, wöchentlich oder monatlich ablaufende Skripte, die von &man.cron.8; gestartet werden. Siehe &man.periodic.8;. - /etc/ppp/ + /etc/ppp/ Konfigurationsdateien von ppp, siehe &man.ppp.8;. - /mnt/ + /mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird. - /proc/ + /proc/ Prozeß Dateisystem, siehe &man.procfs.5; und &man.mount.procfs.8;. - /root/ + /root/ Home Verzeichnis von root. - /sbin/ + /sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für des Single-User-Modus und den Mehrbenutzerbetrieb sind. - /stand/ + /stand/ Programme, die ohne andere Programme oder Bibliotheken laufen. - /tmp/ + /tmp/ Temporäre Dateien, die für gewöhnlich nicht nach einem Reboot erhalten werden. Dies kann ein speicherbasiertes Dateisystem, siehe &man.mfs.8;, sein. - /usr/ + /usr/ Der Großteil der Benutzerprogramme und Applikationen. - /usr/bin/ + /usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Applikationen. - /usr/include/ + /usr/include/ Standard C include-Dateien. - /usr/lib/ + /usr/lib/ Bibliotheken. - /usr/libdata/ + /usr/libdata/ Daten verschiedener Werkzeuge. - /usr/libexec/ + /usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden. /usr/local/ + class="directory">/usr/local/ Lokale Programme, Bibliotheken usw. Die Port Kollektion benutzt dieses Verzeichnis als Zielverzeichnis für zu installierende Applikationen. Innerhalb von /usr/local sollte das von &man.hier.7; beschriebene Layout für /usr benutzt werden. Das man Verzeichnis wird direkt unter /usr/local anstelle unter /usr/local/share angelegt. Die Dokumentation der Ports findet sich in share/doc/port. - /usr/obj/ + /usr/obj/ Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht. - /usr/ports + /usr/ports Die FreeBSD Ports-Kollektion (optional). - /usr/sbin/ + /usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden. - /usr/share/ + /usr/share/ Von der Architektur unabhängige Dateien. - /usr/src/ + /usr/src/ Quelldateien zu BSD und/oder lokalen Ergänzungen. /usr/X11R6/ + class="directory">/usr/X11R6/ Optionale X11R6 Programme und Bibliotheken. - /var/ + /var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre und Spooldateien. - /var/log/ + /var/log/ Verschiedene Logdateien des Systems. - /var/mail/ + /var/mail/ Postfächer der Benutzer. - /var/spool/ + /var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme. - /var/tmp/ + /var/tmp/ Temporäre Dateien, die über Reboots erhalten bleiben. /var/yp NIS maps. Prozesse Da FreeBSD ein Multitasking Betriebssystem ist, sieht es so aus, als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, das zu irgendeiner Zeit läuft, wird Prozeß genannt. Jedes Kommando startet mindestens einen Prozeß. Einige Systemprozesse laufen die ganze Zeit und stellen die Funktion des Systems sicher. Jeder Prozeß wird durch eine eindeutige Nummer identifiziert, die Prozeß-ID oder PID genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozeß benutzen kann. Dabei finden die vorher beschriebenen Zugriffsrechte Anwendungen. Die meisten Prozesse haben auch einen Elternprozeß, der sie gestartet hat. Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein Prozeß und jedes Kommando, das Sie starten ist auch ein Prozeß. Jeder Prozeß, den Sie auf diese Weise starten, besitzt den Shell-Prozeß als Elternprozeß. Die Ausnahme hiervon ist ein spezieller Prozeß, der init heißt. init ist immer der erste Prozeß und hat somit die PID 1. init wird vom Kernel beim Booten von FreeBSD gestartet. Die Kommandos &man.ps.1; und &man.top.1; sind besonders nützlich, um sich die Prozesse auf einem System anzusehen. &man.ps.1; zeigt eine statische Liste der laufenden Prozesse und kann deren PID, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden, usw. anzeigen. &man.top.1; zeigt alle laufenden Prozesse an und aktualisiert die Anzeige, so daß Sie Ihrem Computer bei der Arbeit zuschauen können. Normal zeigt Ihnen &man.ps.1; nur die laufenden Prozesse, die Ihnen gehören. Zum Beispiel: &prompt.user; ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish Wie Sie sehen, gibt &man.ps.1; mehrere Spalten aus. In der PID Spalte findet sich die vorher besprochene Prozeß-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an, wenn die Grenze überschritten wird. TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt des Status des Programms und kann für die Zwecke dieser Diskussion ebenso wie TT ignoriert werden. TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist— dies ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen ist, da einige Programme viel Zeit mit dem Warten auf bestimmte Dinge verbringen, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND finden Sie schließlich die Kommandozeile, mit der das Programm gestartet wurde. &man.ps.1; besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. Mit werden Information über alle laufenden Prozesse und nicht nur Ihrer eigenen angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit angezeigt. zeigt auch Dämonen-Prozesse an, und vernlaßt &man.ps.1; die komplette Kommandozeile anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird. Die Ausgabe von &man.top.1; sieht ähnlich aus: &prompt.user; top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ... Die Ausgabe ist in zwei Abschnitte geteilt. Im Kopf in den ersten fünf Zeilen finden sich die zuletzt zugeteilte PID, die Systemauslastung (load average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wieviele Prozesse momentan laufen (im Beispiel 47), wieviel Speicher und Swap verbraucht wurde und wieviel Zeit das System in den verschiedenen CPU-Modi verbringt. Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von &man.ps.1;. Wie im vorigen Beispiel können Sie die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando erkennen. &man.top.1; zeigt auch den Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt ist. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. Netscape hat im gezeigten Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt es allerdings nur 9 MB. Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden aktualisiert. Der Zeitraum kann mit eingestellt werden. Dämonen, Signale und Stoppen von Prozessen Wenn Sie einen Editor starten, können Sie ihn leicht bedienen und Dateien laden. Sie können das, weil der Editor dafür Vorsorge getroffen hat und auf einem Terminal läuft. Manche Programme erwarten keine Eingaben von einem Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. Programme, die email von einem Ort zu einem anderen Ort transportieren sind ein weiteres Beispiel für diesen Typ von Applikationen. Wir nennen diese Programme Dämonen. Dämonen stammen aus der griechischen Mythologie und waren weder gut noch böse. Sie waren kleine dienstbare Geister, die meistens nützliche Sachen für die Menschheit vollbrachten. Ähnlich wie heutzutage Web-Server und Mail-Server nützliche Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack. Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem d am Ende benannt. BIND ist der Berkeley Internet Name Daemon und das tatsächlich laufende Programm heißt named. Der Apache Webserver wird httpd genannt, der Druckerspool-Dämon heißt lpd usw. Dies ist allerdings eine Konvention und keine unumstößliche Regel: Der Dämon der Applikation sendmail heißt sendmail und nicht maild, wie Sie vielleicht gedacht hatten. Manchmal müssen Sie mit einem Dämon kommunizieren und dazu benutzen Sie Signale. Sie können mit einem Dämonen oder jedem anderen laufenden Prozeß kommunizieren, indem Sie diesem ein Signal schicken. Sie können verschiedene Signale verschicken—manche haben eine festgelegte Bedeutung, andere werden von der Applikation interpretiert. Die Dokumentation zur fraglichen Applikation wird erklären, wie die Applikation Signale interpretiert. Sie können nur Signale zu Prozessen senden, die Ihnen gehören. Wenn Sie versuchen einem Prozeß, der nicht Ihnen gehört, ein Signal zu senden, so wird das Signal ignoriert. Der Benutzer root darf jedem Prozeß Signale schicken. In manchen Fällen wird FreeBSD Signale senden. Wenn eine Applikation schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht zugreifen soll, so sendet FreeBSD dem Prozeß das Segmentation Violation Signal (SIGSEGV). Wenn eine Applikation den &man.alarm.3; Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm Signal (SIGALRM) gesendet. Zwei Signale können benutzt werden, um Prozesse zu stoppen: SIGTERM und SIGKILL. Mit SIGTERM fordern Sie den Prozeß höflich zum Beenden auf. Der Prozeß kann das Signal abfangen und merken, daß er sich beenden soll. Er hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er vor der Aufforderung sich zu beenden durchführte, abzuschließen. Er kann sogar SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf. SIGKILL kann von keinem Prozeß ignoriert werden. Das Signal läßt sich mit Mich interessiert nicht, was du gerade machst, hör sofort auf damit! umschreiben. Wenn Sie einem Prozeß SIGKILL schicken, dann wird FreeBSD diesen sofort beenden Das stimmt nicht ganz: Es gibt Fälle, in denen ein Prozeß nicht unterbrochen werden kann. Wenn der Prozesß zum Beispiel eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser Rechner aus irgendwelchen Gründen nicht erreichbar ist (ausgeschaltet, oder ein Netzwerkfehler), dann ist der Prozeß nicht zu unterbrechen. Wenn der Prozeß den Lesezugriff nach einem Timeout von typischerweise zwei Minuten aufgibt, dann wir er beendet. . Andere Signale, die Sie vielleicht verschicken wollen, sind SIGHUP, SIGUSR1 und SIGUSR2. Diese Signale sind für allgemeine Zwecke vorgesehen und verschiedene Applikation werden unterschiedlich auf diese Signale reagieren. Nehmen wir an, Sie haben die Konfiguration Ihres Webservers verändert und möchten dies dem Server mitteilen. Sie könnten den Server natürlich stoppen und httpd wieder starten. Die Folge wäre eine kurze Zeit, in der der Server nicht erreichbar ist. Die meisten Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines SIGHUP neu ein. Da es keinen Standard gibt, der vorschreibt, wie auf diese Signale zu reagieren ist, lesen Sie bitte die Dokumentation zu dem in Frage kommenden Dämon. Mit &man.kill.1; können Sie, wie unten gezeigt, Signale verschicken. Verschicken von Signalen Das folgende Beispiel zeigt, wie Sie &man.inetd.8; ein Signal schicken. Die Konfigurationsdatei von &man.inetd.8; ist /etc/inetd.conf und &man.inetd.8; liest die Konfigurationsdatei erneut ein, wenn er ein SIGHUP empfängt. Suchen Sie Prozeß-ID des Prozesses, dem Sie ein Signal schicken wollen. Benutzen Sie dazu &man.ps.1; und &man.grep.1;. Mit &man.grep.1; können Sie in einer Ausgabe nach einem String suchen. Da &man.inetd.8; unter dem Benutzer root läuft und Sie das Kommando als normaler Benutzer absetzen, müssen Sie &man.ps.1; mit aufrufen: &prompt.user; ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW Die Prozeß-ID von &man.inetd.8; ist 198. In einigen Fällen werden Sie auch das grep inetd Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie &man.ps.1; die Liste der laufenden Prozesse untersucht. Senden Sie das Signal mit &man.kill.1;. Da &man.inetd.8; unter dem Benutzer root läuft, müssen Sie zuerst mit &man.su.1; root werden: &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 &man.kill.1; wird, wie andere Unix Kommandos auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, einem Prozeß, der nicht Ihnen gehört, ein Signal zu senden, dann werden Sie die Meldung kill: PID: Operation not permitted sehen. Wenn Sie sich bei der Eingabe der PID vertippen, werden Sie das Signal dem falschen Prozeß schicken, was schlecht sein kann. Wenn Sie Glück haben, existiert der Prozeß nicht und Sie werden mit der Ausgabe kill: PID: No such process belohnt. Warum soll ich <command>/bin/kill</command> benutzen? Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Das kann nützlich sein, aber die unterschiedlichen Shells benutzen eine verschiedene Syntax, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill ... direkt aufzurufen. Andere Signale senden Sie auf die gleiche Weise, ersetzen Sie nur TERM oder KILL entsprechend. Es kann gravierende Auswirkungen haben, wenn Sie zufällig Prozesse beenden. Insbesondere &man.init.8; mit der Prozeß-ID ist ein Spezialfall. Mit /bin/kill -s KILL 1 können Sie Ihr System schnell herunterfahren. Überprüfen Sie die Argumente von &man.kill.1; immer zweimal bevor Sie Return drücken. Anhängen und Abhängen von Dateisystemen Ein Dateisystem wird am besten als ein Baum mit der Wurzel / veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local haben können. Root-Dateisystem Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft. Ein weiterer Grund bestimmte Verzeichnisbäume auf andere Dateisysteme zu legen, ist gegeben, wenn sich die Verzeichnisbäume auf gesonderten physikalischen oder virtuellen Platten, wie Network File System oder CDROM Laufwerken, befinden. Die <filename>fstab</filename> Datei Dateisysteme fstab Während des Boot Prozesses werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option versehen sind, automatisch angehangen. Die Zeilen in /etc/fstab haben das folgende Format: device /mount-point fstype options dumpfreq passno device Ein existierender Gerätename wie oben in Benennung von Laufwerken beschrieben. mount-point Ein existierendes Verzeichnis, an das das Dateisystem angehangen wird. fstype Der Typ des Dateisystems, der an &man.mount.8; weitergegeben wird. Das default FreeBSD Dateisystem ist ufs. options Entweder für beschreibbare Dateisysteme oder für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in &man.mount.8;. dumpfreq Gibt die anzahl der Tage an, nachdem das Dateisystem gesichert werden soll. Fehlt der Wert, wird 0 angenommen. passno Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf null zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muß, sollte der Wert von passno eins betragen. Allen anderen Dateisystemen sollten Werte größer eins zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird &man.fsck.8; versuchen, diese parallel zu überprüfen. Das mount Kommando Dateisysteme anhängen &man.mount.8; hängt schließlich Dateisysteme an. In der grundlegenden Form wird es wie folgt benutzt: &prompt.root; mount device mountpoint Viele Optionen werden in &man.mount.8; beschrieben, die am häufigsten verwendeten sind: Mount Optionen Hängt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind Dateisysteme, die mit noauto markiert sind, die mit der Option ausgeschlossen wurden und Dateisysteme, die schon angehangen sind. Führt den entsprechenden Systemcall nicht aus. Nützlich ist diese Option in Verbindung mit . Damit wird angezeigt, was mount tatsächlich versuchen würde, um das Dateisystem anzuhängen. Erzwingt das Anhängen eines unsauberen Dateisystems oder erzwingt die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird. Hängt das Dateisystem schreibgeschützt an. Das kann auch durch Angabe von zu der Option erreicht werden. fstype Hängt das Dateisystem mit dem angebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn auch angegeben wurde. Die Voreinstellung für den Typ des Dateisystems ist ufs. Aktualisiert die Mountoptionen des Dateisystems. Geschwätzig sein. Hängt das Dateisystem beschreibbar an. erwartet eine durch Kommata separierte Liste von Optionen, unter anderem die folgenden: nodev Beachtet keine Gerätedateien auf dem Dateisystem. Dies ist ein nützliches Sicherheitsfeature. noexec Verbietet das Ausführen von binären Dateien auf dem Dateisystem. Dies ist ein nützliches Sicherheitsfeature. nosuid SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist ein nützliches Sicherheitsfeature. Das <command>umount</command> Kommando Dateisysteme abhängen &man.umount.8; akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder die Optionen oder . Jede Form akzeptiert , um das Abhängen zu erzwingen, und , um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit : Ihr Computer kann abstürzen oder es können Daten auf dem Dateisystem beschädigt werden, wenn Sie das Abhängen erzwingen. und werden benutzt um alle Dateisysteme, deren Typ durch modifiziert werden kann, abzuhängen. hängt das Rootdateisystem nicht ab. Shells Shells Kommandozeile Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, um die tägliche Arbeit zu erleichtern, wie Dateiverwaltung, Editieren von Kommandozeilen, Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und tcsh (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung. Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder Ihnen ist eine Unix Kommandozeile neu, so könnten Sie die bash probieren. Der Punkt ist, daß jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien foobar und foo.bar. Die Datei foo.bar möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: rm fo[Tab]. [Tab]. Die Shell würde dannrm foo[BEEP].bar ausgeben. [BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, daß es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem Sie . eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen. Umgebungsvariablen Eine andere Funktion der Shell sind die Umgebungsvariablen. Das sind veränderbare Schlüsselpaare im Umgebungsraum der Shell. Diesen Umgebungsraum kann jedes von der Shell aufgerufene Programm lesen. So kommt es, daß viel Programmkonfiguration darin enthalten ist. Hier eine Liste verbreiteter Umgebungsvariablen und was sie bedeuten: Umgebungsvariablen Variable Beschreibung USER Name des zur Zeit angemeldeten Benutzers. PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. DISPLAY Wenn gesetzt der Netzwerkname des X11 Bildschirms für die Anzeige. SHELL Die aktuelle Shell. TERM Name des Terminals des Benutzers. Benutzt, um die Fähigkeiten des Terminals bestimmen. TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen. OSTYPE Typ des Betriebsystems. Z.B., FreeBSD. MACHTYPE Die CPU Architektur auf dem das System läuft. EDITOR Vom Benutzer bevorzugter Text-Editor. PAGER Vom Benutzer bevorzugter Text-Betrachter. MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Man-Pages. Das Anzeigen oder Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash würde man set und export benutzen zum ansehen oder setzen von aktuellen Umgebungsvariablen. Um beispielsweise die Variable EDITOR mit csh oder tcsh zu setzen, würde folgendes Kommando die Variable EDITOR auf /usr/local/bin/emacs setzen: &prompt.user; setenv EDITOR /usr/local/bin/emacs Unter Bourne-Shells: &prompt.user; export EDITOR="/usr/local/bin/emacs" Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt. Shells behandeln eine Menge an Spezialzeichen, sogenannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Das Kommando echo * liefert nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen an echo weitergibt. Um zu verhindern, daß die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht. Ändern der Shell Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit Shell: entsprechend Ihren Wünschen. Sie können auch chsh mit der Option aufrufen, dann wird Ihre Shell gesetzt, ohne dasß Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein: &prompt.user; chsh -s /usr/local/bin/bash Einfach chsh ohne Optionen und mit Editieren der entsprechenden Zeile würde auch funktionieren. Die von Ihnen gewünschte Shell muß in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen. Haben Sie beispielsweise die bash nach /usr/local/bin installiert, wollen Sie dies tun: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Danach können Sie chsh aufrufen. Text Editoren Text Editoren Editoren Eine Menge der Konfiguration bei FreeBSD wird durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr viel mehr in der Ports Sammlung. ee Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, worin filename der Name der zu editierenden Datei ist. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ meint die Control (oft Steuerung) Taste, also ^e heißt, daß die Controltaste und dann der Buchstabe e gedrückt werden. Um ee zu verlassen, einfach die Escapetaste drücken und leave editor wählen. Der Editor fragt Sie nach, ob Sie speichern möchten, wenn die Datei verändert wurde. vi Text Editoren vi emacs Text Editoren emacs FreeBSD verfügt über leistungsfähigere Editoren wie vi als Teil des Basissystems und emacs oder vim als Teil der Ports Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Dennoch, wenn Sie viel Textdateien editieren werden, sparen Sie auf lange Sicht mehr Zeit ein durch das Erlernen solcher Editoren wie vim oder emacs. Geräte und Gerätedateien Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf gefundene Geräte. Sie können sich die Bootmeldungen später in /var/run/dmesg.boot ansehen. Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen werden, sind zum Beispiel acd0, das erste IDE CDROM oder kbd0, die Tastatur. Auf die meisten Geräte wird unter Unix über spezielle Gerätedateien im /dev Verzeichnis zugegriffen. Anlegen von Gerätedateien Wenn sie ein neues Gerät zu Ihrem System hinzufügen, oder die Unterstützung für zusätzliche Geräte kompilieren, muß oft ein Gerätetreiber erstellt werden. MAKEDEV Skript Auf Systemen ohne DEVFS müssen Gerätedateien mit &man.MAKEDEV.8; wie unten gezeigt angelegt werden: &prompt.root; cd /dev &prompt.root; sh MAKEDEV ad1 Im Beispiel werden alle Gerätedateien für das zweite IDE Laufwerk angelegt. devfs (Gerätedateisystem) Das Gerätedateisystem devfs ermöglicht durch den Namensraum des Dateisystems Zugriff auf den Namensraum der Geräte im Kernel. Damit müssen Gerätedateien nicht mehr extra angelegt werden, sondern werden von devfs verwaltet. Weitere Informationen finden Sie in &man.devfs.5;. In der Grundeinstellung benutzt FreeBSD 5.0 devfs. Weitere Informationen... Manual-Pages Manual-Pages Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Manual-Pages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach: &prompt.user; man Kommando Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein: &prompt.user; man ls Die Online-Dokumentation ist in nummerierte Sektionen unterteilt: Benutzerkommandos. Systemaufrufe und Fehlernummern. Funktionen der C Bibliothek. Gerätetreiber. Dateiformate. Spiele und andere Unterhaltung. Verschiedene Informationen. Systemverwaltung und -Kommandos. Kernel Entwickler. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben: &prompt.user; man 1 chmod Dies wird Ihnen die Man-Page für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Man-Pages werden traditionsgemäß in Klammern gesetzt. So bezieht sich &man.chmod.1; auf das Benutzerkommando chmod und mit &man.chmod.2; ist der Systemaufruf gemeint. Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können man benutzen, um nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter benutzen: &prompt.user; man -k mail Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort mail enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen. Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann geben Sie doch einfach &prompt.user; cd /usr/bin &prompt.user; man -f * oder &prompt.user; cd /usr/bin &prompt.user; whatis * ein, beides tut dasselbe GNU Info Dateien FreeBSD enthält viele Applikationen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manual-Pages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen. Um das Kommando &man.info.1; zu benutzen, geben Sie einfach ein: &prompt.user; info Eine kurze Einführung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?. diff --git a/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml b/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml index a0d457c607..941369054a 100644 --- a/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml @@ -1,558 +1,558 @@ Bibliografie - Übersetzt von &a.de.gruender + Übersetzt von &a.de.gruender; Während die Manual-Seiten die endgültige Auskunft über bestimmte Teile des FreeBSD Betriebssystems geben, so können sie jedoch nicht darstellen, wie man die einzelnen Teile zusammenfügt, um ein vollständig laufendes Betriebssystem herzustellen. Daher gibt es keinen Ersatz für ein gutes Buch über Unix System-Administration und ein gutes Benutzerhandbuch. In der Regel handelt es sich im folgenden Kapitel um englische Ausgaben der genannten Werke. Übersetzungen oder Ausgaben in anderen Sprachen sind mit entsprechenden Hinweisen versehen. Bücher & Magazine speziell für FreeBSD Internationale Bücher & Magazine: Using FreeBSD (in chinesischer Sprache). FreeBSD for PC 98'ers (in japanischer Sprache), herausgegeben von SHUWA System Co, LTD. ISBN 4-87966-468-5 C3055 P2900E. FreeBSD (in japanischer Sprache), herausgegeben von CUTT. ISBN 4-906391-22-2 C3055 P2400E. Complete Introduction to FreeBSD (in japanischer Sprache), herausgegeben von Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E. Personal UNIX Starter Kit FreeBSD (in japanischer Sprache), herausgegeben von ASCII. ISBN 4-7561-1733-3 P3000E. FreeBSD Handbook (japanische Übersetzung), herausgegeben von ASCII. ISBN 4-7561-1580-2 P3800E. BSD mit Methode (in deutscher Sprache), herausgegeben von Computer und Literatur Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0. FreeBSD Install and Utilization Manual (in japanischer Sprache), herausgegeben von Mainichi Communications Inc.. Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo Building Internet Server with FreeBSD (in indonesischer Sprache), herausgegeben von Elex Media Komputindo. Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo Building Internet Server with FreeBSD (auf indonesisch), herausgegeben von Elex Media Komputindo. Englischsprachige Bücher & Magazine: + url="http://www.freebsdmall.com/cgi-bin/fm/bsdcomp"> The Complete FreeBSD, herausgegeben von BSDi. The FreeBSD Corporate Networker's Guide, herausgegeben von Addison-Wesley. Handbücher Computer Systems Research Group, UC Berkeley. 4.4BSD User's Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-075-9 Computer Systems Research Group, UC Berkeley. 4.4BSD User's Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-076-7 UNIX in a Nutshell. O'Reilly & Associates, Inc., 1990. ISBN 093717520X Mui, Linda. What You Need To Know When You Can't Find Your UNIX System Administrator. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-104-6 Die Ohio State University hat ein UNIX Introductory Course veröffentlicht, welcher auch online im HTML- und Postscriptformat verfügbar ist. Jpman Project, Japan FreeBSD Users Group. FreeBSD User's Reference Manual (japanische Übersetzung). Mainichi Communications Inc., 1998. ISBN4-8399-0088-4 P3800E. Edinburgh University hat einen Online Guide für Anfänger in Sachen UNIX geschrieben. Administrations-Anleitungen Albitz, Paul and Liu, Cricket. DNS and BIND, 4th Ed. O'Reilly & Associates, Inc., 2001. ISBN 1-59600-158-4 Computer Systems Research Group, UC Berkeley. 4.4BSD System Manager's Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-080-5 Costales, Brian, et al. Sendmail, 2nd Ed. O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0 Frisch, Æleen. Essential System Administration, 2nd Ed. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-127-5 Hunt, Craig. TCP/IP Network Administration, 2nd Ed. O'Reilly & Associates, Inc., 1997. ISBN 1-56592-322-7 Nemeth, Evi. UNIX System Administration Handbook. 3rd Ed. Prentice Hall, 2000. ISBN 0-13-020601-6 Stern, Hal Managing NFS and NIS O'Reilly & Associates, Inc., 1991. ISBN 0-937175-75-7 Jpman Project, Japan FreeBSD Users Group. FreeBSD System Administrator's Manual (japanische Übersetzung). Mainichi Communications Inc., 1998. ISBN4-8399-0109-0 P3300E. Die Edinburgh University hat eine Online Anleitung (in englischer Sprache) für Neueinsteiger in die UNIX-Umgebung bereitgestellt. Programmierhandbücher Asente, Paul, Paul, Converse, Diana, and Swick, Ralph. X Window System Toolkit. Digital Press, 1998. ISBN 1-55558-178-1 Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-078-3 Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-079-1 Harbison, Samuel P. and Steele, Guy L. Jr. C: A Reference Manual. 4rd ed. Prentice Hall, 1995. ISBN 0-13-326224-3 Kernighan, Brian and Dennis M. Ritchie. The C Programming Language.. PTR Prentice Hall, 1988. ISBN 0-13-110362-9 Lehey, Greg. Porting UNIX Software. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7 Plauger, P. J. The Standard C Library. Prentice Hall, 1992. ISBN 0-13-131509-9 Stevens, W. Richard. Advanced Programming in the UNIX Environment. Reading, Mass. : Addison-Wesley, 1992 ISBN 0-201-56317-7 Stevens, W. Richard. UNIX Network Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN 0-13-490012-X Wells, Bill. Writing Serial Drivers for UNIX. Dr. Dobb's Journal. 19(15), December 1994. pp68-71, 97-99. Betriebssystem-Interna Andleigh, Prabhat K. UNIX System Architecture. Prentice-Hall, Inc., 1990. ISBN 0-13-949843-5 Jolitz, William. Porting UNIX to the 386. Dr. Dobb's Journal. January 1991-July 1992. Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John Quarterman The Design and Implementation of the 4.3BSD UNIX Operating System. Reading, Mass. : Addison-Wesley, 1989. ISBN 0-201-06196-1 Kapitel 2 dieses Buchs ist Teil des FreeBSD Documentation Projects und on-line erhältlich. Kapitel 9 findet sich hier. Leffler, Samuel J., Marshall Kirk McKusick, The Design and Implementation of the 4.3BSD UNIX Operating System: Answer Book. Reading, Mass. : Addison-Wesley, 1991. ISBN 0-201-54629-9 McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman. The Design and Implementation of the 4.4BSD Operating System. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4 Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63346-9 Schimmel, Curt. Unix Systems for Modern Architectures. Reading, Mass. : Addison-Wesley, 1994. ISBN 0-201-63338-8 Stevens, W. Richard. TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP and the UNIX Domain Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63495-3 Vahalia, Uresh. UNIX Internals -- The New Frontiers. Prentice Hall, 1996. ISBN 0-13-101908-2 Wright, Gary R. and W. Richard Stevens. TCP/IP Illustrated, Volume 2: The Implementation. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-X Sicherheits-Anleitung Cheswick, William R. and Steven M. Bellovin. Firewalls and Internet Security: Repelling the Wily Hacker. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63357-4 Garfinkel, Simson and Gene Spafford. Practical UNIX & Internet Security. 2nd Ed. O'Reilly & Associates, Inc., 1996. ISBN 1-56592-148-8 Garfinkel, Simson. PGP Pretty Good Privacy O'Reilly & Associates, Inc., 1995. ISBN 1-56592-098-8 Hardware-Anleitung Anderson, Don and Tom Shanley. Pentium Processor System Architecture. 2nd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40992-5 Ferraro, Richard F. Programmer's Guide to the EGA, VGA, and Super VGA Cards. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-62490-7 Die Intel Corporation veröffentlicht Dokumentationen Ihrer CPUs, Chipsets und Standards auf ihrer developer web site, normalerweise als PDF-Dateien. Shanley, Tom. 80486 System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40994-1 Shanley, Tom. ISA System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40996-8 Shanley, Tom. PCI System Architecture. 4th ed. Reading, Mass. : Addison-Wesley, 1999. ISBN 0-201-30974-2 Van Gilluwe, Frank. The Undocumented PC, 2nd Ed. Reading, Mass: Addison-Wesley Pub. Co., 1996. ISBN 0-201-47950-8 Messmer, Hans-Peter. The Indispensable PC Hardware Book, 4th Ed. Reading, Mass: Addison-Wesley Pub. Co., 2002. ISBN 0-201-59616-4 Unix Geschichte Lion, John Lion's Commentary on UNIX, 6th Ed. With Source Code. ITP Media Group, 1996. ISBN 1573980137 Raymond, Eric S. The New Hacker's Dictionary, 3rd edition. MIT Press, 1996. ISBN 0-262-68092-0. Auch bekannt als das Jargon File Salus, Peter H. A quarter century of UNIX. Addison-Wesley Publishing Company, Inc., 1994. ISBN 0-201-54777-5 Simon Garfinkel, Daniel Weise, Steven Strassmann. The UNIX-HATERS Handbook. IDG Books Worldwide, Inc., 1994. ISBN 1-56884-203-1 Don Libes, Sandy Ressler Life with UNIX — special edition. Prentice-Hall, Inc., 1989. ISBN 0-13-536657-7 The BSD family tree. 1997. ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree oder lokal auf einem FreeBSD Rechner. The BSD Release Announcements collection. 1997. http://www.de.FreeBSD.org/de/ftp/releases/ Networked Computer Science Technical Reports Library. http://www.ncstrl.org/ Old BSD releases from the Computer Systems Research group (CSRG). http://www.mckusick.com/csrg/: Das Paket mit 4 CDROM enthält alle BSD-Versionen von 1BSD bis 4.4BSD und 4.4BSD-Lite2 (unglücklicherweise nicht 2.11BSD). Die letzte CD beinhaltet auch die finalen Sourcen inclusive den SCCS Dateien. Magazine und Journale The C/C++ Users Journal. R&D Publications Inc. ISSN 1075-2838 Sys Admin — The Journal for UNIX System Administrators Miller Freeman, Inc., ISSN 1061-2688 diff --git a/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml index 4fd4af8a6f..f261fc4b7e 100644 --- a/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml @@ -1,2466 +1,2467 @@ Speichermedien Übersicht Dieses Kapitel behandelt die Benutzung von Laufwerken unter FreeBSD. Laufwerke können speichergestützte Laufwerke, Netzwerklaufwerke oder normale SCSI/IDE Geräte sein. Nachdem Sie dieses Kapitel gelesen haben, werden Sie folgendes wissen: Die Begriffe, die FreeBSD verwendet, um die Organisation der Daten auf einem physikalischen Laufwerk zu beschreiben (Partitionen und Slices). Wie Sie Dateisysteme an- und abhängen. Wie Sie ein weiteres Laufwerk zu Ihrem System hinzufügen. Wie virtuelle Dateisysteme, wie speichergestützte Laufwerke, aufgesetzt werden. Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können. Wie unter FreeBSD CDs und DVDs gebrannt werden. Sie werden die Speichermedien, die Sie für Backups einsetzen können, kennen. Wie Sie die unter FreeBSD erhältlichen Backup Programme nutzen. Wie Sie ein Backup mit Disketten erstellen. Gerätenamen Die folgende Tabelle zeigt die von FreeBSD unterstützten Speichergeräte und deren Gerätenamen. Namenskonventionen von physikalischen Laufwerken Laufwerkstyp Gerätename IDE-Festplatten ad IDE-CDROM Laufwerke acd SCSI-Festplatten und USB-Speichermedien da SCSI-CDROM Laufwerke cd Verschiedene proprietäre CDROM-Laufwerke mcd Mitsumi CD-ROM, scd Sony CD-ROM, matcd Matsushita/Panasonic CD-ROM Diskettenlaufwerke fd SCSI-Bandlaufwerke sa IDE-Bandlaufwerke ast Flash-Laufwerke fla für DiskOnChip Flash device RAID-Laufwerke myxd für Mylex, amrd für AMI MegaRAID, idad für Compaq Smart RAID.
David O'Brian Im Original von Hinzufügen von Laufwerken Laufwerke hinzufügen Angenommen, Sie wollen ein neues SCSI-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und Laufwerk Herstellers. Wegen der großen Abweichungen in der genauen Vorgehensweise würde eine detaillierte Beschreibung den Rahmen dieses Dokumentes sprengen. Nachdem Sie das Laufwerk installiert haben, melden Sie sich als Benutzer root an und kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, daß das neue Laufwerk gefunden wurde. Das neue Laufwerk wird, um das Beispiel fortzuführen, da1 heißen und soll unter /1 angehangen werden. Fügen Sie eine IDE-Platte hinzu, wird sie wd1 auf pre-4.0 Systemen und ad1 auf den meisten 4.X Systemen heißen. Partitionen Slices fdisk Da FreeBSD auf IBM-PC kompatiblen Rechnern läuft, muß es die PC BIOS-Partitionen, die verschieden von den traditionellen BSD-Partitionen sind, berücksichtigen. Eine PC Platte kann bis zu vier BIOS-Partitionen enthalten. Wenn die Platte ausschließlich für FreeBSD verwendet wird, können Sie den dedicated Modus benutzen, ansonsten muß FreeBSD in eine der BIOS-Partitionen installiert werden. In FreeBSD heißen die PC BIOS-Partitionen Slices, um sie nicht mit den traditionellen BSD-Partitionen zu verwechseln. Sie können auch Slices auf einer Platte verwenden, die ausschließlich von FreeBSD benutzt wird, sich aber in einem Rechner befindet, der noch ein anderes Betriebssystem installiert hat. Dadurch stellen Sie sicher, daß Sie fdisk des anderen Betriebssystems noch benutzen können. Im Fall von Slices wird die Platte als /dev/da1s1e hinzugefügt. Das heißt: SCSI-Platte, Einheit 1 (die zweite SCSI-Platte), Slice 1 (PC BIOS-Partition 1) und die e BSD-Partition. Wird die Platte ausschließlich für FreeBSD verwendet (dangerously dedicated), wird sie einfach als /dev/da1e hinzugefügt. Verwenden von &man.sysinstall.8; sysinstall hinzufügen von Laufwerken su Das <application>sysinstall</application> Menü Um ein Laufwerk zu partitionieren und zu labeln, kann das menügestützte /stand/sysinstall benutzt werden. Dazu melden Sie sich als root an oder benutzen su, um root zu werden. Starten Sie /stand/sysinstall und wählen das Configure Menü, wählen Sie dort den Punkt Fdisk aus. Partitionieren mit <application>fdisk</application> Innerhalb von fdisk geben Sie A ein, um die ganze Platte für FreeBSD zu nutzen. Beantworten Sie die Frage remain cooperative with any future possible operating systems mit YES. W schreibt die Änderung auf die Platte, danach können Sie fdisk mit q verlassen. Da Sie eine Platte zu einem schon laufenden System hinzugefügt haben, beantworten Sie die Frage nach dem Master Boot Record mit None. Disk Label Editor BSD Partitionen Als nächstes müssen Sie sysinstall verlassen und es erneut starten. Folgen Sie dazu bitte den Anweisungen von oben, aber wählen Sie dieses Mal die Option Label, um in den Disk Label Editor zu gelangen. Hier werden die traditionellen BSD-Partitionen erstellt. Ein Laufwerk kann acht Partitionen, die mit den Buchstaben a-h gekennzeichnet werden, besitzen. Einige Partitionen sind für spezielle Zwecke reserviert. Die a Partition ist für die Root-Partition (/) reserviert. Deshalb sollte nur das Laufwerk, von dem gebootet wird, eine a Partition besitzen. Die b Partition wird für Swap-Partitionen benutzt, wobei Sie diese auf mehreren Platten benutzen dürfen. Im dangerously dedicated Modus spricht die c Partition die gesamte Platte an, werden Slices verwendet, wird damit die ganze Slice angesprochen. Die anderen Partitionen sind für allgemeine Zwecke verwendbar. Der Label Editor von sysinstall bevorzugt die e Partition für Partitionen, die weder Root-Partitionen noch Swap-Partitionen sind. Im Label Editor können Sie ein einzelnes Dateisystem mit C erstellen. Wählen Sie FS, wenn Sie gefragt werden, ob Sie ein FS (Dateisystem) oder Swap erstellen wollen, und geben Sie einen Mountpoint z.B. /mnt an. Wenn Sie nach einer FreeBSD Installation ein Dateisystem mit sysinstall erzeugen, so werden die Einträge in /etc/fstab nicht erzeugt, so daß die Angabe des Mountpoints nicht wichtig ist. Sie können nun das Label auf das Laufwerk schreiben und das Dateisystem erstellen, indem Sie W drücken. Ignorieren Sie die Meldung von sysinstall, daß die neue Partition nicht angehangen werden konnte, und verlassen Sie den Label Editor sowie sysinstall. Ende Im letzten Schritt fügen Sie noch in /etc/fstab den Eintrag für das neue Laufwerk ein. Die Kommandozeile Anlegen von Slices Mit der folgenden Vorgehensweise wird eine Platte mit anderen Betriebssystemen, die vielleicht auf Ihrem Rechner installiert sind, zusammenarbeiten und nicht das fdisk Utility anderer Betriebssysteme stören. Bitte benutzen Sie den dedicated Modus nur dann, wenn Sie dazu einen guten Grund haben! &prompt.root; dd if=/dev/zero of=/dev/rda1 bs=1k count=1 &prompt.root; fdisk -BI da1 # Initialisieren der neuen Platte &prompt.root; disklabel -B -w -r da1s1 auto # Labeln &prompt.root; disklabel -e da1s1 # Editieren des Disklabels und Hinzufügen von Partitionen &prompt.root; mkdir -p /1 &prompt.root; newfs /dev/da1s1e # Wiederholen Sie diesen Schritt für jede Partition &prompt.root; mount -t ufs /dev/da1s1e /1 # Anhängen der Partitionen &prompt.root; vi /etc/fstab # Ändern sie /etc/fstab entsprechend Wenn Sie ein IDE-Laufwerk besitzen, ändern Sie da in ad. Auf Systemen vor 4.0 benutzen Sie wd. Dedicated OS/2 Wenn das neue Laufwerk nicht von anderen Betriebssystemen benutzt werden soll, können Sie es im dedicated Modus betreiben. Beachten Sie bitte, daß Microsoft Betriebssysteme mit diesem Modus eventuell nicht zurechtkommen, aber es entsteht kein Schaden am Laufwerk. Im Gegensatz dazu wird IBMs OS/2 versuchen, jede ihm nicht bekannte Partition zu reparieren. &prompt.root; dd if=/dev/zero of=/dev/rda1 bs=1k count=1 &prompt.root; disklabel -Brw da1 auto &prompt.root; disklabel -e da1 # Erstellen der `e' Partition &prompt.root; newfs -d0 /dev/rda1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # /dev/da1e hinzufügen &prompt.root; mount /1 Eine alternative Methode: &prompt.root; dd if=/dev/zero of=/dev/rda1 count=2 &prompt.root; disklabel /dev/rda1 | disklabel -BrR da1 /dev/stdin &prompt.root; newfs /dev/rda1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # /dev/da1e hinzufügen &prompt.root; mount /1 Netzwerk-, Speicher- und dateibasierte Dateisysteme Laufwerke virtuelle Neben Laufwerken, die sich physikalisch im Rechner befinden wie Floppylaufwerke, CDs, Festplatten usw., kann FreeBSD auch mit anderen Laufwerken, den virtuellen Laufwerken, umgehen. NFS Coda Laufwerke speicherbasierte Diese beinhalten Netzwerkdateisysteme wie Network Filesystem und Coda, speicherbasierte Dateisysteme wie md und auf Dateien basierende Dateisysteme, die mit vnconfig oder mdconfig erstellt wurden. vnconfig: dateibasierte Dateisysteme Laufwerke dateibasierte Mit &man.vnconfig.8; werden vnode Pseudo-Platten konfiguriert und aktiviert. Ein vnode stellt eine Datei dar, auf der Dateioperationen ablaufen. Das bedeutet, daß &man.vnconfig.8; Dateien benutzt, um ein Dateisystem zu erstellen und zu verwalten. Damit ist es z.B. möglich, Dateien, die Images von Floppies oder CDs enthalten, anzuhängen. Um ein existierendes Image eines Dateisystems anzuhängen: Anhängen eines existierenden Images mit vnconfig &prompt.root; vnconfig vn0 diskimage &prompt.root; mount /dev/vn0c /mnt Um ein neues Dateisystem mit vnconfig anzulegen: Anlegen eines dateibasierten Laufwerks &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; vnconfig -s labels -c vn0 newimage &prompt.root; disklabel -r -w vn0 auto &prompt.root; newfs vn0c Warning: 2048 sector(s) in last cylinder unallocated /dev/rvn0c: 10240 sectors in 3 cylinders of 1 tracks, 4096 sectors 5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g) super-block backups (for fsck -b #) at: 32 &prompt.root; mount /dev/vn0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/vn0c 4927 1 4532 0% /mnt md: Dateisysteme im Speicher Laufwerke speicherbasierte md ist ein einfaches und effizientes Mittel um mit speicherbasierten Dateisystemen zu arbeiten. Nehmen Sie einfach ein Dateisystem, daß Sie - z.B. mit &man.vnconfig.8 vorbereitet haben: + z.B. mit &man.vnconfig.8; vorbereitet haben: md Speicher Laufwerk &prompt.root; dd if=newimage of=/dev/md0 5120+0 records in 5120+0 records out &prompt.root; mount /dev/md0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4927 1 4532 0% /mnt Dateisystem Quotas accounting Plattenplatz Disk Quotas Quotas sind ein optionales Feature des Betriebssystems, die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Oft wird dies auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da es dort erwünscht ist, die Ressourcen, die ein Benutzer oder eine Gruppe von Benutzern belegen können, zu limitieren. Das verhindert, daß ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt. Konfiguration des Systems, um Quotas zu aktivieren Bevor Quotas benutzt werden können, müssen sie im Kernel konfiguriert werden, wozu die folgende Zeile der Kernel Konfiguration hinzugefügt wird: options QUOTA Im gewöhnlichen GENERIC Kernel sind Quotas nicht aktiviert, so daß Sie einen angepaßten Kernel konfigurieren und bauen müssen, um Quotas zu benutzen. Weitere Informationen finden Sie in . Durch Hinzufügen der folgenden Zeile in /etc/rc.conf wird das Quota-System aktiviert: enable_quotas=YES Disk Quotas überprüfen Um den Start des Quota-Systems zu beeinflussen, steht eine weitere Variable zur Verfügung. Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit quotacheck überprüft. quotacheck stellt sicher, daß die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein sehr zeitraubender Prozeß, der die Zeit, die das System zum Booten braucht, signifikant beeinflußt. Eine Variable in /etc/rc.config erlaubt es Ihnen, diesen Schritt zu überspringen: check_quotas=NO Wenn Sie ein FreeBSD vor 3.2-RELEASE benutzen, ist die Konfiguration einfacher. In /etc/rc.conf setzen Sie nur eine Variable: check_quotas=YES Schließlich müssen Sie noch in /etc/fstab die Plattenquotas auf Dateisystemebene aktivieren. Dort können Sie für alle Dateisysteme Quotas für Benutzer, Gruppen oder für beide aktivieren. Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem die Option userquota im Feld Optionen von /etc/fstab an. Beispiel: /dev/da1s2g /home ufs rw,userquota 1 2 Um Quotas für Gruppen einzurichten, verwenden Sie groupquota anstelle von userquota. Um Quotas für Benutzer und Gruppen einzurichten, ändern Sie den Eintrag wie folgt ab: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 Die Quotas werden jeweils im Rootverzeichnis des Dateisystems unter dem Namen quota.user für Benutzer-Quotas und quota.group für Gruppen-Quotas abgelegt. Obwohl &man.fstab.5; beschreibt, daß diese Dateien an anderer Stelle gespeichert werden können, wird das nicht empfohlen, da es den Anschein hat, daß die verschiedenen Quota-Utilities das nicht richtig unterstützen. Jetzt sollten Sie Ihr System mit dem neuen Kernel booten. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, die die Quota-Dateien für alle Quotas, die Sie in /etc/fstab definiert haben, anlegen. Deshalb müssen vorher auch keine leeren Quota-Dateien angelegt werden. Normalerweise brauchen Sie die Kommandos quotacheck, quotaon oder quotaoff nicht händisch aufzurufen, obwohl Sie vielleicht die entsprechenden Seiten im Manual lesen sollten, um sich mit ihnen vertraut zu machen. Setzen von Quota-Limits Disk Quotas Limits Nachdem Sie Quotas in Ihrem System aktiviert haben, sollten Sie überprüfen, daß Sie auch tatsächlich aktiviert sind. Führen Sie dazu einfach den folgenden Befehl aus: &prompt.root; quota -v Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollten Sie eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits sehen. Mit edquota können Sie nun Quota-Limits setzen. Sie haben mehrere Möglichkeiten, die Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits. Hardlimit Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Blöcken auf einem Dateisystem und benutzt davon 490 Blöcke, so kann er nur noch 10 weitere Blöcke beanspruchen. Der Versuch, weitere 11 Blöcke zu beanspruchen, wird fehlschlagen. Softlimit Im Gegensatz dazu können Softlimits für eine befristete Zeit überschritten werden. Diese Frist (engl. grace period) beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt. Das folgende Beispiel zeigt die Benutzung von edquota. Wenn edquota aufgerufen wird, wird ein Editor, der durch EDITOR gegeben ist, oder vi falls EDITOR nicht gesetzt ist, gestartet, in dem Sie die Limits eingeben können. &prompt.root; edquota -u test Quotas for user test: /usr: blocks in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: blocks in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) Für jedes Dateisystem, auf dem Quotas aktiv sind, sehen Sie zwei Zeilen, eine für die Block-Quotas und die andere für die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit dieses Benutzers von einem Softlimit von 50 und einem Hardlimit von 75 auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile /usr: blocks in use: 65, limits (soft = 50, hard = 75) zu: /usr: blocks in use: 65, limits (soft = 500, hard = 600) Die neuen Limits sind wirksam, wenn Sie den Editor verlassen. Manchmal ist es erwünscht, die Limits für einen Bereich von UIDs zu setzen. Dies kann mit der Option von edquota bewerkstelligt werden. Weisen Sie dazu die Limits einem Benutzer zu und rufen danach edquota -p protouser startuid-enduid auf. Besitzt beispielsweise der Benutzer test die gewünschten Limits, können diese mit dem folgenden Kommando für die UIDs 10.000 bis 19.999 dupliziert werden: &prompt.root; edquota -p test 10000-19999 Weitere Informationen erhalten Sie in &man.edquota.8;. Überprüfen von Quota-Limits und Plattennutzung Disk Quotas überprüfen Sie können quota oder repquota benutzen, um Quota-Limits und Plattennutzung zu überprüfen. Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann quota benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit repquota erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind. Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt: Disk quotas for user test (uid 1002): Filesystem blocks quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 Disk Quotas Frist Im Dateisystem /usr liegt der Benutzer momentan 15 Blöcke über dem Softlimit von 50 Blöcken und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, daß der Benutzer sein Limit überschritten hat. In der Ausgabe von quota werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Mit werden diese Dateisysteme, wie /usr/var im obigen Beispiel, angezeigt. Quotas über NFS NFS Quotas werden von dem Quota-Subsystem auf dem NFS Server erzwungen. Der &man.rpc.rquotad.8; Dæmon stellt &man.quota.1; die Quota Informationen auf dem NFS Client zur Verfügung, so daß Benutzer auf diesen Systemen ihre Quotas abfragen können. Aktivieren Sie rpc.rquotad in /etc/inetd.conf wie folgt: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Anschließend starten Sie inetd neu: &prompt.root; kill -HUP `cat /var/run/inetd.pid` Mike Meyer Beigesteuert von Handhabung von optischen Speichermedien (CDs & DVDs) CDROMs erstellen Einführung CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Zuerst konnten sie nicht beschrieben werden. Sie wurden so entworfen, daß sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. Sie konnten früher auch leichter als vergleichbar große Medien zwischen Systemen bewegt werden. CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Um eine CD mit FreeBSD zu erstellen, werden die Daten jeder Spur der CD in Dateien vorbereitet und dann die Spuren auf die CD geschrieben. ISO 9660 Dateisysteme ISO-9660 Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. Leider hat es auch damals übliche Grenzen für Dateisysteme implementiert. Glücklicherweise existiert ein Erweiterungsmechanismus, der es korrekt geschriebenen CDs erlaubt, diese Grenzen zu überschreiten und dennoch auf Systemen zu funktionieren, die diese Erweiterungen nicht unterstützen. mkisofs Mit mkisofs wird eine Datei erstellt, die ein ISO 9660-Dateisystem enthält. Das Kommando hat Optionen, um verschiedene Erweiterungen zu unterstützen, und wird unten beschrieben. Sie - können es aus dem sysutils/mkisofs + können es aus dem sysutils/mkisofs Port installieren. CD Brenner ATAPI Welches Tool Sie zum Brennen von CDs benutzen, hängt davon ab, ob Ihr CD Brenner ein ATAPI Gerät ist oder nicht. Mit ATAPI CD Brennern wird burncd benutzt, das Teil des Basissystems ist. SCSI und USB CD-Brenner werden mit cdrecord aus sysutils/cdrtools benutzt. Von burncd wird nur eine beschränkte Anzahl von Laufwerken unterstützt. Um herauszufinden, ob ein Laufwerk unterstützt wird, sehen Sie bitte unter CD-R/RW supported drives nach. mkisofs mkisofs erstellt ein ISO 9660-Dateisystem, das ein Abbild eines Verzeichnisbaumes des Unix-Dateisystems ist. Die einfachste Anwendung ist wie folgt: &prompt.root; mkisofs Imagedatei.iso /path/to/tree Dateisysteme ISO-9660 Dieses Kommando erstellt eine Imagedatei, die ein ISO 9660-Dateisystem enthält, das eine Kopie des Baumes unter /path/to/tree ist. Dabei werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien mit Namen, die im ISO 9660-Dateisystem nicht gültig sind, bleiben unberücksichtigt. Dateisysteme HFS Dateisysteme Joliet Es einige Optionen, um diese Beschränkungen zu überwinden. Die unter Unix-Systemen üblichen Rock Ridge Erweiterungen werden durch aktiviert, aktiviert die von Microsoft Systemen benutzten Joliet Erweiterungen und dient dazu, um das von MacOS benutzte HFS zu erstellen. Für CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit wird ein identisches Abbild des Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum, erstellt, obwohl dies den ISO 9660 Standard verletzen kann. CDROMs bootbare erstellen Die letzte übliche Option ist . Sie wird benutzt, um den Ort eines Bootimages einer El Torito bootbaren CD anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die CD geschrieben werden soll. Wenn /tmp/myboot ein bootbares FreeBSD-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, können Sie ein Abbild eines ISO 9660-Dateisystems in /tmp/bootable.iso wie folgt erstellen: &prompt.root; mkisofs boot/cdboot /tmp/bootable.iso /tmp/myboot Wenn Sie vn in Ihrem Kernel konfiguriert haben, können Sie danach das Dateisystem anhängen: &prompt.root; vnconfig vn0c /tmp/bootable.iso &prompt.root; mount cd9660 /dev/vn0c /mnt - Jetzt können Sie überprüfen, daß + Jetzt können Sie überprüfen, daß /mnt und /tmp/myboot identisch sind. Sie können das Verhalten von mkisofs mit einer Vielzahl von Optionen beeinflussen. Insbesondere können Sie das ISO-9660 Dateisystem modifizieren und Joliet- oder HFS-Dateisysteme brennen. Details dazu entnehmen Sie bitte &man.mkisofs.8;. burncd CDROMs brennen Wenn Sie einen ATAPI CD Brenner besitzen, können Sie burncd benutzen, um ein ISO-Image auf CD zu brennen. burncd ist Teil des Basissystems und unter /usr/sbin/burncd installiert. Da es nicht viele Optionen hat, ist es leicht zu benutzen: &prompt.root; burncd cddevice data imagefile.iso fixate Dieses Kommando brennt eine Kopie von imagefile.iso auf das Gerät cddevice. In der Grundeinstellung wird das Gerät /dev/acd0c benutzt. &man.burncd.8; beschreibt, wie die Schreibgeschwindigkeit gesetzt wird, die CD ausgeworfen wird und Audio Daten geschrieben werden. cdrecord Wenn Sie keinen ATAPI CD Brenner besitzen, benutzen Sie cdrecord, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems. Sie müssen es entweder aus den Ports in sysutils/cdrtools oder dem passenden Paket installieren. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, daß Sie einen Untersetzer brennen. Sie sollten daher den Port aktualisieren, wenn Sie Ihr System aktualisieren bzw. wenn Sie Stable verfolgen, den Port aktualisieren, wenn es eine neue Version gibt. Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfacher als burncd. Ein ISO 9660 Image erstellen Sie mit: &prompt.root; cdrecord device imagefile.iso Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu zu finden. Benutzen Sie dazu den Schalter von cdrecord, der eine ähnliche Ausgabe wie die folgende produziert: CDROMs brennen &prompt.root; cdrecord Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Für die aufgeführten Geräte in der Liste wird das passende Argument zu gegeben. Benutzen Sie die drei Komma separierten Zahlen, die zu Ihrem CD Brenner angegeben sind, als Argument für . Im Beispiel ist das CDRW Gerät 1,5,0, so daß die passende Eingabe =1,5,0 wäre. Einfachere Wege das Argument anzugeben, sind in &man.cdrecord.1; beschrieben. Dort sollten Sie auch nach Informationen über Audio Spuren, das Einstellen der Geschwindigkeit und ähnlichem suchen. Kopieren von Daten-CDs Sie können eine Daten-CD in eine Datei kopieren, die einem Image entspricht, das mit mkisofs erstellt wurde. Mit Hilfe dieses Images können Sie jede Daten-CD kopieren. Das folgende Beispiel verwendet acd0 für das CDROM Gerät. Wenn Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen Namen ein. An den Gerätenamen muß ein c angehangen werden, um die ganze Partition, in diesem Fall ist das die ganze CDROM, anzusprechen. &prompt.root; dd if=/dev/acd0c of=file.iso bs=2048 Danach haben Sie ein Image, das Sie wie oben beschrieben, auf eine CD brennen können. Dieses Verfahren funktioniert nicht mit Audio-CDs! Einhängen von Daten-CDs Nachdem Sie eine Daten-CD gebrannt haben, wollen Sie wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen Sie die CD in den Dateibaum einhängen. Die Voreinstellung für den Typ des Dateisystems von &man.mount.8; ist UFS. Wenn Sie einfach das Kommando &prompt.root; mount /dev/cd0c/mnt versuchen, wird Ihr System die Fehlermeldung Incorrect super block ausgeben und die CD nicht einhängen. Auf der CD befindet sich ja kein UFS Dateisystem, so daß der Versuch, die CD einzuhängen fehlschlägt. Sie müssen &man.mount.8; sagen, daß es ein Dateisystem vom Typ ISO9660 verwenden soll. Dies erreichen Sie durch die Angabe von auf der Kommandozeile. Wenn Sie also die CDROM /dev/cd0c in /mnt einhängen wollen, führen Sie folgenden Befehl aus: &prompt.root; mount -t cd9660 /dev/cd0c /mnt Abhängig vom verwendeten CDROM kann der Gerätename von dem im Beispiel (/dev/cd0c) abweichen. Die Angabe von führt &man.mount.cd9660.8; aus, so daß das Beispiel auf &prompt.root; mount_cd9660 /dev/cd0c /mnt verkürzt werden kann. Auf diese Weise können Sie Daten-CDs von jedem Hersteller verwenden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO 9660 Erweiterungen benutzen. So speichern Joliet CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode Zeichen. Der FreeBSD Kernel unterstützt zur Zeit noch kein Unicode und manche Sonderzeichen werden als Fragezeichen dargestellt. Ab FreeBSD 4.3 sind im CD9660-Treiber Möglichkeiten vorgesehen, eine Konvertierungstabelle zur Laufzeit zu laden. Module für die gebräuchlisten Kodierungen finden Sie im Port sysutils/cd9660_unicode. Manchmal werden Sie die Meldung Device not configured erhalten, wenn Sie versuchen, eine CDROM einzuhängen. Für gewöhnlich liegt das daran, daß das Laufwerk meint es sei keine CD eingelegt, oder daß das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, daß eine CD eingelegt wurde. Seien Sie also geduldig. Manchmal wird ein SCSI-CDROM nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie ein SCSI-CDROM besitzen sollten Sie die folgende Zeile in Ihre Kernelkonfiguration aufnehmen und einen neuen Kernel bauen: options SCSI_DELAY=15000 Die Zeile bewirkt, daß nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CDROM-Laufwerk genügend Zeit zu geben, darauf zu antworten. Brennen von rohen CDs Sie können eine Datei auch direkt auf eine CD brennen, ohne vorher auf ihr ein ISO 9660 Dateisystem einzurichten. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Diese Vorgehensweise hat den Vorteil, daß Sie schneller als das Brennen einer normalen CD ist. &prompt.root; burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate Wenn Sie die Daten von einer solchen CD wieder zurückbekommen wollen, müssen Sie sie direkt von dem rohen Gerät lesen: &prompt.root; tar xzvf /dev/acd1c Eine auf diese Weise gefertigte CD können Sie nicht in das Dateisystem einhängen. Sie können Sie auch nicht auf einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in das Dateisystem einhängen oder mit anderen Betriebssystemen - austauschen wollen, müssen Sie sysutils/mkisofs, + austauschen wollen, müssen Sie + sysutils/mkisofs, wie oben beschrieben, benutzen. RAID Software RAID Christopher Shumway Geschrieben von Valentino Vaschetto Mark Up von ccd (Concatenated Disk Configuration) Heutzutage scheint jeder eine Sammlung von Multimedia-Dateien, von MP3s bis hin zu Video-Clips, zu besitzen. Das meiste meiner CDROM Sammlung habe ich nach MP3 konvertiert. Da sich meine Musik nun an einem zentralen Ort befindet, brauche ich nicht mehr die Audio-CD zu dem Lied, das ich gerade im Sinn habe, zu suchen. Allerdings mußte ich mich fragen, wo ich denn die ganzen Dateien speichern wollte. Die wichtigsten Faktoren bei der Auswahl von Massenspeichern sind Geschwindigkeit, Zuverlässigkeit und der Preis. Selten findet sich eine ausgewogene Mischung aller drei Faktoren. Schnelle und zuverlässige Massenspeicher sind für gewöhnlich teuer. Um die Kosten zu senken, muß entweder an der Geschwindigkeit oder an der Zuverlässigkeit gespart werden. Bei der Planung meines Systems habe ich die Faktoren nach ihrer Wichtigkeit geordnet. Der wichtigste Faktor waren die Kosten, da ich sehr viel Speicher zu einem guten Preis brauchte. Der nächste Faktor, Geschwindigkeit, war nicht so wichtig, da auf die Daten über ein geswitchtes 100 Mbit Ethernet, das wahrscheinlich den Engpaß darstellen würde, zugegriffen werden sollte. Die Möglichkeit, die Ein- und Ausgabeoperationen auf mehrere Platten zu verteilen, sollte für dieses Netzwerk mehr als schnell genug sein. Die Frage nach der Zuverlässigkeit war leicht zu beantworten, da sich die Daten ja schon auf CD-Rs befanden und der Massenspeicher nur für den leichteren Zugriff auf die Daten sorgen sollte. Wenn ein Laufwerk kaputt geht, kann es leicht ersetzt werden und die Daten können nach dem Wiederherstellen des Dateisystems von CD-Rs wieder kopiert werden. Unter dem Strich wollte ich also möglichst viel Speicher für mein Geld. Große IDE-Laufwerke sind heutzutage billig: Ich fand IDE-Laufwerke von Western Digital mit 30,7 GB und 5400 RPM für 130 US Dollars, von denen ich drei und damit ungefähr neunzig Gigabyte Speicher kaufte. Installation der Hardware Die Laufwerke wurden in ein System eingebaut, das schon ein IDE-Laufwerk als Systemplatte besaß. Es wäre ideal gewesen, für jedes IDE-Laufwerk einen eigenen Controller und ein eigenes Kabel zu haben, doch haben das die damit verbundenen Kosten verboten. Zwei Platten wurden als Slave und eine als Master konfiguriert. An den ersten IDE-Controller schloß ich eine als Slave konfigurierte Platte zusätzlich zur Systemplatte an. Die beiden anderen Platten wurden als Master und Slave an den zweiten Controller angeschlossen. Beim Reboot wurde das BIOS so konfiguriert, daß es die angeschlossenen Platten automatisch erkennt und FreeBSD erkannte die Platten ebenfalls: ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33 Wenn FreeBSD die Platten jetzt nicht erkennt, überprüfen Sie, ob die Jumper korrekt konfiguriert sind. Ich habe von vielen Problemen gehört, die dadurch entstanden sind, daß die Platten mit cable select anstatt richtig als Master und Slave konfiguriert waren. Die nächste Überlegung war, wie die Platten in das Dateisystem eingebunden werden sollten. Ich schaute mir &man.vinum.8; und FreeBSDs &man.ccd.4; im Hinblick auf meine Konfiguration an. Die Entscheidung fiel zugunsten von &man.ccd.4;, da es aus weniger Teilen besteht und weniger Teile häufig eine höhere Stabilität anzeigen. Vinum schien für meine Zwecke ein bißchen zuviel zu sein. Konfiguration von CCD Mit ccd können mehrere identische Platten zu einem logischen Dateisystem zusammengefaßt werden. Um ccd zu nutzen, muß der Kernel mit der entsprechenden Unterstützung übersetzt werden. Ich fügte die folgende Zeile zu meiner Konfigurationsdatei hinzu und übersetzte den Kernel neu: pseudo-device ccd 4 In FreeBSD 4.0 und späteren Versionen kann ccd auch als Kernelmodul geladen werden. Um ccd zu nutzen, müssen die Laufwerke zuerst mit einem Label versehen werden. Die Label erstellte ich mit den folgenden Kommandos: disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto Damit wurden die Label ad1c, ad2c und ad3c erstellt, die jeweils das gesamte Laufwerk umfassen. Im nächsten Schritt muß der Typ des Labels geändert werden. Zum Editieren der Lables benutzte ich folgende Kommandos: disklabel -e ad1 disklabel -e ad2 disklabel -e ad3 Für jedes Label startete dies den durch EDITOR gegebenen Editor, in meinem Fall &man.vi.1;, der dann einen Abschnitt, wie den folgenden zeigte: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) Für ccd mußte ich eine e Partition erstellen. Diese kann durch Kopieren der c Partition erstellt werden, allerdings muß auf 4.2BSD gesetzt werden. Der editierte Label sah dann wie folgt aus: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597) Erstellen des Dateisystems Nachdem die Label erstellt waren, mußte ich ccd konfigurieren. Dazu dient &man.ccdconfig.8;, das als ersten Parameter das zu konfigurierende Gerät, in meinem Fall /dev/ccd0c, erwartet. Wenn die Gerätedatei für ccd0c noch nicht existiert, können Sie diese mit den folgenden Kommandos erstellen: cd /dev sh MAKEDEV ccd0 Das nächste Argument, das ccdconfig erwartet, ist der Interleave für das Dateisystem. Der Interleave definiert die Größe eines Streifens in Blöcken, die normal 512 Bytes groß sind. Ein Interleave von 32 ist demnach 16384 Bytes groß. Nach der Angabe des Interleaves können Sie Optionen für ccdconfig angeben. Wenn Sie gespiegelte Laufwerke einrichten möchten, müssen Sie an dieser Stelle eine Option angeben. Da ich keinen Spiegel erstellen wollte, habe ich 0 eingesetzt. Zum Schluß werden die Geräte des Verbundes angegeben. Die komplette Kommandozeile sieht dann wie folgt aus: ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e Damit ist ccd konfiguriert und mit &man.newfs.8; kann nun ein Dateisystem angelegt werden: newfs /dev/ccd0c Automatisierung Damit ccd beim Start automatisch aktiviert wird, ist die Datei /etc/ccd.conf mit dem folgenden Kommando zu erstellen: ccdconfig -g > /etc/ccd.conf Wenn /etc/ccd.conf existiert, wird beim Reboot ccdconfig -C von /etc/rc aufgerufen. Damit wird ccd eingerichtet und die darauf befindlichen Dateisysteme können angehängt werden. Wenn Sie in den Single-User Modus booten, müssen Sie den Verbund erst konfigurieren, bevor Sie darauf befindliche Dateisysteme anhängen können: ccdconfig -C In /etc/fstab ist noch ein Eintrag für das auf dem Verbund befindliche Dateisystem zu erstellen, damit dieses beim Start des Systems immer angehängt wird: /dev/ccd0c /media ufs rw 2 2 vinum (Logical Volume Manager) XXX Hardware RAID RAID Hardware FreeBSD unterstützt eine Reihe von RAID-Controllern von populären Herstellern wie Adaptec, 3Ware, Mylex, DPT, AMI, Dell, HP, IBM und weiteren. Die Liste der unterstützten Adapter wächst ständig, lesen Sie bitte die Release-Notes, um eine vollständige Aufzählung zu erhalten. Bernd Warken Übersetzt von Bandmedien Bandmedien Die wichtigsten Bandmedien sind 4mm, 8mm, QIC, Mini-Cartridge und DLT. 4mm (DDS: Digital Data Storage) Bandmedien DDS (4mm) Bänder Bandmedien QIC Bänder Die 4mm-Bänder ersetzen mehr und mehr das QIC-Format als Backupmedium der Wahl für Workstations. Dieser Trend nahm stark zu, als Conner die Firma Archive, einen führenden Hersteller von QIC-Laufwerken, aufkaufte und die Produktion von QIC-Laufwerken stoppte. 4mm-Laufwerke sind klein und ruhig, haben aber nicht den gleichen Ruf der Zuverlässigkeit, den die 8mm-Laufwerke genießen. Die 4mm-Kassetten sind preiswerter und mit den Maßen 76,2 x 50,8 x 12,7 mm (3 x 2 x 0,5 Inch) kleiner als die 8mm-Kassetten. Sowohl die 4mm- als auch die 8mm-Magnetköpfe haben eine relativ kurze Lebensdauer, weil beide die gleiche Helical-Scan-Technologie benutzen. Der Datendurchsatz dieser Laufwerke beginnt bei etwa 150 kByte/s, Spitzenwerte liegen bei etwa 500 kByte/s. Die Datenkapazität liegt zwischen 1,3 GB und 2 GB. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Es gibt Multi-Drive-Einheiten für Bandbibliotheken mit bis zu 6 Laufwerken in einem Gehäuse und automatischem Bandwechsel. Die Kapazität einer solchen Bibliothek liegt bei 240 GB. Der Standard DDS-3 unterstützt nun Bandkapazitäten bis zu 12 GB (oder komprimiert 24 GB). 4mm-Laufwerke, ebenso wie 8mm-Laufwerke, verwenden Helical-Scan. Alle Vor- und Nachteile von Helical-Scan gelten sowohl für 4mm- als auch für 8mm-Laufwerke. Bänder sollten nach 2.000 Banddurchläufen oder 100 vollen Backups ersetzt werden. 8mm (Exabyte) Bandmedien Exabyte (8mm) Bänder 8mm-Bänder sind die verbreitetsten SCSI-Bandlaufwerke; sie sind das geeignetste Bandformat zum Austausch von Bändern. Fast an jedem Standort gibt es ein 8mm-Bandlaufwerk mit 2 GB. 8mm-Bänder sind zuverlässig, gut zu handhaben und arbeiten leise. Bandkassetten sind preiswert und klein mit 122 x 84 x 15 mm (4,8 x 3,3 x 0,6 Inch). ein Nachteil der 8mm-Technologie ist die relativ kurze Lebensdauer des Schreib-/Lesekopfs und der Bänder auf Grund der hohen Relativgeschwindigkeit des Bandes über die Köpfe hinweg. Der Datendurchsatz liegt ungefähr zwischen 250 kByte/s und 500 kByte/s. Die Datenkapazität beginnt bei 300 MB und erreicht bis zu 7 GB bei den Spitzengeräten. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Diese Laufwerke sind erhältlich in Form von Einzelgeräten oder als Multi-Drive-Bandbibliotheken mit 6 Laufwerken und 120 Bändern in einem Gehäuse. Die Bänder werden von der Geräteeinheit automatisch gewechselt. Die Kapazität einer solchen Bibliothek liegt bei 840 GB und mehr. Das Exabyte-Modell Mammoth unterstützt 12 GB auf einem Band (24 GB mit Kompression) und kostet etwa doppelt so viel wie ein konventionelles Bandlaufwerk. Die Daten werden mittels Helical-Scan auf das Band aufgezeichnet, die Köpfe sind leicht schräg zum Medium angebracht (mit einem Winkel von etwa 6 Grad). Das Band wickelt sich 270 Grad um die Spule, die die Köpfe trägt. Die Spule dreht sich, während das Band darüberläuft. Das Resultat ist eine hohe Datendichte und eng gepackte Spuren, die von einem Rand des Bands zum gegenüberliegenden quer über das Band abgewinkelt verlaufen. QIC Bandmedien QIC-150 QIC-150-Bänder und -Laufwerke sind wohl der am weitesten verbreitete Bandtyp überhaupt. QIC-Bandlaufwerke sind die preiswertesten seriösen Backupgeräte, die angeboten werden. Der Nachteil dabei ist der hohe Preis der Bänder. QIC-Bänder sind im Vergleich zu 8mm- oder 4mm-Bändern bis zu 5 Mal teurer, wenn man den Preis auf 1 GB Datenkapazität umrechnet. Aber wenn Ihr Bedarf mit einem halben Dutzend Bänder abgedeckt werden kann, mag QIC die richtige Wahl sein. QIC ist der gängigste Bandlaufwerkstyp. Jeder Standort hat ein QIC-Laufwerk der einen oder anderen Dichte. Aber gerade das ist der Haken an der Sache, QIC bietet eine große Anzahl verschiedener Datendichten auf physikalisch ähnlichen (manchmal identischen) Bändern. QIC-Laufwerke sind nicht leise. Diese Laufwerke suchen lautstark die richtige Bandstelle, bevor sie mit der Datenaufzeichnung beginnen. Sie sind während des Lesens, Schreibens und Suchens deutlich hörbar. Die Abmessungen der QIC-Kassetten betragen 152.4 x 101.6 x 17.78 mm (6 x 4 x 0,7 Inch), die QIC-Bandbreite beträgt 6,35 mm (1/4 Inch). Mini-Cartridges, die die gleiche Bandbreite verwenden, werden gesondert vorgestellt. Bandbibliotheken und Bandwechselgeräte gibt es im QIC-Format keine. Der Datendurchsatz liegt ungefähr zwischen 150 kByte/s und 500 kByte/s. Die Datenkapazität reicht von 40 MB bis zu 15 GB. Hardwarekompression ist in vielen der neueren QIC-Laufwerke eingebaut. QIC-Laufwerke werden heute seltener eingesetzt; sie werden von den DAT-Laufwerken abgelöst. Die Daten werden auf dem Band in Spuren aufgezeichnet. Die Spuren verlaufen entlang der Längsachse des Bandmediums von einem Ende zum anderen. Die Anzahl der Spuren, und damit auch die Breite einer Spur, variiert mit der Kapazität des Laufwerks. Die meisten, wenn nicht alle neueren Laufwerke sind rückwärtskompatibel, zumindest zum Lesen (aber oft auch zum Schreiben). QIC hat einen guten Ruf bezüglich der Datensicherheit (die Mechanik ist einfacher und robuster als diejenige der Helical-Scan-Laufwerken). Bänder sollten nach 5,000 Backups ersetzt werden. XXX* Mini-Cartridge DLT Bandmedien DLT DLT hat die schnellste Datentransferrate von allen hier aufgelisteten Gerätetypen. Das 1/2-Inch-Band (12,7 mm) befindet sich in einer Spulkassette mit den Abmessungen 101,6 x 101,6 x 25,4 mm (4 x 4 x 1 Inch). Die eine Seite der Kassette hat eine bewegliche Abdeckung. Der Laufwerksmechanismus öffnet diese Abdeckung und zieht die Bandführung heraus. Die Bandführung trägt ein ovales Loch, die das Laufwerk zum Einhängen des Bandes benutzt. Die Aufwickelspule befindet sich im Innern des Bandlaufwerks. Bei allen anderen hier besprochenen Bandkassetten (9-Spur-Bänder sind die einzige Ausnahme) befinden sich sowohl die Auf- als auch die Abwickelspule im Inneren der Bandkassette. Der Datendurchsatz liegt bei etwa 1,5 MBytes/s, der dreifache Durchsatz der 4mm-, 8mm- oder QIC-Bandlaufwerke. Die Datenkapazität reicht von 10 GB bis 20 GB für Einfachlaufwerke. Auch Mehrfachbandgeräte sind erhältlich, sowohl als Bandwechsler wie auch als Multi-Drive-Bandbibliotheken, die Platz für 5 bis 900 Bänder verteilt auf 1 bis 20 Laufwerke enthalten, mit einer Speicherkapazität von 50 GB bis 9 TB. Mit Kompression unterstützt das Format DLT Type IV bis zu 70 GB Kapazität. Die Daten werden auf dem Band in Spuren aufgezeichnet, die parallel zur Bewegungsrichtung verlaufen (gerade so wie bei den QIC-Bändern). Zwei Spuren werden dabei gleichzeitig beschrieben. Die Lebenszeit der Lese- und Schreibköpfe sind relativ lang; denn sobald das Band anhält, gibt es keine Relativbewegung mehr zwischen den Köpfen und dem Band. AIT Bandmedien AIT AIT ist ein neues Format von Sony, das (mit Kompression) bis zu 50 GB pro Band speichern kann. Die Bänder haben einen Speicherchip, der einen Index mit dem Inhalt des Bandes anlegt. Dieser Index kann vom Bandlaufwerk zur schnellen Bestimmung der Lage von Dateien auf dem Band benutzt werden, während andere Bänder einige Minuten zur Lokalisierung benötigen. Entsprechende Software wie etwa SAMS:Alexandria können 40 oder mehr AIT-Bandbibliotheken verarbeiten, indem sie direkt mit dem Speicherchip des Bandes kommunizieren, wenn der Bandinhalt am Bildschirm dargestellt werden soll oder bestimmt werden soll, welche Dateien auf welchem Band gespeichert sind, oder um das richtige Band zu lokalisieren, zu laden und Daten vom Band zurückzuspielen. Bibliotheken dieser Art liegen in der Preiskategorie von $20,000, womit sie etwas aus dem Hobbymarkt herausfallen. Die erste Benutzung eines neuen Bands Der Versuch ein neues, vollkommen leeres Band ohne weiteres zu lesen oder zu beschreiben wird schiefgehen. Auf der Konsole werden dann Meldungen ähnlich wie folgt ausgegeben: sa0(ncr1:4:0): NOT READY asc:4,1 0(ncr1:4:0): Logical unit is in process of becoming ready Das Band enthält nämlich keinen Identifier-Block (Blocknummer 0). Alle QIC-Bandlaufwerke seit der Einführung des QIC-525-Standards schreiben einen Identifier-Block auf das Band. Es gibt zwei Lösungen: mt fsf 1 veranlasst das Bandlaufwerk einen Identifier-Block auf das Band zu schreiben. Das Band durch Drücken des Bandauswurfknopfs an der Vorderseite des Bandgeräts auswerfen. Danach das Band wieder einlegen und Daten auf das Band übertragen wie in dump beschrieben. Das Kommando dump.8 gibt die Meldung DUMP: End of tape detected zurück und die Konsole zeigt: HARDWARE FAILURE info:280 asc:80,96. Das Band zurückspulen mit dem Kommando: mt rewind. Nachfolgende Bandoperationen werden dann erfolgreich ausgeführt. Backup-Programme Backup Software Die drei wichtigsten Programme sind &man.dump.8;, &man.tar.1;, and &man.cpio.1;. Aufspielen und Wiederherstellen Backup Software Sichern / Wiederherstellen dump restore dump und restore sind die traditionellen Backupprogramme in UNIX. Sie betrachten das Laufwerk als eine Ansammlung von Blöcken, operieren also unterhalb dem Abstraktionslevel von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. dump sichert ein ganzes Dateisystem auf einem Gerät, es ist nicht möglich nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfaßt zu sichern. dump schreibt keine Dateien oder Verzeichnisse auf das Band, sondern die Blöcke, aus denen Dateien und Verzeichnisse bestehen. Wenn Sie mit dump das Root-Verzeichnis sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind. dump hat einige Eigenarten, die noch aus den frühen Tagen der Version 6 von ATT UNIX (ca. 1975) stammen. Die Parameter sind für 9-Spur-Bänder (6250 bpi) voreingestellt, nicht auf die heute üblichen Medien hoher Dichte (bis zu 62.182 ftpi). Bei der Verwendung der Kapazitäten moderner Bandlaufwerke muss diese Voreinstellung auf der Kommandozeile überschrieben werden. rhosts rdump und rrestore können Daten über Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen Computers befindet, überspielen. Beide Programme benutzen die Befehle rcmd und ruserok zum Zugriff auf das entfernte Bandlaufwerk. Daher muss der Anwender, der das Backup durchführt, auf dem entfernten Computer eine Zugangsberechtigung für rhosts haben. Die Argumente zu rdump und rrestore müssen zur Verwendung auf dem entfernten Computer geeignet sein. (Z.B. lautet das Kommando zum Aufrufen von rdump von einem FreeBSD-Computer aus auf ein Exabyte-Bandlaufwerk auf einer Sun namens komodo: /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nrsa8 /dev/rda0a 2>&1). Man beachte, dass bei der Ausführung die Sicherheitsvorkehrungen wie beim Aufruf des Kommandos rhosts gelten. Erkundigen Sie sich nach Ihrer Zugangsberechtigung. Es ist auch möglich dump und restore über eine gesicherte Verbindung mit ssh einzusetzen. <command>rdump</command> mit <application>ssh</application> benutzen &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz <command>tar</command> Backup Software tar &man.tar.1; stammt ebenfalls aus Version 6 von ATT Unix (ca. 1975). tar arbeitet mit dem Dateisystem, denn es schreibt Dateien und Verzeichnisse auf das Band. tar unterstützt zwar nicht den vollen Umfang von Optionen, die bei &man.cpio.1; zur Verfügung stehen, aber dafür erfordert tar nicht die ungewöhnliche Kommando-Pipeline, die cpio verwendet. tar Die meisten Versionen von tar unterstützen keine Backups über das Netzwerk. Die GNU-Version von tar die in FreeBSD verwendet wird, unterstüzt jedoch entfernte Geräte mit der gleichen Syntax wie rdump. Um tar für ein Exabyte-Bandlaufwerk auf einer Sun namens komodo auszuführen, muss folgendes Kommando aufgerufen werden: /usr/bin/tar cf komodo:/dev/nrsa8 . 2>&1. Bei den Versionen ohne Unterstützung für entfernte Geräte kann man die Daten über eine Pipeline und rsh an ein entferntes Laufwerk senden. &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b Wenn Sie Bedenken bezüglich der Sicherheit beim Backup über's Netz haben, sollten Sie ssh anstatt rsh benutzen. Cpio Backup Software cpio &man.cpio.1; ist das ursprüngliche Unix-Programm zum Dateitransfer mit magnetischen Medien. cpio hat (neben vielen anderen Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben einer Anzahl verschiedener Archivformate und zum Weiterleiten von Daten an andere Programme über Pipeline. Dieses letztes Leistungsmerkmal macht cpio zu einer ausgezeichneten Wahl für Installationsmedien. Leider kann cpio keine Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden Dateien über stdin angegeben werden muss. cpio unterstützt keine Backups über das Netzwerk. Man kann aber eine Pipeline und rsh verwenden, um Daten an ein entferntes Bandlaufwerk zu senden. &prompt.root; for f in directory_list; do find $f >> backup.list done &prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device" Dabei steht directory_list für eine Aufzählung der Verzeichnisse, die Sie sichern wollen. user@host gibt den Benutzer auf dem Zielrechner an, der die Sicherung laufen läßt. Der Ort der Sicherung wird durch backup_device angegeben (z.B. /dev/nrsa0). <command>pax</command> Backup Software pax pax POSIX IEEE &man.pax.1; ist die Antwort von IEEE/POSIX auf tar und cpio. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat POSIX, statt eine Standardisierung zwischen diesen auszufechten, ein neues Archivprogramm geschaffen. pax versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Die Kommandostruktur ähnelt eher cpioals tar. <application>Amanda</application> Backup Software Amanda Amanda Amanda (Advanced Maryland Network Disk Archiver) ist ein Client/Server-Backupsystem, nicht nur ein einzelnes Programm. Ein Amanda-Server kann auf einem einzigen Bandlaufwerk Datensicherungen von jeder beliebigen Anzahl von Computern speichern, sofern auf diesen jeweils ein Amanda-Client läuft und sie über Netzwerk mit dem Amanda-Server verbunden sind. Ein häufiges Problem bei Standorten mit einer Anzahl großer Festplatten ist, dass das Kopieren der Daten auf Band langsamer vor sich geht als solche Daten anfallen. Amanda löst dieses Problem durch Verwendung einer Holding Disk, einer Festplatte zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme. Für Datensicherungen über einen längeren Zeitraum erzeugt Amanda Archivsets von allen Dateisystemen, die in Amanda's Konfigurationsdatei genannt werden. Ein Archivset ist eine Gruppe von Bändern mit vollen Backups und Reihen von inkrementellen (oder differentiellen) Backups, die jeweils nur die Unterschiede zum vorigen Backup enthalten. Zur Wiederherstellung von beschädigten Dateissystemen benötigt man das letzte volle Backup und alle darauf folgenden inkrementellen Backups. Die Konfigurationsdatei ermöglicht die Feineinstellung der Backups und des Netzwerkverkehrs von Amanda. Amanda kann zum Schreiben der Daten auf das Band jedes der oben beschriebenen Backuprogramme verwenden. Amanda ist erhältlich als Portierung oder als Softwarepaket, es ist nicht von vorne herein auf dem System installiert. Tue nichts Tue nichts ist kein Computerprogramm, sondern die am häufigsten angewendete Backupstrategie. Diese kostet nichts, man muss keinen Backupplan befolgen, einfach nur nein sagen. Wenn etwas passiert, einfach grinsen und ertragen! Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist die Strategie Tue nichts das geeignetste Backupprogramm für Ihren Computer. Aber Unix ist ein nützliches Werkzeug, Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten eine Sammlung von Dateien haben, die für Sie wertvoll geworden sind. Tue nichts ist die richtige Backupmethode für /usr/obj und andere Verzeichnisbäume, die vom Computer exakt wiedererzeugt werden können. Ein Beispiel sind die Dateien, die diese Handbuchseiten darstellen — sie wurden aus Quelldateien im Format SGML erzeugt. Es ist nicht nötig, Sicherheitskopien der Dateien in den sekundären Formaten wie etwa HTML zu erstellen. Die Quelldateien in SGML sollten jedoch in die regelmäßigen Backups mit einbezogen werden. Welches Backup-Programm ist am Besten? LISA dump, Punkt und Schluss. Elizabeth D. Zwicky hat alle hier genannten Backup-Programme bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur Sicherung aller Daten mit Berücksichtigung aller Besonderheiten von UNIX-Dateisystemen ist dump. Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt ungewöhnlicher Bedingungen (und einiger gar nicht so ungewöhnlicher) und testete jedes Programm durch ein Backup und eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten waren Dateien mit Löchern, Dateien mit Löchern und einem Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im Dateinamen, unlesbare und nichtschreibbare Dateien, Gerätedateien, Dateien, deren Länge sich während des Backups ändert, Dateien, die während des Backups erzeugt und gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse in LISA V im Oktober 1991, s. Torture-testing Backup and Archive Programs. Die Wiederherstellung in einem Notfall Vor dem Unglück Es sind nur vier Vorkehrungen zu treffen, um auf jedes erdenkliche Unglück vorbereitet zu sein. disklabel Als erstes drucken Sie das Disklabel jeder Ihrer Festplatten (z.B. mittels disklabel da0 | lpr), die Partitions- und Dateisystemtabelle jeder Festplatte (mit /etc/fstab) sowie alle Bootmeldungen, jeweils in zweifacher Ausfertigung. fix-it floppies Zweitens, überzeugen Sie sich, dass sowohl die Bootdiskette als auch die Reparaturdiskette (boot.flp bzw. fixit.flp) all Ihre Geräte ansprechen können. Die einfachste Methode dies nach zu prüfen ist, Ihren Rechner mit der Boot-Diskette im Floppylaufwerk neu zu starten und die Bootmeldungen zu durchzusehen. Wenn all Ihre Geräte aufgelistet sind und funktionieren, können Sie weiter zu Schritt drei gehen. Ist das nicht der Fall, müssen Sie sich eine eigene Version der beiden zum Booten benötigten Disketten erstellen. Diese müssen einen Kernel enthalten, der all Ihre Platten mounten kann und Zugriff auf Ihr Bandlaufwerk gestattet. Diese Disketten müssen ferner folgende Programme enthalten: fdisk, disklabel, newfs, mount sowie jedes Backup-Programm, das Sie verwenden. Diese Programme müssen statisch gelinkt sein. Falls Sie dump verwenden, muss die Diskette auch restore enthalten. Drittens, machen Sie oft Backups auf Band. Jede Änderung seit Ihrem letzten Backup kann unwiederbringlich verloren gehen. Versehen Sie die Backup-Bänder mit Schreibschutz. Viertens, testen Sie aus, wie die Disketten (entweder boot.flp und fixit.flp oder Ihre beiden eigenen Disketten aus Schritt zwei) und die Bänder mit den Backups zu behandeln sind. Machen Sie sich Notizen zu diesem Test. Bewahren Sie diese Notizen zusammen mit den Bootdisketten, den Ausdrucken und den Bändern mit den Backups auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt sein, dass Sie ohne Ihre Notizen evt. das Backup auf Ihren Bändern zerstören. (Wie das geht? Man braucht nur unglücklicherweise den Befehl tar cvf /dev/rsa0 einzugeben um ein Band zu überschreiben). Als zusätzliche Sicherheitsvorkehrung, kann man jeweils die Disketten und Bänder zweifach erstellen. Eine der Kopien sollte an einem entfernten Standort aufbewahrt werden. Ein entfernter Standort ist NICHT der Keller im gleichen Bürogebäude. Eine Anzahl von Firmen im World Trade Center musste diese Lektion auf die harte Tour lernen. Ein entfernter Standort sollte von Ihrem Computer und Ihren Festplatten physikalisch durch eine erhebliche Entfernung getrennt sein. Ein Beispielskript zum Erstellen eigener Bootdisketten /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root cp -f /dev/MAKEDEV /mnt/dev chmod 755 /mnt/dev/MAKEDEV chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore # # Geraetedateien erstellen # cd /mnt/dev ./MAKEDEV std ./MAKEDEV da0 ./MAKEDEV da1 ./MAKEDEV da2 ./MAKEDEV sa0 ./MAKEDEV pty0 cd / # # Minimale Dateisystemtabelle erstellen # cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd < Nach dem Unglück Die Schlüsselfrage ist, ob Ihre Hardware überlebt hat. Denn da Sie ja regelmäßig Backups angefertigt haben, brauchen Sie sich um die Software keine Sorgen zu machen. Falls die Hardware beschädigt wurde, ersetzen Sie zuerst die defekten Teile. Falls die Hardware funktioniert, überprüfen Sie die Disketten. Wenn Sie eigene Bootdisketten verwenden, booten Sie im Single-User-Modus (geben dazu Sie -s am Boot-Prompt boot: ein). Überspringen Sie den folgenden Paragrafen. Wenn Sie die Standarddisketten boot.flp und fixit.flp verwenden, lesen Sie hier weiter. Legen Sie die Bootdiskette boot.flp in das erste Floppylaufwerk ein und starten Sie den Computer. Wie üblich wird dann das originale Installationsmenü von FreeBSD gestartet. Wählen Sie die Option Fixit--Repair mode with CDROM or floppy.. Legen Sie die Diskette fixit.flp ein, wenn danach gefragt wird. restore und die anderen Programme, die Sie benötigen, befinden sich dann in /mnt2/stand. Stellen Sie die Dateisysteme nacheinander, getrennt von einander, wieder her. mount Root-Partition disklabel newfs Versuchen Sie die Root-Partition Ihrer ersten Festplatte einzuhängen (z.B. mit mount /dev/sd0a /mnt). Wenn das Disklabel beschädigt wurde, benutzen Sie disklabel um die Platte neu zu partitionieren und zu benennen und zwar so, dass die Festplatte mit dem Label übereinstimmt, das Sie ausgedruckt und aufbewahrt haben. Verwenden Sie newfs um neue Dateisysteme auf den Partitionen anzulegen. Hängen Sie nun die Root-Partition der Festplatte mit Schreibzugriff ein (mit mount -u -o rw /mnt). Benutzen Sie Ihr Backup-Programm um die Daten für das jeweilige Dateisystem aus den Backup-Bändern wieder her zu stellen (z.B. durch restore vrf /dev/sta). Hängen Sie das Dateisystem wieder aus (z.B. durch umount /mnt). Wiederholen Sie diesen Ablauf für jedes betroffene Dateisystem. Sobald Ihr System wieder läuft, machen Sie gleich wieder ein vollständiges Backup auf neue Bänder. Denn die Ursache für den Absturz oder den Datenverlust kann wieder zuschlagen. Eine weitere Stunde, die Sie jetzt noch dranhängen, kann Ihnen später ein weiteres Missgeschick ersparen. * Ich habe mich nicht auf Missgeschicke vorbereitet - was nun? ]]> Julio Merino Beigetragen von Disketten Heutzutage sind Disketten kein geeignetes Speichermedium mehr. Trotzdem werden sie manchmal noch verwendet, wenn zum Beispiel kein anderes Medium zur Verfügung steht und auf Daten eines anderen Rechners zugegriffen werden muß. Dieser Abschnitt zeigt Ihnen, wie Sie Disketten formatieren, Daten auf Disketten schreiben und Daten von Disketten lesen. Tatsächlich habe ich diesen Abschnitt geschrieben, um Ihnen zu zeigen, wie Sie die Kapazität Ihrer Disketten erhöhen können. Die Gerätedateien Wie auf jedes andere Gerät auch, greifen Sie auf Disketten über Einträge im Verzeichnis /dev zu. Um auf das rohe Gerät zuzugreifen, benutzen Sie /dev/rfdX, wobei Sie für X die Gerätenummer, normalerweise 0, einsetzen. Auf eine formatierte Diskette greifen Sie über das Gerät /dev/fdX zu. Sie können dazu auch die Einträge /dev/fdXY, wobei Y ein Buchstabe ist, benutzen. Die Einträge der Form /dev/fdX. Größe werden genutzt, um Disketten zu formatieren. Größe gibt die Kapazität der Diskette in Kilobytes an. Manchmal müssen Sie diese Einträge in /dev anlegen oder wiederherstellen. Dazu können Sie das folgende Kommando benutzen: &prompt.root; cd /dev && ./MAKEDEV "fd*" Formatieren Bevor eine Diskette benutzt werden kann, muß Sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können sie allerdings noch einmal formatieren, um das Medium zu überprüfen, oder die Kapazität zu erhöhen. Um eine Diskette zu formatieren, benutzen Sie fdformat. Dieses Utility erwartet die Angabe eines Gerätenamens der Form /dev/fdX. Größe aus /dev, mit dem Sie die Kapazität der Diskette steuern können. Legen Sie eine 3,5 Zoll Diskette in Ihr Laufwerk ein und führen das folgende Kommando aus: &prompt.root; /usr/sbin/fdformat /dev/rfd0.1440 Das Formatieren dauert eine Weile und hier auftauchende Fehler zeigen schlechte Medien an. Um eine andere Kapazität zu erzwingen, nehmen Sie einen anderen Eintrag aus /dev. Benutzen Sie dieselbe Diskette mit folgendem Befehl: &prompt.root; /usr/sbin/fdformat /dev/rfd0.1720 Das Formatieren mit einer höheren Kapazität nimmt etwas mehr Zeit in Anspruch als das vorige Beispiel. Nachdem der Befehl ausgeführt ist, haben Sie eine Diskette mit 1720 KB Kapazität. Sie können auch andere Einträge aus /dev verwenden, doch sind 1720 KB für 3,5 Zoll Disketten am besten geeignet. Das Disklabel Nach dem Formatieren muß auf der Diskette ein Disklabel erstellt werden. Das Disklabel wird später zerstört, ist aber notwendig, um die Größe und Geometrie der Diskette zu erkennen. Das Disklabel gilt für die ganze Diskette und enthält alle Informationen über die Geometrie der Diskette. Eine Liste der möglichen Geometrien finden Sie in /etc/disktab. Erstellen Sie nun das Label mit disklabel: &prompt.root; /sbin/disklabel -B -r -w /dev/rfd0 fdsize Wenn Sie eine andere Kapazität nutzen wollen, ersetzen Sie fdsize mit dem passenden Wert (beispielsweise fd1440 oder fd1720). Damit bestimmen Sie, welchen Eintrag disklabel aus /etc/disktab benutzt. Das Dateisystem Auf der Diskette muß nun ein Dateisystem erstellt werden (high-level Formatierung), damit FreeBSD von der Diskette lesen und auf sie schreiben kann. Das Disklabel wird durch das Anlegen eines Dateisystems zerstört. Falls Sie die Diskette später erneut formatieren wollen, müssen Sie dann auch ein neues Disklabel anlegen. Für das zu erstellende Dateisystem haben Sie die Wahl zwischen UFS und FAT. Da UFS für Disketten weniger geeignet ist, nehmen Sie bitte FAT. Das folgende Kommando legt ein Dateisystem auf der Diskette an: &prompt.root; /sbin/newfs_msdos /dev/fd0 Durch das Disklabel erkennt newfs den Diskettentyp und ist in der Lage, ein neues Dateisystem anzulegen. Die Diskette kann nun benutzt werden. Verwenden der Diskette Sie können die Diskette mit mount_msdos in Ihren Dateibaum einhängen oder mit den Mtools aus der Ports-Sammlung darauf zugreifen. Wenn Sie die Mtools benutzen und die Diskette mit einer erhöhten Kapazität formatiert haben, sollte mdir diese Kapazität anzeigen. Disketten mit erhöhter Kapazität lassen sich praktisch mit allen anderen Betriebssystemen ohne zusätzliche Utilities verwenden. Microsoft-Systeme können mit ihnen ohne Probleme umgehen. Es kann allerdings sein, daß ältere Laufwerke nicht mit diesen Disketten zurechtkommen. Was ist mit Backups auf Disketten? Kann ich Disketten zum Backup meiner Daten verwenden? Backup Disketten Disketten Disketten sind kein wirklich geeignetes Medium für Backups aus folgenden Gründen: Disketten sind unzuverlässig, besonders langfristig. Speichern und Wiederherstellen ist sehr langsam. Sie haben eine sehr eingeschränkte Kapazität (Die Zeiten sind längst vorbei, wo eine ganze Festplatte auf ein Dutzend Floppies oder so gespeichert werden konnte). Wenn jedoch keine andere Möglichkeit zum Datenbackup vorhanden ist, dann sind Disketten immer noch besser als gar kein Backup. Wenn man gezwungen ist Disketten zu verwenden, dann sollte man auf eine gute Qualität achten. Floppies, die schon einige Jahre im Büro herumgelegen haben, sind eine schlechte Wahl. Ideal sind neue Disketten von einem renommierten Hersteller. Wie mache ich ein Backup auf Disketten? Die beste Art eines Diskettenbackups ist der Befehl tar mit der Mehrfachband-Option , die es ermöglicht ein Backup über mehrere Floppies zu verteilen. Ein Backup aller Dateien im aktuellen Verzeichnis einschließlich aller Unterverzeichnisse wird durch den folgenden Befehl veranlasst (als root): &prompt.root; tar Mcvf /dev/rfd0 * Wenn die erste Floppy voll ist, meldet sich tar und verlangt einen Diskettenwechsel (weil tar unabhängig vom Medium arbeitet, wird der nächste Band (Volume) verlangt, was in diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt: Prepare volume #2 for /dev/rfd0 and hit return: Dies wird mit steigender Volumenzahl wiederholt, bis alle angebenen Dateien archiviert sind. Können Diskettenbackups komprimiert werden? tar gzip Kompression Leider erlaubt es tar nicht, die Option für Multi-Volume-Archive zu verwenden. Man kann natürlich alle Dateien mit gzip komprimieren, sie mit tar auf die Floppies aufspielen, und dann die Dateien wieder gunzip entkomprimieren! Wie werden Diskettenbackups wieder her gestellt? Zur Wiederherstellung des gesamten Archivs verwendet man: &prompt.root; tar Mxvf /dev/fd0 Eine Methode um nur bestimmte Dateien wieder her zu stellen ist mit der ersten Diskette den folgenden Befehl auszuführen: &prompt.root; tar Mxvf /dev/fd0 filename tar wird dann die folgenden Disketten anfordern, bis die benötigte Datei gefunden ist. Wenn man die Diskette kennt auf der sich die Datei befindet, kann man alternativ diese Diskette auch direkt einlegen und den gleichen Befehl wie oben verwenden. Man beachte, dass, falls die erste Datei eine Fortsetzung einer Datei von einer der vorigen Disketten ist, tar die Warnung ausgibt, dass diese Datei nicht wiederhergestellt werden kann, selbst dann, wenn dies gar nicht verlangt wurde!
diff --git a/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml b/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml index bf816ae7a4..28d90a6afa 100644 --- a/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml @@ -1,1044 +1,1044 @@ Installieren von Anwendungen: Die Ports-Sammlung Neu geschrieben von &a.jim;, 22 November 1999. Ursprüngliche Version von verschiedenen Leuten. Übersetzt von &a.de.pierau, Juli 2000 Übersicht Die FreeBSD Ports-Sammlung erlaubt Ihnen das Übersetzen und Installieren einer Vielzahl von Anwendungen mit minimalem Aufwand. Ein Port ist gewöhnlich eine Gruppe von Gerüsten, die die minimalen Anpassungen enthalten, welche nötig sind, damit sich eine Anwendung unter FreeBSD übersetzen und installieren läßt. Trotz des ganzen Geredes von offenen Standards kann es eine verzwickte Angelegenheit werden, eine Anwendung unter verschiedenen UNIX Versionen zu übersetzen. Sie können zufrieden sein, wenn sich die Anwendung sauber übersetzen läßt, in die richtigen Verzeichnisse installiert und out-of-the-box fehlerfrei läuft. Dies wird aber sehr selten vorkommen. Die meiste Zeit werden Sie Modifizierungen vornehmen müssen, damit die Anwendung funktioniert. An diesem Punkt kommt die Ports-Sammlung zum Zuge. Die Grundidee hinter der Ports-Sammlung ist, all die verwirrenden Schritte zu eliminieren, welche nötig sind, damit alles richtig funktioniert, so daß die Installation einfach und schmerzlos ist. Mit der Ports-Sammlung ist die ganze harte Arbeit bereits für Sie getan und Sie brauchen zum Installieren eines Ports aus der Ports-Sammlung lediglich make install eingeben. Benutzen der Ports-Sammlung Die folgenden Abschnitte stellen die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung auf Ihren Rechner zu installieren oder zu löschen. Ports installieren Was ist mit einem Gerüst im Zusammenhang mit der Ports-Sammlung gemeint? In aller Kürze: ein Gerüst eines Ports ist ein minimaler Satz von Dateien, die für eine Anwendung benötigt werden, damit es sich unter FreeBSD sauber übersetzen und installieren läßt. Ein jeder Port beinhaltet: Eine Datei Makefile. Das Makefile enthält verschiedene Anweisungen, die spezifizieren, wie die Anwendung kompiliert werden und wo sie auf Ihrem System installiert werden sollte. Eine Datei distinfo. Diese enthält Informationen, welche Dateien herunter geladen werden müssen, sowie Prüfsummen, um sicher zu gehen, daß diese Dateien während des Herunterladens nicht beschädigt wurden. Ein files Verzeichnis. Hierin liegen Patches, welche das Übersetzen und Installieren der Anwendung ermöglichen. Patches sind im Wesentlichen kleine Dateien, die Änderungen an speziellen Dateien spezifizieren. Sie liegen als reiner Text vor und sagen ungefähr: Lösche Zeile 10 oder Ändere Zeile 26 zu .... Patches sind auch bekannt unter dem Namen diffs, weil Sie mit dem Programm diff erstellt werden. Dieses Verzeichnis kann auch noch andere Dateien enthalten, welche zum Bauen des Portes benutzt werden. Eine Datei pkg-comment. Eine einzeilige Beschreibung der Anwendung. Eine Datei pkg-descr. Eine ausführlichere, oft mehrzeilige Beschreibung der Anwendung. Eine Datei pkg-plist. Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die bei der Deinstallation des Ports benötigt werden. Nun haben Sie genug Hintergrund Informationen über die Ports-Sammlung und Sie können Ihren ersten Port installieren. Es gibt dazu zwei Möglichkeiten, beide werden im Folgenden erläutert. Bevor Sie damit beginnen, müssen Sie sich natürlich einen Port zum Installieren aussuchen. Sie können dazu mehrere Wege gehen, als einfachste Methode gibt es die Liste aller Ports auf dem FreeBSD Web-Server. Sie können dort Suchen oder in der Liste schmökern. Jeder Port enthält außerdem eine Beschreibung, so daß Sie sich vor der Entscheidung, welchen Port Sie installieren wollen, über den Port informieren können. Eine andere Methode bietet das Kommando whereis. Um whereis zu benutzen, geben Sie einfach whereis <Programm, daß Sie installieren möchten> ein. Wenn es auf Ihrem System gefunden wird, wird das wie im folgenden Beispiel anzeigt: &prompt.root; whereis xchat xchat: /usr/ports/irc/xchat &prompt.root; Dies sagt uns, daß xchat (ein IRC-Client) im Verzeichnis /usr/ports/irc/xchat gefunden werden kann. Ein noch anderer Weg, einen bestimmten Port zu finden ist, die eingebaute Suchfunktion der Ports-Sammlung zu benutzen. Dazu müssen Sie im Verzeichnis /usr/ports sein. Darin geben Sie make search key=Anwendungsname ein, worin Anwendungsname der Name der von Ihnen gesuchten Anwendung ist. Wenn Sie zum Beispiel nach xchat suchten: &prompt.root; cd /usr/ports &prompt.root; make search key=xchat Port: xchat-1.3.8 Path: /usr/ports/irc/xchat Info: An X11 IRC client using the GTK+ toolkit, and optionally, GNOME Maint: jim@FreeBSD.org Index: irc B-deps: XFree86-3.3.5 bzip2-0.9.5d gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gmake-3.77 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 R-deps: XFree86-3.3.5 gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 Der Teil der Ausgabe der Sie interessiert ist die Zeile, die mit Path: beginnt, weil sie Ihnen sagt, wo der Port zu finden ist. Die anderen Informationen werden zum Installieren des Ports nicht direkt benötigt, Sie brauchen sich darum jetzt nicht weiter zu kümmern. Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein. Jetzt, wo Sie den gewünschten Port gefunden haben, kann es mit der eigentlichen Installation losgehen. Installation von einer CDROM Wie Sie schon vermuten, geht dieser Abschnitt davon aus, daß Sie eine FreeBSD-CDROM Zusammenstellung haben. Wenn nicht, können Sie eine bei FreeBSD Mall bestellen. Angenommen Ihre FreeBSD-CDROM ist im Laufwerk und nach /cdrom eingebunden (und der Mount Punkt muß das Verzeichnis /cdrom sein), kann es mit dem Installieren von Port losgehen. Zu Beginn gehen Sie in das Verzeichnis des Portes, welchen Sie installieren möchten: &prompt.root; cd /usr/ports/irc/xchat Im Verzeichnis xchat kann man das Gerüst erkennen. Der nächste Schritt ist das Übersetzen (auch Bauen genannt) des Portes. Dies wird durch Eingabe von make getan. Haben Sie das eingegeben, so werden Sie etwas lesen wie: &prompt.root; make >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from file:/cdrom/ports/distfiles/. ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure-Ausgabe weggelassen] ... ===> Building for xchat-1.3.8 ... [Ausgabe der Übersetzung weggelassen] ... &prompt.root; Ist die Übersetzungsprozedur beendet, sind Sie wieder in der Kommandozeile und der nächste Schritt ist das Installieren. Dazu hängen Sie einfach ein Wort an das make-Kommando, und dieses Wort ist install: &prompt.root; make install ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [Ausgabe der Installation weggelassen] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; Wenn Sie wieder den Prompt haben, sollte Sie in der Lage sein, die gerade installierte Anwendung laufen zu lassen. Sie können einen Schritt sparen, wenn Sie gleich make install anstatt von make und dem anschließenden make install eingeben. Beachten Sie bitte, daß die Lizenzen einiger Ports die Einbeziehung auf der CDROM verbieten. Das könnte aufgrund verschiedenster Gründe der Fall sein, beispielsweise weil man sich vor dem Herunterladen registrieren lassen muß oder eine Weiterverteilung verboten ist u.s.w. Wünschen Sie einen Port zu installieren, der nicht auf der CDROM enthalten ist, so müssen Sie online gehen und mit Hilfe des nächsten Abschnitts den Port installieren. Port vom Internet installieren Dieser Abschnitt setzt voraus, daß Sie eine Verbindung mit dem Internet haben. Haben Sie dies nicht, müssen Sie eine CDROM Installation durchführen. Das Installieren eines Ports vom Internet wird genau so durchgeführt wie das Installieren von CDROM. Der einzige Unterschied zwischen beiden ist, daß der Quellcode der Anwendung vom Internet heruntergeladen und nicht von der CDROM genommen wird. Die durchgeführten Schritte sind identisch: &prompt.root; make install >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from http://xchat.org/files/v1.3/. Receiving xchat-1.3.8.tar.bz2 (305543 bytes): 100% 305543 bytes transferred in 2.9 seconds (102.81 Kbytes/s) ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure-Ausgabe weggelassen] ... ===> Building for xchat-1.3.8 ... [Ausgabe der Übersetzung weggelassen] ... ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [Ausgabe der Installation weggelassen] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; Wie Sie sehen können, besteht der einzige Unterschied in der Zeile, die Ihnen sagt, woher das System den Quellcode herholt. Obiges erklärte Ihnen, wie Sie Ports auf Ihrem Computer installieren können. Hiernach lernen Sie, wie Sie einen Port wieder von Ihrem System löschen. Entfernen installierter Ports Da Sie nun wissen, wie man einen Port installiert, wollen Sie sicher auch wissen, wie man einen Port deinstalliert, für den Fall, daß Sie versehentlich einen Falschen installiert haben. Die nächsten Abschnitte decken genau dieses Thema ab. Nun wollen wir mal unser vorheriges Beispiel wieder löschen (für alle die nicht aufgepaßt haben, das war xchat). Wie beim Installieren geht man zuerst in das Verzeichnis des Portes, wie Sie sich erinnern werden war das /usr/ports/irc/xchat. Danach ist man in der Lage den Port zu deinstallieren. Dies wird mit dem Kommando make deinstall getan (erscheint sinnvoll, oder?): &prompt.root; cd /usr/ports/irc/xchat &prompt.root; make deinstall ===> Deinstalling for xchat-1.3.8 &prompt.root; Das war leicht. Sie haben jetzt die Fähigkeit, xchat von Ihrem System zu entfernen. Möchten Sie den Port doch wieder neu installieren, geben Sie make reinstall im Verzeichnis /usr/ports/irc/xchat ein. Fehlersuche und -behebung Die folgenden Zeilen beschreiben einige einfache Fehlerbehebungsmöglichkeiten beim Benutzen der Ports-Sammlung und ein paar Fehlerbehandlungen, falls ein Port kaputt ist. Einige Fragen und Antworten Ich dachte hierbei ging es um Modems??! Ah, Sie müssen an die serielle Schnittstelle auf der Rückseite Ihres Computers gedacht haben (engl. port). Wir benutzen hier Port als Ergebnis des Portierens einer Anwendung von einer UNIX-Variante zu einer anderen. Ich dachte man soll Packete (packages) benutzen, um zusätzliche Anwendungen zu installieren? Ja, das ist gewöhnlich der schnellste und einfachste Weg. Warum dann mit den Ports herumplagen? Aus verschiedenen Gründen: Die Lizenz-Bestimmungen einiger Software verbietet Verteilung in binärer Form. Diese muß als Quellcode verteilt werden. Einige Leute vertrauen bereits kompilierter Software nicht. Mit dem Quellcode haben sie zumindest (in der Theorie) die Möglichkeit, sich den Code anzusehen und nach potentiellen Problemen für sich zu suchen. Haben Sie eigene Anpassungen, so benötigen Sie den Quellcode, um diese vornehmen zu können. Sie könnten andere Ansichten darüber haben, wie eine Anwendung übersetzt werden soll, als die Person welche das Package erstellt hat — einige Leute haben strenge Ansichten drüber, welche Optimierung benutzt, ob eine Debug-Version erstellt oder ob anschließend strip benutzt werden soll und so weiter. Packages werden normalerweise mit recht konservativen Einstellungen erstellt. Wenn ein Port spezielle Optionen für einen speziellen Prozessor oder eine besondere Karte in Ihrem Rechner hat, können Sie diese immer benutzen und die Ersteller der Packages müssen nicht sehr viele verschiedene davon bereitstellen. Die verbreiteste Ausnahme von dieser Regel ist das Papierformat. Unterstützt ein Port von Haus aus verschieden Formate, stellen wir auch verschiedene packages bereit, eins pro Papierformat. Manche Menschen haben gerne Quellcode rumliegen, um darin zu lesen, wenn ihnen langweilig ist, drin rumzuhacken, sich etwas auszuleihen (natürlich, wenn es die Lizenz erlaubt) und so weiter. Hast Du keinen Quellcode, ist es keine Software! ;-) Was ist ein Patch? Ein Patch ist eine kleine Datei, die beschreibt, wie man von einer Version einer Datei zu einer anderen kommt. Sie enthält reinen Text und sagt im Prinzip Dinge wie lösche Zeile 23, füge diese zwei Zeilen hinter Zeile 468an , oder ändere Zeile 197 hierzu. Sie sind auch bekannt als diffs, weil sie mit der Anwendung diff erstellt werden. Worum gehts eigentlich bei diesen Tarballs? Das ist eine Datei mit der Endung .tar oder als Varianten mit .tar.gz, .tar.Z, .tar.bz2, oder auch .tgz. Vereinfacht ist das ein Verzeichnisbaum, welcher in eine einzelne Datei (.tar) archiviert und optional gepackt (.gz) wurde. Diese Technik wurde ursprünglich für Tape ARchives benutzt (daher der Name tar), aber stellt heute einen weit verbreiteten Weg da, im Internet Quellcode zu verbreiten und zu verteilen. Sie können selber hineinsehen, was für Dateien darin sind oder diese auspacken, indem Sie das UNIX-Programm tar benutzen. Dies ist auch bei FreeBSD dabei. Das sähe in etwa so aus: &prompt.user; tar tvzf foobar.tar.gz &prompt.user; tar xzvf foobar.tar.gz &prompt.user; tar tvf foobar.tar &prompt.user; tar xvf foobar.tar Eine Prüfsumme? Das ist eine Zahl, die dadurch generiert wird, indem man die ganzen Daten einer Datei aufaddiert. Ändert sich ein Zeichen in dieser Datei, ist die Prüfsumme nicht mehr die gleiche und ein einfacher Vergleich ermöglicht das Erkennen des Unterschiedes. Ich tat, was ihr zum Übersetzen von Ports von der CDROM geschrieben habt und es funktionierte auch prima, bis ich zum Port kermit kam. &prompt.root; make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/. Warum kann die Datei nicht gefunden werden? Habe ich eine kaputte CDROM? Wie im Abschnitt Installation von CDROM erläutert, dürfen einige Ports wegen Lizenz-Beschränkungen nicht auf CDROM veröffentlicht werden. Kermit ist ein solches Beispiel. Die Lizenz-Bestimmungen verbieten uns das Brennen des Tarballs auf CDROM, leider müssen Sie es sich von Hand aus dem Netz herunterladen — sorry! Der Grund für die ganzen Fehlermeldungen liegt darin, daß Sie zu diesem Zeitpunkt nicht mit dem Internet verbunden waren. Haben Sie den Tarball von einer der MASTER_SITES (aufgeführt im Makefile) gezogen, können Sie die Installation erneut starten. Das habe ich getan, aber als ich ihn ins Verzeichnis /usr/ports/distfiles legen wollte, erhielt ich eine Fehlermeldung bezüglich der Zugriffsrechte. Der Ports Mechanimus sucht den Tarball in /usr/ports/distfiles, aber Sie konnten ihn dort nicht hinkopieren, da dieses Verzeichnis auf die CDROM zeigt, die man nur gelesen kann. Sie können eine andere Stelle angeben, indem Sie eingeben: &prompt.root; make DISTDIR=/wohin/Sie/es/legten install Funktioniert das Konzept der Ports nur, wenn alles in /usr/ports abläuft? Mein Systemadministrator sagt, daß ich alles unter /u/people/guests/wurzburger haben muß, aber das scheint nicht zu klappen. Sie können die Variablen PORTSDIR und PREFIX benutzen, um dem Ports-System zu sagen, daß es andere Verzeichnisse nutzen soll. Zum Beispiel würde, &prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports install den Port in /u/people/guests/wurzburger/ports kompilieren und alles unter /usr/local installieren. &prompt.root; make PREFIX=/u/people/guests/wurzburger/local install kompiliert in /usr/ports und installiert ihn in /u/people/guests/wurzburger/local. Und natürlich &prompt.root; make PORTSDIR=../ports PREFIX=../local install kombiniert die beiden Sachen. (Es ist aber ein wenig lang, um es hier komplett aufzuschreiben. Sie sollten aber die zugrunde liegende Idee erkennen.) Einige Ports, welche &man.imake.1; (Teil des X Window Systems) benutzen, funktionieren nicht gut mit PREFIX und bestehen dadrauf, unter /usr/X11R6 installiert zu werden. In ähnlicher Weise verhalten sich einige Perl Ports, die PREFIX ignorieren und sich in den Perl Verzeichnisbaum installieren. Zu erreichen, daß solche Ports PREFIX beachten, ist schwierig oder sogar unmöglich. Wenn Sie keine Lust haben, dies jedesmal einzutippen, sollten Sie diese Variablen als Umgebungsvariablen setzen. Lesen Sie die Man-Page Ihrer Shell, um zu erfahren, wie man das anstellt. Ich habe keine FreeBSD CDROM, würde aber gerne die Tarballs auf meinem Rechner liegen haben, damit ich nicht jedesmal auf das Herunterladen warten muß, wenn ich mal einen Port installieren will. Gibt es einen Weg, alle auf einmal zu holen? Um jeden einzelnen Tarball für die Ports-Sammlung zu holen geben Sie ein: &prompt.root; cd /usr/ports &prompt.root; make fetch Für alle Tarballs eines Ports-Verzeichnis: &prompt.root; cd /usr/ports/Verzeichnis &prompt.root; make fetch und für nur einen Port — gut, das haben Sie sicher schon erraten. Ich weiß, das es wohl schneller geht, wenn ich die Tarballs von einem FreeBSD Mirror in der Nähe hole. Kann ich sagen, daß andere als in MASTER_SITES angegebene Server genommen werden soll? Ja. Zum Beispiel, wenn ftp.FreeBSD.org bei Ihnen näher dran ist, als der in MASTER_SITES angegebene, machen Sie das wie folgt: &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch Ich würde gern vorher wissen, welche Dateien make holen wird, bevor es das versucht. make fetch-list gibt aus, welche Dateien für den Port benötigt werden. Gibt es einen Weg einen Port am Kompilieren zu hindern? Ich möchter gern vor der Installation etwas im Quellcode hacken. Es ist aber etwas nervig, immer aufzupassen und im richtigen Moment mit Control-C abzubrechen. Die Eingabe von make extract erreicht, daß der Port Quellcode nur geholt und entpackt wird. Ich versuche einen eigenen Port zu erstellen und will, daß der Port vor dem Übersetzen anhält, damit ich eine Chance habe zu sehen, ob meine Patches sauber funktionieren. Gibt es etwas wie make extract für Patches? Klar, make patch ist alles was Sie wünschen. Sie werden wahrscheinlich die Variable PATCH_DEBUG auch recht nützlich finden. Ach ja, und vielen Dank für Ihre Bemühungen! Stimmt es, daß einige Compiler Fehler machen? Wie kann ich sicher gehen, daß ich mit den richtigen Einstellungen übersetze? Ja, in der Version 2.6.3 des gcc (diese Version ist bei FreeBSD 2.1.0 und 2.1.5 dabei) kann die Option fehlerhafte Ergebnisse liefern, sofern man nicht auch die Option benutzt. (Die meisten Ports benutzen nicht). Sie sollten die Compiler Optionen etwa wie folgt spezifieren können: &prompt.root; make CFLAGS='-O2 -fno-strength-reduce' install oder durch Editieren von /etc/make.conf, allerdings beachten das nicht alle Ports. Der sicherste Weg ist, nach einem make configure ins Verzeichnis mit dem Quellcode zu gehen und dort die Makefiles von Hand zu untersuchen. Das kann aber sehr mühselig werden, da es oft sehr viele Unterverzeichnisse mit eigenen Makefiles geben kann. Die bei FreeBSD voreingestellten Compiler Optionen sind recht konservativ, so sollten Sie eigentlich keine Probleme bekommen, wenn Sie diese nicht verändert haben. Das sind aber ganz schön viele Ports und es ist nicht leicht den einen zu finden, den ich gerade möchte. Gibt es eine Liste der erhältlichen Ports? Schauen Sie in die Datei INDEX im Verzeichnis /usr/ports. Sie können auch die Ports-Sammlung nach einem Stichwort durchsuchen. Wollen Sie zum Beispiel alle Ports finden, die mit der Programmiersprache LISP zu tun haben, geben Sie ein: &prompt.user; cd /usr/ports &prompt.user; make search key=lisp Als ich den Port bla installieren wollte, hört das System auf einmal mit dem Kompilieren auf und fing an, den Port sülz zu erstellen. Was ist hier los? Der Port bla braucht etwas, was mit dem Port sülz mitkommt — beispielsweise, wenn bla Grafik benutzt wird und der Port sülz könnte dann eine Bibliothek mit nützlichen grafischen Routinen enthalten. Oder sülz könnte ein Werkzeug sein, das zum Übersetzen des Ports bla notwendig ist. Ich habe aus der Ports-Sammlung die Anwendung grizzle installiert und nun festgestellt, daß es reine Verschwendung von Plattenplatz ist. Ich will ihn wieder löschen, weiß aber nicht wohin der Port seine Dateien installiert hat. Tips? Alles kein Problem, machen Sie nur: &prompt.root; pkg_delete grizzle-6.5 Sie können alternativ auch eingeben: &prompt.root; cd /usr/ports/somewhere/grizzle &prompt.root; make deinstall Moment, man muß die Versionsnummer wissen, um das Kommando benutzen zu können. Es wird nicht wirklich erwartet, daß ich mich daran noch erinnere, oder?? Nein, Sie finden diese Nummer durch folgende Eingabe heraus: &prompt.root; pkg_info -a | grep grizzle Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game. Apropos Plattenplatz, die Ports-Sammlung scheint recht viel Platz einzunehmen. Ist es gefährlich dahin zu gehen und Sachen zu löschen? Nun, wenn Sie Anwendungen installiert haben und sicher sind, daß Sie den Quellcode nicht benötigen, gibt es keinen Grund diesen herumliegen zu haben. Der beste Weg zum Aufräumen ist: &prompt.root; cd /usr/ports &prompt.root; make clean Das geht durch alle Ports-Verzeichnisse und löscht für jeden Port alles bis auf das Gerüst. Das habe ich probiert, aber da liegen immer noch diese Tarballs (oder wie die genannt werden) im Verzeichnis distfiles herum. Darf ich die auch löschen? Ja, wenn Sie mit denen fertig sind, können die auch verschwinden. Man kann sie von Hand löschen oder das Kommando make distclean benutzen. Ich finde es toll, tierisch viele Anwendungen zu haben und damit rumzuspielen. Gibt es einen Weg alle Ports auf einmal zu installieren? Machen Sie einfach: &prompt.root; cd /usr/ports &prompt.root; make install Vorsicht: Einige Ports könnten Dateien mit dem gleichen Namen installieren. Wenn man zwei grafische Ports installiert und beide eine Datei /usr/local/bin/plot anlegen, haben Sie ein Problem. Okay, das habe ich gemacht und da ich dachte, daß das sicherlich ziemlich lange dauert, ging ich zu Bett. Als ich heute morgen zum Computer kam, waren erst dreieinhalb Ports installiert. Hat da etwas nicht geklappt? Nein, das Problem ist, daß es Ports gibt, die Ihnen Fragen stellen, auf die wir die Antworten nicht für Sie geben konnten (z.B. Drucken Sie auf Papier im A4 oder US Letter Format?). In solchen Fällen muß jemand da sein und die Fragen beantworten. Ich möchte aber nicht wirklich einen ganzen Tag damit verbringen, auf den Monitor zu starren. Irgendeine bessere Idee? Klar, bevor Sie ins Bett/zur Arbeit/in den Park gehen, geben Sie ein: - &prompt.root cd /usr/ports + &prompt.root; cd /usr/ports &prompt.root; make -DBATCH install Das installiert Ihnen alle Ports, die keine Eingaben des Benutzers erfordern. Wenn Sie dann zurück sind, geben Sie ein: &prompt.root; cd /usr/ports &prompt.root; make -DIS_INTERACTIVE install um die Aufgabe zu beenden. Auf der Arbeit benutzen wir die Anwendung frobble, das in der Ports-Sammlung ist. Wir haben das aber etwas auf unsere Bedürfnisse angepaßt. Können wir irgendwie eigene packages erstellen, so daß wir die Anwendung auf unseren Rechnern leichter verteilen können? Kein Problem. Angenommen Sie wissen, wie Sie für Ihre Anpassungen Patches erzeugen: &prompt.root; cd /usr/ports/somewhere/frobble &prompt.root; make extract &prompt.root; cd work/frobble-2.8 [Ihre patche einspielen] &prompt.root; cd ../.. &prompt.root; make package Diese Geschichte mit den Ports ist wirklich clever. Ich habe keine Ahnung, wie ihr das hinbekommen habt. Was ist das Geheimnis dahinter? Keine Geheimnisse. Sehen Sie einfach in die Dateien bsd.port.mk und bsd.port.subdir.mk in dem makefiles Verzeichnis auf Ihrem Rechner an. (Lesern mit einer Aversion gegen komplizierte Shell-scripts wird geraten, diesen Link nicht zu verfolgen...) Hilfe! Dieser Port ist kaputt! Stolpern Sie mal über einen Port, der bei Ihnen nicht funktioniert, könnten Sie zum Beispiel folgendes tun: Reparieren Sie ihn! Der Abschnitt Wie erstelle ich einen Port sollte Ihnen dabei helfen. Rummeckern — nur mittels E-Mail! Senden Sie zuerst eine E-Mail an den Betreuer des Ports. Geben Sie dazu make maintainer ein oder lesen Sie das Makefile im Verzeichnis des Ports, um an die E-Mail-Adresse zu kommen. Vergessen Sie nicht den Namen und die Version des Ports (schicken Sie die Zeile mit $FreeBSD: aus dem Makefile) und die Ausgabe bis zur Fehlermeldung mitzuschicken. Erhalten Sie vom Betreuer keine Resonanz, können Sie auch das send-pr Kommando benutzen, um einen Fehler-Report einzusenden. Vergessen Sie es. Das ist der einfachste Weg — nur sehr wenige Ports kann man als unverzichtbar klassifizieren. Außerdem gibt eine große Wahrscheinlichkeit, daß der Fehler in der nächsten Version behoben ist, wenn der Port aktualisiert wurde. Holen Sie sich das Package von einem FTP-Server in Ihrer Nähe. Die Basis Sammlung aller packages liegt auf ftp.de.FreeBSD.org im Verzeichnis packages. Aber versuchen Sie zuerst einen Mirror in Ihrer Nähe! Die Methode mit den Packages geht um einiges schneller. Benutzen Sie das Programm &man.pkg.add.1;, um Packages auf Ihrem Rechner zu installieren. Weitergehende Themen Dieser Abschnitt wurde ausgelagert und zu einem eigenständigen Handbuch, dem Porters-Handbuch, Wenn Sie selber einen Port erstellen und einreichen wollen, lesen Sie bitte dieses Handbuch. diff --git a/de_DE.ISO8859-1/books/handbook/security/chapter.sgml b/de_DE.ISO8859-1/books/handbook/security/chapter.sgml index a115b9ee25..790fc20fb8 100644 --- a/de_DE.ISO8859-1/books/handbook/security/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/security/chapter.sgml @@ -1,3700 +1,3700 @@ Matthew Dillon Viel von diesem Kapitel stammt aus der security(7) Manual-Seite von Sicherheit Sicherheit Übersicht Dieses Kapitel bietet eine Einführung in die Konzepte der Systemsicherheit. Neben einigen Daumenregeln werden fortgeschrittene Themen wie S/Key, OpenSSL und Kerberos diskutiert. Die meisten der hier besprochenen Punkte treffen sowohl auf die Systemsicherheit sowie die Internetsicherheit zu. Das Internet hat aufgehört ein friedlicher Ort zu sein, an dem Sie nur nette Leute finden werden. Es ist unumgänglich, daß Sie Ihre Daten, Ihr geistiges Eigentum, Ihre Zeit und vieles mehr vor dem Zugriff von Hackern schützen. FreeBSD besitzt eine Reihe von Werkzeugen und Mechanismen, um die Integrität und die Sicherheit Ihrer Systeme und Netzwerke zu gewährleisten. Nach dem Sie dieses Kapitel durchgearbeitet haben, werden Sie: Grundlegende auf FreeBSD bezogene Sicherheitsaspekte kennen. Die verschiedenen Verschlüsselungsmechanismen von FreeBSD, wie DES oder MD5, kennen. Wissen, wie Sie S/Key ein Einmal-Paßwort Authentifizierungssystem aufsetzen. Wissen, wie Sie Kerberos, ein weiteres Authentifizierungssystem, aufsetzen. Firewalls mit IPFW erstellen können. Wissen, wie Sie IPSec konfigurieren. OpenSSH, FreeBSDs Implementation von ssh, konfigurieren und benutzen können. Bevor Die dieses Kapitel lesen, sollten Sie Grundlegende Konzepte von FreeBSD und dem Internet verstehen. Einführung Sicherheit ist ein Konzept, das beim Systemadministrator anfängt und aufhört. Obwohl alle BSD Unix Mehrbenutzersysteme über Sicherheitsfunktionen verfügen, ist es wohl eine der größten Aufgaben eines Systemadministrators zusätzliche Sicherheitsmechanismen zu erstellen und zu pflegen. Maschinen sind nur so sicher wie sie gemacht werden und Sicherheitsanforderungen stehen oft der Benutzerfreundlichkeit entgegen. Auf Unix Systemen können sehr viele Prozesse gleichzeitig laufen und viele dieser Prozesse sind Server, das heißt von außen kann auf sie zugegriffen werden. In einer Zeit, in der die Minicomputer und Mainframes von gestern die Desktops von heute sind und Rechner immer mehr vernetzt werden, kommt der Sicherheit eine große Bedeutung zu. Sicherheit wird am besten in mehreren Schichten implementiert. Kurz gesagt wollen Sie eine angemessene Zahl an Schichten einrichten, und dann das System auf Einbrüche hin beobachten. Die Sicherheitsmaßnahmen sollten nicht überzogen werden, da sie sonst das Entdecken von Einbrüchen stören und die Möglichkeit, Einbrüche zu entdecken, ist einer der wichtigsten Aspekte einer Sicherheitsmaßnahme. Es macht zum Beispiel wenig Sinn, jedes Programm mit der schg Option (siehe auch &man.chflags.1;) zu schützen, weil dies verhindert, daß ein Angreifer eine leicht zu entdeckende Veränderung vornimmt und vielleicht dazu führt, daß Ihre Sicherheitsvorkehrungen den Angreifer überhaupt nicht entdecken. Zur Systemsicherheit gehört auch die Beschäftigung mit verschiedenen Arten von Angriffen, auch solchen, die versuchen, ein System still zu legen, oder sonst unbrauchbar zu machen ohne root zu kompromittieren. Sicherheitsaspekte lassen sich in mehrere Kategorien unterteilen: Denial of Service Angriffe. Kompromittierte Benutzeraccounts. Kompromittierter root-account durch zugreifbare Server. Kompromittierter root-account durch kompromittierte Benutzeraccounts. Einrichten von Hintertüren. DoS Angriffe Denial of Service (DoS) Sicherheit DoS Angriffe Denial of Service (DoS) Denial of Service (DoS) Ein Denial of Service (Verhinderung von Diensten, DoS) Angriff entzieht einer Maschine Ressourcen, die sie zur Bereitstellung von Diensten benötigt. Meist versuchen Denial of Service Angriffe die Dienste oder den Netzwerkstack einer Maschine zu überlasten, um so die Maschine auszuschalten oder nicht nutzbar zu machen. Einige Angriffe versuchen, Fehler im Netzwerkstack auszunutzen, und die Maschine mit einem einzigen Paket auszuschalten. Diese Art des Angriffs kann nur verhindert werden, indem der entsprechende Fehler im Kernel behoben wird. Oft können Angriffe auf Dienste durch die Angabe von Optionen verhindert werden, die die Last, die ein Dienst auf das System unter widrigen Umständen ausüben kann, begrenzt. Angriffen auf das Netzwerk ist schwerer zu begegnen. Außer durch Trennen der Internetverbindung ist zum Beispiel einem Angriff mit gefälschten Paketen nicht zu begegnen. Diese Art von Angriff wird Ihr System zwar nicht unbrauchbar machen, kann aber die Internetverbindung sättigen. Sicherheit kompromittierte Accounts Kompromittierte Benutzeraccounts kommen noch häufiger als DoS Angriffe vor. Viele Systemadministratoren lassen auf ihren Maschinen noch die Dienste telnetd, rlogind, rshd und ftpd laufen. Verbindungen zu diesen Servern werden nicht verschlüsselt. Wenn Sie eine größere Benutzerzahl auf Ihrem System haben, die sich von einem entfernten System anmelden, ist die Folge davon, daß das Paßwort eines oder mehrerer Benutzer ausgespäht wurde. Ein aufmerksamer Systemadministrator wird die Logs über Anmeldungen von entfernten Systemen auf verdächtige Quelladressen, auch für erfolgreiche Anmeldungen, untersuchen. Es ist immer davon auszugehen, daß ein Angreifer, der Zugriff auf einen Benutzeraccount hat, Zugang zum root-Account erlangt. Allerdings gibt der Zugriff auf einen Benutzeraccount auf einem gut gesicherten und gepflegten System nicht notwendig Zugriff auf den root-Account. Diese Unterscheidung ist wichtig, da ein Angreifer, der keinen Zugang zu root besitzt, seine Spuren nicht verwischen kann. Er kann höchstens die Dateien des betreffenden Benutzers verändern oder die Maschine stillegen. Kompromittierte Benutzeraccounts sind sehr häufig, da Benutzer meist nicht dieselben Vorsichtsmaßnahmen wie Administratoren treffen. Sicherheit Hintertüren Es gibt viele Wege, Zugang zum root-Account eines Systems zu bekommen: Ein Angreifer kann das Paßwort von root kennen, er kann einen Fehler in einem Server entdecken, der unter root läuft und dann über eine Netzwerkverbindung zu diesem Server einbrechen. Oder er kennt einen Fehler in einem SUID-root Programm, der es ihm erlaubt, root zu werden, wenn er einmal einen Benutzeraccount kompromittiert hat. Wenn ein Angreifer einen Weg gefunden hat, root zu werden, braucht er vielleicht keine Hintertür auf dem System installieren. Viele der heute bekannten und geschlossenen Sicherheitslöcher, die zu einem root Zugriff führen, verlangen vom Angreifer einen erheblichen Aufwand, um seine Spuren zu verwischen. Aus diesem Grund wird er sich wahrscheinlich entschließen, eine Hintertür (engl. Backdoor) zu installieren. Eine Hintertür erlaubt es dem Angreifer leicht auf den root-Account zuzugreifen. Einem klugen Systemadministrator erlaubt sie allerdings auch, den Einbruch zu entdecken. Wenn Sie es einem Angreifer verwehren, Hintertüren zu installieren, kann das schädlich für Ihre Sicherheit sein, da es vielleicht verhindert, daß die Lücke, die der Angreifer für den Einbruch ausgenutzt hat, entdeckt wird. Sicherheitsmaßnahmen sollten immer in mehreren Schichten angelegt werden. Die Schichten können wie folgt eingeteilt werden: Absichern von root und Benutzeraccounts. Absichern von unter root laufenden Servern und SUID/SGID Programmen. Absichern von Benutzeraccounts. Absichern der Paßwort-Datei. Absichern des Kernels, der Geräte und von Dateisystemen. Schnelles Aufdecken von unbefugten Veränderungen des Systems. Paranoia. Die einzelnen Punkte der obigen Liste werden im nächsten Abschnitt genauer behandelt. Sicherheit Absichern Absichern von FreeBSD Kommandos und Protokolle In diesem Abschnitt wird fett verwendet, um Kommandos oder Applikationen zu kennzeichnen. Zum Beispiel wird ssh so gekennzeichnet, da es sowohl ein Protokoll wie auch ein Kommando ist. Die folgenden Abschnitte behandeln die im letzten Abschnitt erwähnten Methoden Ihr FreeBSD-System zu sichern. Absichern von <username>root</username> und Benutzeraccounts. su Zuallererst, kümmern Sie sich nicht um die Absicherung von Benutzeraccounts, wenn Sie root noch nicht abgesichert haben. Auf den meisten Systemen ist root ein Paßwort zugewiesen. Sie sollten immer davon ausgehen, daß dieses Paßwort kompromittiert ist. Das heißt nicht, daß Sie das Paßwort entfernen sollten, da es meist für den Konsolenzugriff notwendig ist. Vielmehr heißt es, daß Sie das Paßwort nicht außerhalb der Konsole, auch nicht zusammen mit &man.su.1;, verwenden sollten. Stellen Sie sicher, das Ihre PTYs in ttys als unsicher markiert sind und damit Anmeldungen von root mit telnet oder rlogin verboten sind. Wenn Sie andere Applikationen wie sshd zum Anmelden benutzen, vergewissern Sie sich, daß dort ebenfalls Anmeldungen als root verboten sind. Für ssh editieren Sie /etc/ssh/sshd_config und überprüfen, daß PermitRootLogin auf NO gesetzt ist. Beachten Sie jede Zugriffsmethode – Dienste wie FTP werden oft vergessen. Nur an der Systemkonsole sollte ein direktes Anmelden als root möglich sein. wheel Natürlich müssen Sie als Systemadministrator root-Zugriff erlangen können. Dieser sollte aber durch zusätzliche Paßwörter geschützt sein. Ein Weg, Zugang zu root zu ermöglichen, ist es, berechtigte Mitarbeiter in /etc/group in die Gruppe wheel aufzunehmen. Die Personen, die Mitglieder in der Gruppe wheel sind, können mit su zu root wechseln. Ihre Mitarbeiter sollten niemals die Gruppe wheel als primäre Gruppe in /etc/passwd besitzen. Mitarbeiter sollten der Gruppe staff angehören und über /etc/group in wheel aufgenommen werden. Es sollten auch nur die Mitarbeiter, die wirklich root Zugriff benötigen in wheel aufgenommen werden. Mit anderen Authentifizierungsmethoden müssen Sie niemanden in wheel aufnehmen. Wenn Sie z.B. Kerberos nutzen, wechseln Sie mit &man.ksu.1; zu root und der Zugriff wird mit der Datei .k5login geregelt. Dies ist vielleicht eine bessere Lösung, da es der wheel-Mechanismus einem Angreifer immer noch möglich macht, den root-Account zu knacken, nachdem er einen Mitarbeiter-Account geknackt hat. Obwohl der wheel-Mechanismus besser als gar nichts ist, ist er nicht unbedingt die sicherste Lösung. Indirekt können Sie die Accounts von Mitarbeitern und damit auch den Zugriff auf root schützen, indem Sie eine alternative Zugangsmethode verwenden und die Accounts der Mitarbeiter mit einem ungültigen verschlüsselten Paßwort versehen. Mit &man.vipw.8; können Sie jedes verschlüsselte Paßwort mit einem * Zeichen ersetzen. Das Kommando wird /etc/master.passwd und die Benutzer/Paßwort Datenbank aktualisieren und die Paßwort Authentifizierung abstellen. Ein Account wie der folgende foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh sollte wie folgt abgeändert werden: foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh Da ein verschlüsseltes Paßwort niemals ein * sein kann, verhindert dies die normale Anmeldung. Damit müssen sich die Mitarbeiter mit anderen Mechanismen wie &man.kerberos.1; oder &man.ssh.1; authentifizieren. Wenn Sie etwas wie Kerberos benutzen, müssen Sie die Maschinen, die die Kerberos-Server beheimaten und die Maschinen der Benutzer absichern. Wenn Sie öffentliche/private Schlüssel mit ssh benutzen, muß die Maschine von der die Anmeldung gestartet wird, gesichert werden. Als zusätzliche Sicherheitsschicht können Sie das Schlüsselpaar beim Erstellen mit &man.ssh-keygen.1; durch ein Paßwort schützen. Dadurch, daß Sie die Paßwörter Ihrer Mitarbeiter als ungültig markiert haben, stellen Sie sicher, daß sich die Mitarbeiter nur mit den sicheren Methoden, die Sie aufgesetzt haben, anmelden können. Dies zwingt alle Mitarbeiter, verschlüsselte Verbindungen für ihre Sitzungen zu verwenden, und schließt ein wichtiges Loch, daß gerne von Angreifern ausgenutzt wird: Das Abhören des Netzwerks von einer anderen weniger gesicherten Maschine. Die indirekten Sicherheitsmechanismen setzen voraus, daß Sie sich von einer restriktiven Maschine auf einer weniger restriktiven Maschine anmelden. Wenn zum Beispiel auf Ihrem Hauptrechner alle möglichen Arten von Servern laufen, so sollten auf Ihrer Workstation keine Server laufen. Um Ihre Workstation vernünftig abzusichern, sollten auf Ihr so wenig Server wie möglich bis hin zu keinem Server laufen. Sie sollten zudem über einen Bildschirmschoner verfügen, der mit einem Paßwort gesichert ist. Natürlich kann ein Angreifer, der physikalischen Zugang zu einer Maschine hat, jede Art von Sicherheitsmechanismen umgehen. Dieses Problem sollten Sie daher auch in Ihren Überlegungen berücksichtigen. Beachten Sie dabei aber, daß der Großteil der Einbrüche über das Netzwerk erfolgt und die Einbrecher keinen Zugang zu der Maschine besitzen. Kerberos Mit Kerberos können Sie das Paßwort eines Mitarbeiters an einer Stelle ändern und alle Maschinen, auf denen der Mitarbeiter einen Account hat, beachten die Änderung sofort. Wird der Account eines Mitarbeiter einmal kompromittiert, so sollte die Fähigkeit, das Paßwort mit einem Schlag auf allen Maschinen zu ändern, nicht unterschätzt werden. Mit einzelnen Paßwörtern wird es schwierig, das Paßwort auf N Maschinen zu ändern. Mit Kerberos können Sie auch Beschränkungen für Paßwörter festlegen: Nicht nur das Ticket kann nach einiger Zeit ungültig werden, Sie können auch festlegen, daß der Benutzer nach einer bestimmten Zeit, z.B. nach einem Monat, das Paßwort wechseln muß. Absichern von unter <username>root</username> laufenden Servern und SUID/SGID Programmen ntalk comsat finger Sandkästen sshd telnetd rshd rlogind Ein kluger Systemadministrator läßt nur die Dienste, die er wirklich braucht, laufen; nicht mehr und auch nicht weniger. Beachten Sie, daß Server von Dritten die fehleranfälligsten sind. Wenn Sie z.B. eine alte Version von imapd oder popper laufen lassen, ist das so, als würden Sie der ganzen Welt freien Zugang zu root geben. Lassen Sie keine Server laufen, die Sie vorher nicht genau überprüft haben. Viele Server müssen nicht unter root laufen, zum Beispiel können ntalk, comsat und finger in speziellen Sandkästen unter einem Benutzer laufen. Ein Sandkasten ist keine perfekte Lösung, wenn Sie nicht eine Menge Arbeit in die Konfiguration investieren, doch bewährt sich hier das Prinzip, die Sicherheit in Schichten aufzubauen. Wenn es einem Angreifer gelingt, in einen Server, der in einem Sandkasten läuft, einzubrechen, dann muß er immer noch aus dem Sandkasten selber ausbrechen. Je mehr Schichten der Angreifer zu durchbrechen hat, desto kleiner sind seine Aussichten auf Erfolg. In der Vergangenheit wurden praktisch in jedem Server, der unter root läuft, Lücken gefunden, die zu einem root Zugriff führten. Dies betrifft selbst die grundlegenden Systemdienste. Wenn Sie eine Maschine betreiben, auf der man sich nur mit sshd anmelden kann, dann stellen Sie die Dienste telnetd, rshd oder rlogind ab! In der Voreinstellung laufen unter FreeBSD ntalkd, comsat und finger nun in einem Sandkasten. Ein weiteres Programm, das in einem Sandkasten laufen sollte, ist &man.named.8;. In /etc/defaults/rc.conf sind die notwendigen Argumente, um named in einem Sandkasten laufen zu lassen, in kommentierter Form schon enthalten. Abhängig davon, ob Sie ein neues System installieren oder ein altes System aktualisieren, sind die hierfür benötigten Benutzer noch nicht installiert. Ein kluger Systemadministrator sollte immer nach Möglichkeiten suchen, Server in einem Sandkasten laufen zu lassen. sendmail Einige Server wie sendmail, popper, imapd und ftpd werden normalerweise nicht in Sandkästen betrieben. Zu einigen Servern gibt es Alternativen, aber diese wollen Sie vielleicht wegen der zusätzlich nötigen Arbeit nicht installieren (ein weiteres Beispiel für den Widerspruch zwischen Sicherheit und Benutzerfreundlichkeit). In diesem Fall müssen Sie die Server unter root laufen lassen und auf die eingebauten Mechanismen vertrauen, Einbrüche zu entdecken. Weitere potentielle Löcher, die zu einem root-Zugriff führen können, sind die auf dem System installierten SUID- und SGID-Programme. Die meisten dieser Programme wie rlogin stehen in /bin, /sbin, /usr/bin, oder /usr/sbin. Obwohl nichts 100% sicher ist, können Sie davon ausgehen, daß die SUID- und SGID-Programme des Basissystems ausreichend sicher sind. Allerdings werden ab und an in diesen Programmen Löcher gefunden. 1998 wurde in Xlib ein Loch gefunden, das xterm, der normal mit SUID installiert wird, verwundbar machte. Es ist besser auf der sicheren Seite zu sein, als sich später zu beklagen, darum wird der kluge Systemadministrator den Zugriff auf SUID-Programme mit einer Gruppe, auf die nur Mitarbeiter zugreifen können, beschränken. SUID-Programme, die niemand benutzt, sollten mit chmod 000 deaktiviert werden. Zum Beispiel braucht ein Server ohne Bildschirm kein xterm Programm. SGID-Programme sind vergleichbar gefährlich. Wenn ein Einbrecher Zugriff auf SGID-kmem Programm erhält, kann er vielleicht /dev/kmem und damit die verschlüsselte Paßwortdatei lesen. Dies kompromittiert unter Umständen jeden Account, der mit einem Paßwort geschützt ist. Alternativ kann ein Einbrecher, der in die Gruppe kmem eingebrochen ist, die Tastendrücke auf PTYs verfolgen. Dies schließt auch PTYs mit ein, auf denen sich ein Benutzer mit sicheren Methoden anmeldet. Ein Einbrecher, der Zugriff auf die tty Gruppe hat, kann auf fast jeden Terminal anderer Benutzer schreiben. Wenn der Benutzer einen Terminal-Emulator benutzt, der über eine Tastatur-Simulation verfügt, könnte der Angreifer Daten generieren, die den Terminal veranlassen, ein Kommando unter diesem Benutzer laufen zu lassen. Absichern von Benutzeraccounts Benutzeraccounts sind für gewöhnlich sehr schwierig abzusichern. Während Sie drakonische Beschränkungen für Ihre Mitarbeiter einrichten und deren Paßwörter als ungültig markieren können, werden Sie das vielleicht bei den normalen Benutzeraccounts nicht durchsetzen. Wenn Sie über ausreichend Macht verfügen, gelingt es Ihnen vielleicht doch, ansonsten müssen Sie diese Benutzeraccounts aufmerksam überwachen. Wegen der zusätzlichen Administrationsarbeit und der nötigen technischen Unterstützung ist die Verwendung von ssh und Kerberos mit normalen Benutzeraccounts erschwert, obwohl das natürlich sicherer als die Verwendung von verschlüsselten Paßwörtern ist. Absichern der Paßwort-Datei. Der einzig sichere Weg ist, soviele Accounts wie möglich als ungültig zu markieren und ssh oder Kerberos zu benutzen, um auf sie zuzugreifen. Obwohl die Datei /etc/spwd.db, die die verschlüsselten Paßwörter enthält, nur von root gelesen werden kann, mag ein Angreifer lesenden Zugriff auf diese Datei erlangen, ohne die Fähigkeit sie auch zu beschreiben. Ihre Überwachungsskripte sollten Änderungen an der Paßwort-Datei melden (siehe Überprüfen der Integrität von Dateien weiter unten). Absichern des Kernels, der Geräte und von Dateisystemen. Wenn ein Angreifer root-Zugriff erlangt, kann er so ziemlich alles mit Ihrem System anstellen, doch sollten Sie es ihm nicht zu leicht machen. Die meisten modernen Kernel haben zum Beispiel einen Gerätetreiber, der es erlaubt, Pakete abzuhören. Unter FreeBSD wird das Gerät bpf genannt. Für gewöhnlich wird ein Angreifer versuchen, dieses Gerät zu nutzen, um Pakete abzuhören. Sie sollten ihm diese Gelegenheit nicht geben und auf den meisten Systemen ist das Gerät bpf nicht nötig. sysctl Auch wenn Sie bpf nicht verwenden, müssen Sie sich immer noch um /dev/mem und /dev/kmem sorgen. Außerdem kann der Angreifer immer noch auf die rohen Geräte (raw devices) schreiben. Weiterhin gibt es ein Programm zum Nachladen von Modulen in den Kernel: &man.kldload.8;. Ein unternehmungslustiger Angreifer kann dies benutzen, um sein eigenes bpf oder ein anderes zum Abhören geeignetes Gerät in den laufenden Kernel einzubringen. Um diese Probleme zu vermeiden, müssen Sie den Kernel auf einer höheren Sicherheitsstufe, mindestens 1, laufen lassen. Die Sicherheitsstufe wird durch die Variable kern.securelevel, die mit sysctl gesetzt werden kann, angegeben. Nachdem Sie die Sicherheitsstufe auf 1 gesetzt haben, sind schreibende Zugriffe auf rohe Geräte verboten und die speziellen chflags Optionen, wie schg - werden erzwungen. Sie müssen sicherstellen, daß die + werden erzwungen. Sie müssen sicherstellen, daß die schg Option auf allen kritischen Programmen, Verzeichnissen und Skripten, die bis zum Setzen der Option laufen, aktiviert ist. Das mag übertrieben sein da eine Migration des Systems erschwert wird, wenn Sie auf einer höheren Sicherheitsstufe arbeiten. Sie können einen Kompromiß erreichen, indem Sie das System auf einer erhöhten Sicherheitsstufe laufen lassen, aber die schg Option nicht für jede Datei und jedes Verzeichnis auf der Welt setzen. Eine andere Möglichkeit besteht darin, / und /usr einfach schreibgeschützt einzuhängen. Bedenken Sie, daß Sie das Aufdecken eines Einbruchs vielleicht verhindern, wenn Sie zu drastische Maßnahmen zum Schutz Ihres Systems verwenden. Überprüfen der Integrität von Dateien Sie können die Systemkonfiguration und die Dateien nur so weit schützen, wie es die Benutzbarkeit des Systems nicht einschränkt. Wenn Sie zum Beispiel mit chflags die Option schg auf die meisten Dateien in / und /usr setzen, kann das Ihre Arbeit mehr behindern als nützen. Die Maßnahme schützt zwar die Dateien, schließt aber auch eine Möglichkeit, Veränderungen zu entdecken, aus. Die letzte Schicht des Sicherheitsmodells — das Aufdecken von Einbrüchen — ist sicherlich die wichtigste. Alle Sicherheitsmaßnahmen sind nichts wert, oder wiegen Sie in falscher Sicherheit, wenn Sie nicht in der Lage sind, einen möglichen Einbruch zu entdecken. Die Hälfte der Sicherheitsmaßnahmen hat die Aufgabe, einen Einbruch zu verlangsamen, um es zu ermöglichen, den Einbrecher auf frischer Tat zu ertappen. Der beste Weg, einen Einbruch zu entdecken, ist es, nach veränderten, fehlenden oder unerwarteten Dateien zu suchen. Der wiederum beste Weg, nach veränderten Dateien zu suchen, ist es, die Suche von einem anderen (oft zentralen) besonders geschützten System durchzuführen. Es ist wichtig, daß Ihre Sicherheitsüberprüfungen vor einem Angreifer verborgen bleiben und daher sind sie auf einem besonders geschützten System gut aufgehoben. Um dies optimal auszunutzen, müssen Sie dem besonders geschützten System Zugriffsrechte auf die zu schützenden Systeme geben. Sie können die Dateisysteme der zu schützenden Systeme schreibgeschützt für das besonders geschützte System exportieren, oder Sie können der besonders geschützten Maschine ssh auf die anderen Maschinen erlauben, indem Sie ssh Schlüsselpaare installieren. Mit Ausnahme des verursachten Netzwerkverkehrs ist die NFS-Methode die am wenigsten sichtbare. Sie erlaubt es Ihnen nahezu unentdeckt die Dateisysteme der Clients zu beobachten. Wenn Ihr besonders geschütztes System mit den Clients über einen Switch verbunden ist, ist die NFS-Methode oft das Mittel der Wahl. Wenn das besonders geschützte System allerdings mit einem Hub verbunden ist, oder der Zugriff über mehrere Router geschieht, ist die NFS-Methode aus der Netzwerksicht zu unsicher. In einem solchen Fall ist ssh besser geeignet, auch wenn es deutliche Spuren hinterläßt. Wenn das besonders geschützte System lesenden Zugriff auf die Clients hat, müssen Sie Skripte schreiben, die die Überwachung durchführen. Wenn Sie die NFS-Methode verwenden, können Sie dazu einfache Systemwerkzeuge wie &man.find.1; und &man.md5.1; benutzen. Am besten berechnen Sie einmal am Tag MD5-Prüfsummen der Dateien, Konfigurationsdateien in /etc und /usr/local/etc sollten öfter überprüft werden. Wenn Unstimmigkeiten zwischen den auf der besonders geschützten Maschine gehaltenen MD5-Prüfsummen und den ermittelten Prüfsummen festgestellt werden, sollte Ihr System einen Systemadministrator benachrichtigen, der den Unstimmigkeiten dann nachgehen sollte. Ein gutes Skript überprüft das System auch auf verdächtige SUID-Programme sowie gelöschte oder neue Dateien in / und /usr. Wenn Sie ssh anstelle von NFS benutzen, wird das Erstellen der Skripte schwieriger. Sie müssen die Skripte und die Programme wie find mit scp auf den Client kopieren. Damit machen Sie die Überprüfung für einen Angreifer sichtbar. Außerdem kann der ssh-Client auf dem Zielsystem schon kompromittiert sein. Zusammenfassend, kann der Einsatz von ssh nötig sein, wenn Sie über ungesicherte Verbindungen arbeiten, aber der Umgang mit dieser Methode ist auch sehr viel schwieriger. Ein gutes Sicherheitsskript wird auch Dateien von Benutzern, die den Zugriff auf ein System ermöglichen, wie .rhosts, .shosts, .ssh/authorized_keys usw., auf Veränderungen untersuchen, die über die Möglichkeiten einer Überprüfung mit MD5, die ja nur Veränderungen feststellen kann, hinausgehen. Wenn Sie über große Partitionen verfügen, kann es zu lange dauern, jede Datei zu überprüfen. In diesem Fall sollten Sie beim Einhängen des Dateisystems Optionen setzen, die das Ausführen von SUID-Programmen und den Zugriff auf Geräte verbieten. &man.mount.8; stellt dazu die Optionen und zur Verfügung. Sie sollten diese Dateien aber trotzdem mindestens einmal die Woche überprüfen, da das Ziel dieser Schicht das Aufdecken eines Einbruchs, auch wenn er nicht erfolgreich war, ist. Die Prozeßüberwachung (siehe &man.accton.8;) des Betriebssystems steht ein günstiges Werkzeug zur Verfügung, daß sich bei der Analyse eines Einbruchs als nützlich erweisen kann. Insbesondere können Sie damit herausfinden, wie der Einbrecher in das System eingedrungen ist, vorausgesetzt die Dateien der Prozeßüberwachung sind noch alle intakt. Schließlich sollten die Sicherheitsskripte die Logdateien analysieren. Dies sollte so sicher wie möglich durchgeführt werden, nützlich ist das Schreiben von Logdateien auf entfernte Systeme mit syslog. Ein Einbrecher wird versuchen, seine Spuren zu verwischen. Die Logdateien sind wichtig für den Systemadministrator, da er aus ihnen den Zeitpunkt und die Art des Einbruchs bestimmen kann. Eine Möglichkeit, die Logdateien unverändert aufzuheben, ist es, die Systemkonsole auf einen seriellen Port zu legen und die Informationen dort von einer gesicherten Maschine auszulesen. Paranoia Es schadet nicht, ein bißchen paranoid zu sein. Grundsätzlich darf ein Systemadministrator jede Sicherheitsmaßnahme treffen, die die Bedienbarkeit des Systems nicht einschränkt. Er kann auch Maßnahmen treffen, die die Bedienbarkeit einschränken, wenn er diese vorher genau durchdacht hat. Was noch wichtiger ist: Halten Sie sich nicht sklavisch an dieses Dokument, sondern führen Sie eigene Maßnahmen ein, um nicht einem künftigen Angreifer, der auch Zugriff auf dieses Dokument hat, alle Ihre Methoden zu verraten. Denial of Service Angriffe Denial of Service (DoS) Dieser Abschnitt behandelt Denial of Service Angriffe (DoS). Ein DoS-Angriff findet typischerweise auf der Paketebene statt. Während Sie nicht viel gegen moderne Angriffe mit falschen Paketen , die das Netzwerk sättigen, ausrichten können, können Sie allerdings den Schaden in der Hinsicht begrenzen, daß Ihre Server von einem solchen Angriff nicht gestoppt werden. Begrenzen von fork() Aufrufen. Begrenzen von Sprungbrett-Angriffen (ICMP response Angriffen, ping zu Broadcast-Adressen usw.). Kernel-Cache für Routen. Ein häufiger DoS-Angriff gegen forkende Server versucht den Server dazu zu bringen, möglichst viele Prozesse, viele Dateideskriptoren und viel Speicher zu verbrauchen, bis hin zu dem Punkt, an dem die Maschine ausfällt. &man.inetd.8; besitzt einige Optionen, um diese Art von Angriffen zu begrenzen. Beachten Sie bitte, daß es möglich ist, einen Ausfall einer Maschine zu verhindern, doch ist es generell nicht möglich, den Ausfall eines Dienstes bei dieser Art von Angriffen zu verhindern. Lesen Sie sich bitte die Manualseiten von inetd gut durch und achten Sie speziell auf die Optionen , und . Angriffe mit gefälschten IP-Adressen umgehen , so daß normalerweise eine Kombination der Optionen benutzt werden muß. Manche Server, die nicht von inetd gestartet werden, besitzen Optionen, um den Start über fork() einzuschränken. Sendmail besitzt die Option , die besser als die eingebauten Optionen zur Begrenzung der Systemauslastung funktioniert. Sie sollten beim Start von sendmail MaxDaemonChildren so hoch setzen, daß Sie die erwartete Auslastung gut abfangen können. Allerdings sollten Sie den Wert nicht so hoch setzen, daß der Rechner über seine eigenen Füße fällt. Es ist auch klug, sendmail im Queue-Modus () laufen zu lassen. Der Dæmon (sendmail -bd) sollte getrennt von den Queue-Läufen (sendmail -q15m) laufen. Wenn Sie trotzdem eine sofortige Auslieferung der Post wünschen, können Sie die Queue in einem geringeren Intervall, etwa , abarbeiten. Geben Sie für dieses sendmail aber einen vernünftigen Wert für MaxDaemonChildren an, um Fehler zu verhindern. Syslogd kann direkt angegriffen werden. Daher empfehlen wir Ihnen unbedingt die Option zu benutzen. Sollte das nicht möglich sein, benutzen Sie bitte . Vorsicht ist auch mit Diensten geboten, die automatisch eine Rückverbindung eröffnen, wie der reverse-identd der tcpwrapper. Diese Eigenschaft der tcpwrapper sollten Sie normalerweise nicht nutzen. Es empfiehlt sich sehr, interne Dienste vor externen Zugriffen durch eine Firewall an der Grenze Ihres Netzwerks zu schützen. Dahinter steckt mehr die Idee, das Netzwerk vor Überlastung durch Angriffe von außen zu schützen, als interne Dienste vor einem root-Zugriff aus dem Netz zu schützen. Konfigurieren Sie immer eine Firewall, die alle Zugriffe blockiert, das heißt blockieren Sie alles außer den Ports A, B, C, D und M-Z. Damit können Sie Zugriffe auf alle niedrigen Ports blockieren und Zugriffe auf spezielle Dienste wie named, wenn Sie den primären Namensdienst für eine Zone anbieten, ntalkd oder sendmail erlauben. Wenn Sie die Firewall so konfigurieren, das sie in der Voreinstellung alle Zugriffe erlaubt, ist es sehr wahrscheinlich, daß Sie vergessen, eine Reihe von Diensten zu blockieren bzw. einen internen Dienst einführen und dann vergessen die Firewall zu aktualisieren. Sie können immer die höheren Portnummern öffnen, ohne die niedrigen Portnummern, die nur von root benutzt werden dürfen, zu kompromittieren. Beachten Sie bitte auch, daß es FreeBSD erlaubt, die Portnummern, die für dynamische Verbindungen zur Verfügung stehen, zu konfigurieren. Mit sysctl lassen sich verschiedene Bereiche der net.inet.ip.portrange Variablen setzen (eine Liste erhalten Sie mit sysctl -a | fgrep portrange). So können Sie zum Beispiel die Portnummern 4000 bis 5000 für den normalen Bereich und die Nummern 49152 bis 65535 für den hohen Bereich vorsehen. Dies erleichtert Ihnen die Konfiguration der Firewall, da Sie nun Zugriffe auf Ports unterhalb von 4000, mit Ausnahme der Dienste, die von außen erreichbar sein sollen, blockieren können. ICMP_BANDLIM Eine andere Form eines DoS-Angriffs nutzt einen Server als Sprungbrett, der Server wird dabei so angegriffen, daß seine Antworten ihn selber, das lokale Netzwerk oder einen anderen Server überlasten. Der am häufigsten verwendete Angriff dieser Art ist der ICMP ping broadcast Angriff. Der Angreifer fälscht dazu ping-Pakete, die zu der Broadcast-Adresse Ihres LANs gesendet werden, indem er darin als Quelladresse die Adresse des Opfers einsetzt. Wenn die Router an der Grenze Ihres Netzwerks ping-Pakete auf Broadcast-Adressen nicht abwehren, wird Ihr LAN genügend Netzwerkverkehr generieren, um das Ziel des Angriffs zu überlasten. Dies kann besonders effektiv sein, wenn der Angreifer diese Methode mit mehreren Dutzend Broadcast-Adressen über mehrere Netzwerke einsetzt. Es wurden schon Broadcast-Angriffe mit über 120 Megabit pro Sekunde gemessen. Eine zweiter Sprungbrett-Angriff wird gegen das Fehlerbehandlungssystem von ICMP eingesetzt. Indem ein Angreifer Pakete konstruiert, die eine ICMP-Fehlermeldung hervorrufen, kann er das einkommende Netzwerk des Servers sättigen und diesen wiederum veranlassen sein ausgehendes Netzwerk mit ICMP-Antworten zu sättigen. Diese Art des Angriffs kann alle mbuf-Strukturen auf dem Server aufbrauchen und damit den Server stillegen, insbesondere wenn der Server nicht in der Lage ist, die generierten ICMP-Antworten schnell genug abzuführen. Der FreeBSD-Kernel besitzt eine neue Option , die die Auswirkungen von solchen Angriffen begrenzen kann. Die letzte weit verbreitete Form von Sprungbrett-Angriffen verwendet interne inetd-Dienste wie den UDP echo-Dienst. Der Angreifer fälscht dazu einfach ein UDP-Paket, indem er als Quellport den echo-Port von Server A und als Zielport den echo-Port von Server B angibt, wobei beide Server in Ihrem LAN stehen. Die beiden Server werden nun dieses Paket zwischen sich hin und her schicken. Der Angreifer kann die beiden Server und das LAN einfach damit überlasten, daß er mehrere Pakete dieser Art generiert. Ähnliche Probleme gibt es mit dem internen chargen-Port, daher sollten Sie die internen inetd-Testdienste abstellen. Gefälschte IP-Pakete können dazu benutzt werden, den Kernel-Cache für Routen zu überlasten. Schauen Sie sich bitte die sysctl-Parameter net.inet.ip.rtexpire, rtminexpire und rtmaxcache an. Ein Angriff der gefälschte Pakete mit zufälligen Quelladressen einsetzt, bewirkt, daß der Kernel eine Route im Route-Cache anlegt, die Sie sich mit netstat -rna | fgrep W3 ansehen können. Diese Routen verfallen für gewöhnlich nach 1600 Sekunden. Wenn der Kernel feststellt, daß die Routingtabelle im Cache zu groß geworden ist, wird er dynamisch den Wert von rtexpire verringern. Dieser Wert wird aber nie kleiner werden als rtminexpire. Daraus ergeben sich zwei Probleme: Der Kernel reagiert nicht schnell genug, wenn ein Server mit einer niedrigen Grundlast plötzlich angegriffen wird. rtminexpire ist nicht klein genug, um einen anhaltenden Angriff zu überstehen. Wenn Ihre Server über eine T3 oder eine noch schnellere Leitung mit dem Internet verbunden sind, ist es klug, mit &man.sysctl.8; die Werte für rtexpire und rtminexpire händisch zu setzen. Setzen Sie bitte keinen der Werte auf Null, außer Sie wollen die Maschine zum Erliegen bringen. Ein Wert von 2 Sekunden für beide Parameter sollte ausreichen, um die Routingtabelle vor einem Angriff zu schützen. Anmerkungen zum Zugriff mit Kerberos und ssh ssh Kerberos Es gibt ein paar Punkte, die Sie beachten sollten, wenn Sie Kerberos oder ssh einsetzen wollen. Kerberos V ist ein ausgezeichnetes Authentifizierungsprotokoll. Leider gibt es Fehler, in den für Kerberos angepaßten Versionen von telnet und rlogin, die sie ungeeignet für den Umgang mit binären Datenströmen machen. Weiterhin verschlüsselt Kerberos Ihre Sitzung nicht, wenn Sie nicht die Option verwenden, mit ssh wird dagegen alles verschlüsselt. Ein Problem mit SSH sind Weiterleitungen von Verbindungen. Wenn Sie eine sichere Arbeitsstation besitzen, die Ihnen Zugriff auf alle anderen Maschinen gibt und von dort eine Verbindung zu einer ungesicherten Maschine aufmachen, werden Ihre Schlüssel preisgegeben. Das heißt, Ihre Schlüssel werden nicht wirklich freigegeben, sondern die SSH erzeugt einen Port für Weiterleitungen für die Dauer Ihrer Sitzung. Ein Angreifer, der auf der unsicheren Maschine Zugang zu root hat, kann diesen Port und Ihre Schlüssel benutzen, um Zugriff auf andere Maschinen zu erlangen, die mit Ihren Schlüsseln zugänglich sind. Wir empfehlen Ihnen, für die Logins Ihrer Mitarbeiter immer ssh zusammen mit Kerberos einzusetzen. Damit reduzieren Sie die Abhängigkeit von potentiell gefährdeten Schlüsseln und schützen gleichzeitig die Paßwörter mit Kerberos. ssh-Schlüsselpaare sollten nur für automatisierte Aufgaben von einem besonders gesicherten Server eingesetzt werden (Kerberos kann für diese Art von Aufgaben nicht eingesetzt werden). Weiterhin empfehlen wir Ihnen, das Weiterreichen von Schlüsseln in der ssh-Konfiguration abzustellen bzw. die from=IP/DOMAIN Option in authorized_keys zu verwenden, die den Schlüssel nur von bestimmten Maschinen aus nutzbar macht. Bill Swingle Teile umgeschrieben und aktualisiert von DES, MD5, und <function>crypt()</function> Sicherheit crypt() crypt() DES MD5 Jedem Benutzer eines Unix-Systems ist ein Paßwort zugeordnet. Es scheint offensichtlich, daß das Paßwort nur dem Benutzer und dem System bekannt sein muß. Um die Paßwörter geheim zu halten, werden sie mit einer nicht umkehrbaren Hash-Funktion verschlüsselt, das heißt sie können leicht verschlüsselt aber nicht entschlüsselt werden. Was wir gerade als offensichtlich dargestellt haben, ist also nicht wahr: Das Betriebssystem kennt das Paßwort wirklich nicht, es kennt nur das verschlüsselte Paßwort. Die einzige Möglichkeit, das originale Paßwort herauszufinden, besteht darin, alle möglichen Paßwörter auszuprobieren (brute force Suche). Zu der Zeit als Unix entstanden ist, war die einzig sichere Möglichkeit Paßwörter zu verschlüsseln, leider DES (Data Encryption Standard). Für die Einwohner der USA stellte das kein Problem dar, aber da der Quellcode von DES nicht aus den USA exportiert werden durfte, mußte ein Weg gefunden werden, der die Gesetze der USA nicht verletzte und gleichzeitig die Kompatibilität mit anderen Unix Systemen, die immer noch DES benutzten, wahrte. Die Lösung bestand darin, die Verschlüsselungsbibliotheken aufzuspalten. Benutzer in den USA konnten die DES-Bibliotheken installieren und nutzen. In der Grundeinstellung benutzt FreeBSD MD5 als Verschlüsselungsmethode, das exportiert werden durfte und damit von jedem genutzt werden konnte. Es wird davon ausgegangen, daß MD5 sicherer als DES ist, so daß DES nur aus Kompatibilitätsgründen installiert werden sollte. Erkennen der Verschlüsselungsmethode Vor FreeBSD 4.4 war libcrypt.a ein symbolischer Link, der auf die Library zeigte, die die Verschlüsselungsroutinen enthielt. Seit FreeBSD 4.4 enthält libcrypt.a verschiedene Hash-Funktionen, deren Anwendung sich konfigurieren läßt. Momentan werden DES-, MD5- und Blowfish-Hash Funktionen unterstützt. In der Voreinstellung benutzt FreeBSD die MD5-Hash Funktion. Sie können leicht herausfinden, welche Verschlüsselungsmethode von FreeBSD verwendet wird. Ein Weg besteht darin, die verschlüsselten Paßwörter in /etc/master.passwd zu untersuchen. Paßwörter, die mit MD5 verschlüsselt wurden, sind länger als die mit DES verschlüsselten und beginnen mit den Zeichen $1$. Paßwörter, die mit $2$ anfangen, wurden mit der Blowfish-Funktion verschlüsselt. DES Paßwörter besitzen keine offensichtlichen Merkmale, an denen sie identifiziert werden könnten. Sie sind aber kürzer als MD5-Paßwörter und sind in einem 64 Zeichen umfassenden Alphabet kodiert, das das $-Zeichen nicht enthält. Ein relativ kurzes Paßwort, das nicht mit einem $-Zeichen anfängt, ist wahrscheinlich ein DES-Paßwort. Die Verschlüsselungsmethode für neue Paßwörter wird durch passwd_format in /etc/login.conf bestimmt. Der Wert dieser Variablen kann entweder des, md5 oder blf sein. Näheres schlagen Sie bitte in &man.login.conf.5; nach. S/Key S/Key Sicherheit S/Key S/Key ist ein Einmal-Paßwort System, das auf einer nicht umkehrbaren Hash-Funktion basiert. Aus Kompatibilitätsgründen benutzt FreeBSD MD4-Hashes, andere Systeme benutzen MD5 und DES-MAC. S/Key ist seit Version 1.1.5 Teil des FreeBSD Basissystems und wird auch auf einer wachsenden Zahl anderer Systeme benutzt. S/Key ist eine geschützte Warenmarke von Bell Communications Research, Inc. Ab der FreeBSD Version 5.0 wurde S/Key durch OPIE (Onetime Passwords In Everything), das die gleichen Funktionen bietet, abgelöst. OPIE benutzt MD5 Hash-Funktionen. In der folgenden Diskussion werden drei verschiedene Arten von Paßwörtern verwendet. Die erste Art ist Ihr normales Unix oder Kerberos Paßwort, das im folgenden Unix-Paßwort genannt wird. Die nächste Art ist das Einmal-Paßwort, das von dem S/Key-Kommando key oder dem OPIE-Programm opiekey generiert wird. Dieses Paßwort wird von den Programmen keyinit oder opiepasswd und dem Login-Programm akzeptiert. Im folgenden wird es Einmal-Paßwort genannt. Die letzte Art von Paßwörtern ist das geheime Paßwort, das Sie mit den Programmen key/opiekey (manchmal auch mit keyinit/opiepasswd) zum Erstellen der Einmal-Paßwörter verwenden. Dieses Paßwort werden wir im folgenden geheimes Paßwort oder schlicht Paßwort nennen. Das geheime Paßwort steht in keiner Beziehung zu Ihrem Unix Paßwort, beide können gleich sein, obwohl das nicht empfohlen wird. Die geheimen Paßwörter von S/Key oder OPIE sind nicht auf eine Länge von 8 Zeichen beschränkt. Sie können so lang sein, wie Sie wollen. Gebräuchlich sind Paßwörter, die sich aus sechs bis sieben Wörtern zusammensetzen. Das S/Key oder OPIE System arbeitet größtenteils unabhängig vom Unix Paßwort System. Neben dem Paßwort gibt es noch zwei Werte, die für S/Key und OPIE wichtig sind. Der erste ist der Initialwert (engl. seed oder key), der aus zwei Buchstaben und fünf Ziffern besteht. Der andere Wert ist der Iterationszähler, der eine Zahl zwischen 1 und 100 ist. S/Key generiert das Einmal-Paßwort, indem es den Initialwert und das geheime Paßwort aneinander hängt und dann die MD4/MD5 Hash-Funktion so oft, wie durch den Iterationszähler gegeben, anwendet. Das Ergebnis wird in sechs englische Wörter umgewandelt, die Ihr Einmal-Paßwort sind. Das Authentifizierungssystem (meistens PAM) merkt sich das zuletzt benutzte Einmal-Paßwort und Sie sind authentisiert, wenn die Hash-Funktion des Paßworts dem vorigen Paßwort entspricht. Da nicht umkehrbare Hash-Funktionen benutzt werden, ist es unmöglich, aus einem bekannten Paßwort weitere gültige Einmal-Paßwörter zu berechnen. Der Iterationszähler wird nach jeder erfolgreichen Anmeldung um eins verringert und stellt so die Synchronisation zwischen Benutzer und Login-Programm sicher. Wenn der Iterationszähler den Wert 1 erreicht, müssen S/Key und OPIE neu initialisiert werden. In jedem System werden drei Programme verwendet, die weiter unten beschrieben werden. Die Programme key und opiekey verlangen einen Iterationszähler, einen Initialwert und ein geheimes Paßwort. Daraus generieren sie ein Einmal-Paßwort oder eine Liste von Einmal-Paßwörtern. Die Programme keyinit und opiepasswd werden benutzt, um S/Key bzw. OPIE zu initialisieren. Mit ihnen können Paßwörter, Iterationszähler oder Initialwerte geändert werden. Als Parameter verlangen sie entweder ein geheimes Paßwort oder einen Iterationszähler oder einen Initialwert und ein Einmal-Paßwort. Die Programme keyinfo und opieinfo geben den momentanen Iterationszähler und Initialwert eines Benutzers aus. Diese werden aus den Dateien /etc/skeykeys bzw. /etc/opiekeys ermittelt. Im folgenden werden vier verschiedene Tätigkeiten beschrieben. Zuerst wird erläutert, wie keyinit oder opiepasswd über eine gesicherte Verbindung eingesetzt werden, um Einmal-Paßwörter das erste Mal zu konfigurieren oder das Paßwort oder den Initialwert zu ändern. Als nächstes wird erklärt, wie keyinit oder opiepasswd über eine nicht gesicherte Verbindung, zusammen mit key oder opiekey über eine gesicherte Verbindung, eingesetzt werden, um dasselbe zu erreichen. Als drittes wird beschrieben, wie key/opiekey genutzt werden, um sich über eine nicht gesicherte Verbindung anzumelden. Die vierte Tätigkeit beschreibt, wie mit key oder opiekey eine Reihe von Schlüsseln generiert werden, die Sie sich aufschreiben oder ausdrucken können, um sich von Orten anzumelden, die über keine gesicherten Verbindungen verfügen. Einrichten über eine gesicherte Verbindung Benutzen Sie keyinit um S/Key das erste Mal einzurichten, das Paßwort oder den Initialwert zu ändern, während Sie über eine gesicherte Verbindung, das heißt an der Konsole oder über ssh angemeldet, sind: &prompt.user; keyinit Adding unfurl: Reminder - Only use this method if you are directly connected. If you are using telnet or rlogin exit with no password and use keyinit -s. Enter secret password: Again secret password: ID unfurl s/key is 99 to17757 DEFY CLUB PRO NASH LACE SOFT Mit OPIE benutzen Sie stattdessen opiepasswd: &prompt.user; opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED Nach der Aufforderung Enter new secret pass phrase: oder Enter secret password: geben Sie bitte Ihr Paßwort ein. Dies ist nicht das Paßwort, mit dem Sie sich anmelden, sondern es wird genutzt, um das Einmal-Paßwort zu generieren. Die Zeile, die mit ID anfängt, enthält Ihren Login-Namen, den Iterationszähler und den Initialwert. Diese Werte müssen Sie sich nicht behalten, da das System sie zeigen wird, wenn Sie sich anmelden. In der letzten Zeile steht das Einmal-Paßwort, das aus diesen Parametern und Ihrem geheimen Paßwort ermittelt wurde. Wenn sie sich jetzt wieder anmelden wollten, dann müßten Sie dieses Paßwort benutzen. Einrichten über eine nicht gesicherte Verbindung Um Einmal-Paßwörter über eine nicht gesicherte Verbindung einzurichten, oder das geheime Paßwort zu ändern, müssen Sie über eine gesicherte Verbindung zu einer Stelle verfügen, an der Sie die Kommandos key oder opiekey ausführen. Dies kann ein Desk Accessory auf einem Macintosh oder die Eingabeaufforderung auf einer Maschine, der Sie vertrauen, sein. Zudem müssen Sie einen Iterationszähler vorgeben (100 ist ein guter Wert) und einen Initialwert wählen, wobei Sie auch einen zufällig generierten nutzen können. Benutzen Sie keyinit -s über die ungesicherte Verbindung zu der Maschine, die Sie einrichten wollen: &prompt.user; keyinit -s Updating unfurl: Old key: to17758 Reminder you need the 6 English words from the key command. Enter sequence count from 1 to 9999: 100 Enter new key [default to17759]: s/key 100 to 17759 s/key access password: s/key access password:CURE MIKE BANE HIM RACY GORE Mit OPIE benutzen Sie opiepasswd: &prompt.user; opiepasswd Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY Drücken Sie Return, um die Vorgabe für den Initialwert, der von keyinit key genannt wird, zu akzeptieren. Bevor Sie nun das Zugriffspaßwort (engl. access password) eingeben, rufen Sie über die gesicherte Verbindung key mit denselben Parametern auf: &prompt.user; key 100 to17759 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> CURE MIKE BANE HIM RACY GORE Mit OPIE benutzen Sie opiekey: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT Gehen Sie nun zurück zu der nicht gesicherten Verbindung und geben dort das eben generierte Einmal-Paßwort ein. Erzeugen eines einzelnen Einmal-Paßwortes Nachdem Sie S/Key oder OPIE eingerichtet haben, werden Sie beim nächsten Anmelden wie folgt begrüßt: &prompt.user; telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> s/key 97 fw13894 Password: OPIE begrüßt Sie wie folgt: &prompt.user; telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password: Anmerkung: S/Key und OPIE besitzen eine nützliche Eigenschaft, die hier nicht gezeigt ist. Wenn Sie an der Eingabeaufforderung Return eingeben, wird die echo-Funktion eingeschaltet, das heißt Sie sehen, was Sie tippen. Dies ist besonders nützlich, wenn Sie ein generiertes Paßwort von einem Ausdruck abtippen müssen. MS-DOS Windows MacOS Jetzt müssen Sie Ihr Einmal-Paßwort generieren, um der Anmeldeaufforderung nachzukommen. Dies muß auf einem gesicherten System geschehen, auf dem Sie key oder opiekey ausführen können. Diese Programme gibt es übrigens auch für DOS, Windows und MacOS. Beide Programme benötigen den Iterationszähler sowie den Initialwert als Parameter, die Sie mittels cut-and-paste direkt von der Login Aufforderung nehmen können. Auf dem sicheren System: &prompt.user; key 97 fw13894 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: WELD LIP ACTS ENDS ME HAAG Mit OPIE: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT Mit dem jetzt generierten Einmal-Paßwort können Sie die Anmeldeprozedur fortsetzen: login: <username> s/key 97 fw13894 Password: <return to enable echo> s/key 97 fw13894 Password [echo on]: WELD LIP ACTS ENDS ME HAAG Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ... Erzeugen von mehreren Einmal-Paßwörtern Manchmal müssen Sie sich an Orte begeben, an denen Sie keinen Zugriff auf eine sichere Maschine oder eine sichere Verbindung haben. In diesem Fall können Sie vorher mit key einige Einmal-Paßwörter generieren, die Sie sich ausdrucken und mitnehmen können. Zum Beispiel: &prompt.user; key -n 5 30 zz99999 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> 26: SODA RUDE LEA LIND BUDD SILT 27: JILT SPY DUTY GLOW COWL ROT 28: THEM OW COLA RUNT BONG SCOT 29: COT MASH BARR BRIM NAN FLAG 30: CAN KNEE CAST NAME FOLK BILK Mit fordern Sie fünf Paßwörter der Reihe nach an. Der letzte Iterationszähler wird durch gegeben. Beachten Sie bitte, daß die Paßwörter in der umgekehrten Reihenfolge, in der sie zu benutzen sind, ausgeben werden. Wenn Sie wirklich paranoid sind, schreiben Sie sich jetzt die Paßwörter auf, ansonsten drucken Sie sie mit lpr aus. Beachten Sie, daß jede Zeile den Iterationszähler und das Einmal-Paßwort zeigt. Trotzdem finden Sie es vielleicht hilfreich, eine Zeile nach Gebrauch durchzustreichen. Einschränken der Benutzung von Unix Paßwörtern Basierend auf dem Hostnamen, Benutzernamen, Terminal oder IP-Adresse, können Sie die Verwendung von Unix Paßwörtern einschränken. Die Beschränkungen werden in /etc/skey.access definiert. Die Manualseite &man.skey.access.5; beschreibt das Format dieser Datei sowie einige Vorsichtsmaßnahmen, die Sie treffen sollten, bevor Sie diese Datei einsetzen. Wenn /etc/skey.access nicht existiert und das ist unter FreeBSD die Vorgabe, dann dürfen sich alle Benutzer mit Unix Paßwörtern anmelden. Wenn die Datei existiert, dann müssen alle Benutzer S/Key zum Anmelden benutzen. Ausnahmen müssen explizit in skey.access konfiguriert werden. In allen Fällen werden Unix Paßwörter beim Anmelden auf der Konsole erlaubt. Das folgende Beispiel zeigt die drei häufigsten Ausnahmen: permit internet 192.168.0.0 255.255.0.0 permit user fnord permit port ttyd0 Die erste Zeile (permit internet) erlaubt es Benutzern, deren IP-Adresse, die immer noch gefälscht werden kann, mit dem angegebenen Wert und der angegebenen Maske übereinstimmt, Unix Paßwörter zu benutzen. Dies sollte nicht als Sicherheitsmechanismus mißverstanden werden, sondern sollte autorisierte Benutzer daran erinnern, daß sie ein ungesichertes Netzwerk benutzen und sich mit S/Key anmelden müssen. Die zweite Zeile (permit user) erlaubt es dem angegebenen Benutzer, hier fnord, jederzeit Unix Paßwörter zu verwenden. Dies sollte allerdings nur für Benutzer konfiguriert werden, die das key Programm nicht nutzen können (Leute mit dump Terminals oder wirklich uneinsichtige). Die dritte Zeile (permit port) erlaubt allen Benutzern, die sich an dem angegebenen Terminal anmelden, Unix Paßwörter zu benutzen. Sie sollte für Einwählverbindungen genutzt werden. Mark Murray Beigesteuert von Mark Dapoz Basiert auf einem Beitrag von Kerberos Kerberos Kerberos ist ein zusätzliches Netzwerkprotokoll, das es Benutzern erlaubt, sich über einen sicheren Server zu authentifizieren. Dienste wie rlogin, rcp oder das sichere Kopieren von Dateien zwischen Systemen und andere risikoreiche Tätigkeiten werden durch Kerberos erheblich sicherer und kontrollierbarer. Die folgende Anleitung kann nur als Wegweiser dazu dienen, wie Sie Kerberos für FreeBSD aufsetzen. Für eine komplette Beschreibung des Systems, sollten Sie sich auf jeden Fall die entsprechenden Manual-Seiten ansehen. Installation von Kerberos MIT Kerberos Installation Kerberos ist eine optionale Komponente von FreeBSD. Am leichtesten installieren Sie die Software, wenn Sie bei der ersten Installation von FreeBSD in sysinstall die Distribution 'krb4' oder 'krb5' auswählen. Damit installieren Sie entweder die 'eBones' (KerberosIV) oder 'Heimdal' (Kerberos5) Version von Kerberos. Beide Versionen werden mit FreeBSD ausgeliefert, da sie außerhalb von den USA oder Kanada entwickelt werden. Sie unterliegen deshalb auch nicht den restriktiven Exportbeschränkungen der USA und sind auch für Bewohner anderer Länder zugänglich. Als Alternative steht die MIT Variante von Kerberos in der Ports-Kollektion unter security/krb5 zur Verfügung. Erstellen der initialen Datenbank Die folgenden Schritte werden nur auf dem Kerberos-Server durchgeführt. Stellen Sie bitte vorher sicher, daß keine alten Kerberos-Datenbanken mehr vorhanden sind. Im Verzeichnis /etc/kerberosIV sollten sich nur die folgenden Dateien befinden: &prompt.root; cd /etc/kerberosIV &prompt.root; ls README krb.conf krb.realms Wenn noch andere Dateien, wie principal.* oder master_key, existieren, müssen Sie die alte Kerberos-Datenbank mit kdb_destroy löschen. Wenn Kerberos nicht läuft, können Sie die Dateien auch einfach löschen. Sie sollten nun die Dateien krb.conf und krb.realms editieren, um Ihr Kerberos-Realm zu definieren. Das folgende Beispiel zeigt dies für das Realm EXAMPLE.COM auf dem Server grunt.example.com. krb.conf sollte wie folgt aussehen: &prompt.root; cat krb.conf EXAMPLE.COM EXAMPLE.COM grunt.example.com admin server CS.BERKELEY.EDU okeeffe.berkeley.edu ATHENA.MIT.EDU kerberos.mit.edu ATHENA.MIT.EDU kerberos-1.mit.edu ATHENA.MIT.EDU kerberos-2.mit.edu ATHENA.MIT.EDU kerberos-3.mit.edu LCS.MIT.EDU kerberos.lcs.mit.edu TELECOM.MIT.EDU bitsy.mit.edu ARC.NASA.GOV trident.arc.nasa.gov Die zusätzlich aufgeführten Realms brauchen Sie nicht anzulegen. Sie zeigen hier nur, wie man Kerberos dazu bringt, andere Realms zu erkennen. Sie können Sie also auch weglassen. Die erste Zeile benennt das Realm, in dem das System arbeitet. Die anderen Zeilen enthalten Realm/Host Paare. Der erste Wert jeder Zeile ist das Realm, der zweite Teil ein Host, der in diesem Realm Key Distribution Center ist. Die Schlüsselwörter admin server nach einem Hostnamen bedeuten, daß dieser Host auch einen administrativen Datenbankserver zur Verfügung stellt. Weitere Erklärungen zu diesen Begriffen finden Sie in den Kerberos Manual-Seiten. Als nächstes muß grunt.example.com in das Realm EXAMPLE.COM aufgenommen werden. Desweiteren erstellen wir einen Eintrag, der alle Rechner der Domäne .example.com in das Realm EXAMPLE.COM aufnimmt. krb.realms sollte danach so aussehen: &prompt.root; cat krb.realms grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .berkeley.edu CS.BERKELEY.EDU .MIT.EDU ATHENA.MIT.EDU .mit.edu ATHENA.MIT.EDU Die zusätzlichen Realms sind hier wieder als Beispiel gedacht. Sie können sie der Einfachheit halber auch weglassen. Die erste Zeile nimmt ein einzelnes System in das Realm auf. Die anderen Zeilen zeigen, wie bestimmte Subdomänen einem bestimmten Realm zugeordnet werden. Das folgende Kommando muß nur auf dem Kerberos-Server (oder Key Distribution Center) laufen. Mit kdb_init können wir die Datenbank anlegen: &prompt.root; kdb_init Realm name [default ATHENA.MIT.EDU ]: EXAMPLE.COM You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter Kerberos master key: Anschließend muß der Schlüssel gespeichert werden, damit Server auf der lokalen Maschine darauf zugreifen können. Dies geschieht mit kstash: &prompt.root; kstash Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Das verschlüsselte Master-Paßwort wurde in /etc/kerberosIV/master_key gesichert. Anlegen von Prinzipals Für jedes System, das mit Kerberos gesichert werden soll, müssen zwei Prinzipale in die Datenbank eingetragen werden. Ihre Namen sind kpasswd und rcmd. Beide Prinzipale müssen für jedes System angelegt werden, wobei die Instanz der Name des jeweiligen Systems ist. Die Dæmonen kpasswd und rcmd erlauben es anderen Systemen, Kerberos-Paßwörter zu ändern und Kommandos wie rcp, rlogin und rsh laufen zu lassen. Beide Einträge werden im folgenden angelegt: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: passwd Instance: grunt <Not found>, Create [y] ? y Principal: passwd, Instance: grunt, kdc_key_ver: 1 New Password: <---- geben Sie hier Zufallswerte ein Verifying password New Password: <---- geben Sie hier Zufallswerte ein Random password [y] ? y Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: rcmd Instance: grunt <Not found>, Create [y] ? Principal: rcmd, Instance: grunt, kdc_key_ver: 1 New Password: <---- geben Sie hier Zufallswerte ein Verifying password New Password: <---- geben Sie hier Zufallswerte ein Random password [y] ? Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Erstellen der Server-Datei Wir müssen nun für jede Maschine die Instanzen, die Dienste definieren, aus der Datenbank mit ext_srvtab extrahieren. Die erstelle Datei muß auf einem sicheren Weg in das /etc/kerberosIV Verzeichnis jedes Clients kopiert werden. Die Datei muß auf jedem Server und auf jedem Client vorhanden sein und ist unabdingbar für Kerberos. &prompt.root; ext_srvtab grunt Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Generating 'grunt-new-srvtab'.... Das Kommando erzeugt Dateien mit einem temporären Namen, der es anderen Servern erlaubt, ihre Datei abzuholen. Die Datei muß auf dem entsprechenden System in srvtab umbenannt werden. Auf dem originalen System können Sie mv benutzen, um die Datei umzubenennen: &prompt.root; mv grunt-new-srvtab srvtab Wenn die Datei für ein Client-System bestimmt ist und das Netzwerk nicht sicher ist, kopieren Sie die Datei auf ein bewegliches Medium und transportieren sie physikalisch. Kopieren Sie die Datei auf den Client in das Verzeichnis /etc/kerberosIV und benennen Sie sie in srvtab um. Setzen Sie schließlich noch die Berechtigungen auf 600: &prompt.root; mv grumble-new-srvtab srvtab &prompt.root; chmod 600 srvtab Füllen der Datenbank Wir können nun Benutzer in der Datenbank anlegen. Mit kdb_edit legen wir zuerst die Benutzerin jane an: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: <Not found>, Create [y] ? y Principal: jane, Instance: , kdc_key_ver: 1 New Password: <---- geben Sie ein sicheres Paßwort ein Verifying password New Password: <---- wiederholen Sie die Eingabe Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Testen Zuerst müssen die Kerberos-Dæmonen gestartet sein. Wenn Sie /etc/rc.conf richtig angepaßt haben, passiert das automatisch, wenn Sie booten. Dieser Schritt ist nur auf dem Kerberos-Server notwendig, die Clients bekommen alles was sie brauchen aus dem /etc/kerberosIV Verzeichnis. &prompt.root; kerberos & Kerberos server starting Sleep forever on error Log file is /var/log/kerberos.log Current Kerberos master key version is 1. Master key entered. BEWARE! Current Kerberos master key version is 1 Local realm: EXAMPLE.COM &prompt.root; kadmind -n & KADM Server KADM0.0A initializing Please do not use 'kill -9' to kill this job, use a regular kill instead Current Kerberos master key version is 1. Master key entered. BEWARE! Jetzt können wir mit kinit versuchen, ein Ticket für die ID jane, die wir oben angelegt haben, zu erhalten: &prompt.user; kinit jane MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane" Password: Mit klist können Sie sich vergewissern, daß Sie die Tickets auch erhalten haben: &prompt.user; klist Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM Versuchen Sie nun das Paßwort mit passwd zu ändern, um zu überprüfen, daß der kpasswd Dæmon auch auf der Kerberos-Datenbank autorisiert ist: &prompt.user; passwd realm EXAMPLE.COM Old password for jane: New Password for jane: Verifying password New Password for jane: Password changed. Anlegen von <command>su</command> Privilegien Mit Kerberos kann jedem Benutzer, der root-Privilegien braucht, ein eigenes Paßwort für su zugewiesen werden. Dies wird dadurch erreicht, daß die Instanz eines Prinzipals root ist. Mit kbd_edit legen wir nun den Eintrag jane.root in der Kerberos-Datenbank an: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: root <Not found>, Create [y] ? y Principal: jane, Instance: root, kdc_key_ver: 1 New Password: <---- geben Sie ein sicheres Paßwort ein Verifying password New Password: <---- geben Sie das Paßwort erneut ein Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short! Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Versuchen Sie nun, für diesen Prinzipal Tickets zu bekommen: &prompt.root; kinit jane.root MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root" Password: Als nächstes fügen wir den Prinzipal in .klogin von root ein: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Jetzt benutzen wir su: &prompt.user; su Password: und kontrollieren, welche Tickets wir haben: &prompt.root; klist Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM Weitere Kommandos In einem der Beispiele haben wir einen Prinzipal mit dem Namen jane und der Instanz root angelegt. Der Prinzipal entstand aus einem Benutzer mit dem gleichen Namen. Unter Kerberos ist es Standard, daß ein <principal>.<instance> der Form <username>.root es dem Benutzer <username> erlaubt, mit su root zu werden, wenn die entsprechenden Einträge in .klogin von root existieren: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Das gilt auch für die .klogin-Datei im Heimatverzeichnis eines Benutzers: &prompt.user; cat ~/.klogin jane@EXAMPLE.COM jack@EXAMPLE.COM Die Einträge erlauben jedem, der sich im Realm EXAMPLE.COM als jane oder jack mit kinit authentifiziert hat, über rlogin, rsh oder rcp Zugriff auf den Account jane und dessen Dateien. Im folgenden Beispiel meldet sich jane mit Kerberos auf grunt an: &prompt.user; kinit MIT Project Athena (grunt.example.com) Password: &prompt.user; rlogin grunt Last login: Mon May 1 21:14:47 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Im folgenden Beispiel wurde der Prinzipal jack mit einer Instanz null angelegt. Mit der obigen .klogin-Datei kann er sich nun auf derselben Maschine als jane anmelden: &prompt.user; kinit &prompt.user; rlogin grunt -l jane MIT Project Athena (grunt.example.com) Password: Last login: Mon May 1 21:16:55 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Gary Palmer Beigetragen von Alex Nash Firewalls Firewall Sicherheit Firewalls Firewalls sind sehr wichtig für Leute, die mit dem Internet verbunden sind. Weiterhin halten sie Einzug in private Netzwerke, um dort die Sicherheit zu verbessern. Dieser Abschnitt erklärt, was Firewalls sind, wie sie benutzt werden und wie man die Möglichkeiten von FreeBSD nutzen kann, um eine Firewall zu implementieren. Es wird oft gedacht, daß eine Firewall zwischen dem internen Netzwerk und dem weiten, schlechten Internet alle Sicherheitsprobleme löst. Eine Firewall kann die Sicherheit erhöhen, doch eine schlecht aufgesetzte Firewall ist ein größeres Sicherheitsrisiko als gar keine Firewall. Eine Firewall ist nur eine weitere Sicherheitsschicht, sie verhindert aber nicht, daß ein wirklich entschlossener Cracker in Ihr internes Netz eindringt. Wenn Sie Ihre interne Sicherheit vernachlässigen, weil Sie Ihre Firewall für undurchdringlich halten, machen Sie den Crackern die Arbeit leichter. Was ist eine Firewall? Auf dem Internet sind momentan zwei Arten von Firewalls gebräuchlich. Die erste Art ist ein Paketfilter, in dem ein Kernel auf einer Maschine mit mehreren Netzwerkverbindungen auf Grund von Regeln entscheidet, ob er ein Paket weiterleitet oder nicht. Der zweite Typ sind Proxy-Server, die auf Dæmonen angewiesen sind. Die Dæmonen authentifizieren Benutzer und leiten Pakete weiter, das heißt sie können auf Maschinen mit mehreren Netzwerkverbindungen laufen, auf denen das Weiterleiten von Paketen durch den Kernel ausgeschaltet ist. Manchmal werden beide Arten einer Firewall kombiniert und es ist nur einer besonderen Maschine, die Bastion Host genannt wird, erlaubt, Pakete in das interne Netzwerk über einen Paketfilter zu schicken. Auf dem Bastion Host laufen Proxy-Dienste, die im allgemeinen sicherer als normale Authentifizierungsmechanismen sind. FreeBSD besitzt einen Kernel-Paketfilter (IPFW), der im Rest dieses Abschnitts behandelt wird. Proxy-Server können mit Hilfe von Software von Drittherstellern auf FreeBSD realisiert werden, doch gibt es so viele Proxy-Server, daß deren Behandlung den Rahmen dieses Abschnitts sprengen würde. Packet-Filter Ein Router ist eine Maschine, die Pakete zwischen zwei oder mehr Netzwerken weiterleitet. Ein Paketfilter ist ein spezieller Router, der extra Code im Kernel hat, der es im erlaubt, die Pakete mit Regeln zu vergleichen, bevor er das Paket weiterleitet. Um die Filter zu aktivieren, müssen Sie zuerst die Regeln definieren, die festlegen, ob ein Paket weitergeleitet wird oder nicht. Um zu entscheiden, ob ein Paket weitergeleitet wird, sucht der Code des Paketfilters eine Regel, die auf den Inhalt des Paketheaders paßt. Wenn eine passende Regel gefunden wurde, wird die Aktion der Regel ausgeführt. Die Aktion kann das Paket blockieren, weiterleiten oder auch dem Sender eine ICMP-Nachricht schicken. Die Regeln werden der Reihenfolge nach durchsucht und nur die erste passende Regel wird angewandt. Daher wird auch von einer Regelkette gesprochen. Die Kriterien, nach denen Sie ein Paket spezifizieren können, hängen von der eingesetzten Software ab. Typischerweise können Sie Pakete nach der Quell-IP Adresse, der Ziel IP-Adresse, dem Quellport, dem Zielport (bei Protokollen, die diese unterscheiden) oder dem Pakettyp (UDP, TCP, ICMP) unterscheiden. Proxy-Server Auf Proxy-Servern werden die normalen Systemdienste (telnetd, ftpd, usw.) durch besondere Server ersetzt. Diese Server werden Proxy-Server genannt, da sie normalerweise nur weitergehende Verbindungen erlauben (proxy engl. für Stellvertreter). Zum Beispiel können Sie auf Ihrer Firewall einen Proxy-Telnet Server laufen lassen, der es Personen erlaubt, aus dem Internet auf die Firewall eine Telnet-Verbindung zu öffnen. Dort laufen Sie durch einen Authentifizierungsmechanismus und haben dann Zugriff auf Ihr internes Netzwerk. Für den umgekehrten Weg können Sie natürlich auch Proxy-Server einsetzen. Proxy-Server sind in aller Regel sicherer als normale Server und bieten oft eine Reihe von Authentifizierungsmechanismen. Dazu gehören Einmal-Paßwort Systeme, bei denen das zum Anmelden verwendete Paßwort sofort ungültig wird und nicht zu einer weiteren Anmeldung benutzt werden kann, auch wenn es abgehört wurde. Da Proxy-Server den Benutzern keinen Zugang zu dem System geben, wird es für einen Angreifer sehr schwer, Hintertüren zur Umgehung Ihres Sicherheitssystems zu installieren. Mit Proxy-Servern lassen sich die Zugriffe meist noch weiter beschränken. Der Zugriff kann auf bestimmte Rechner eingeschränkt werden und oft ist es möglich, festzulegen, welcher Benutzer mit welcher Zielmaschine kommunizieren darf. Welche Möglichkeiten Sie haben, hängt stark von der Proxy-Software ab, die Sie einsetzen. Was kann ich mit IPFW machen? ipfw IPFW, das von FreeBSD zur Verfügung gestellt wird, ist ein Paketfilter und ein Accounting-System, das im Kernel läuft und mit &man.ipfw.8; ein Werkzeug im Userland zur Verfügung stellt. Beide Teile zusammen erlauben es Ihnen, die Regeln für Routing Entscheidungen im Kernel zu definieren oder abzufragen. In IPFW gibt es zwei zusammenhängende Teile. Mit der Firewall können Sie einen Paketfilter konfigurieren. Das IP-Accounting Modul erlaubt es Ihnen, mit ähnlichen Regeln wie den Firewall-Regeln, die Nutzung Ihres Routers zu überwachen. Damit können Sie zum Beispiel sehen, wieviel Verkehr auf Ihrem Router von einer bestimmten Maschine kommt oder wieviel WWW (World Wide Web) Verkehr durch Ihren Router geht. Durch das Design von IPFW können Sie IPFW auch auf nicht-Routern einsetzen und einen Paketfilter für eingehende und ausgehende Verbindungen konfigurieren. Dies ist ein Spezialfall der allgemeinen Anwendung von IPFW und es werden daher die gleichen Kommandos und Techniken benutzt. Aktivieren von IPFW ipfw aktivieren Der größte Teil des IPFW-Systems befindet sich im Kernel, daher müssen Sie die Konfigurationsdatei des Kernels editieren und anschließend den Kernel neu übersetzen. Das Kapitel "Konfiguration des FreeBSD Kernels" () beschreibt, wie Sie dazu vorzugehen haben. Momentan gibt es drei Optionen in der Kernelkonfiguration, die IPFW betreffen: options IPFIREWALL Fügt den Paketfilter-Code in den Kernel ein. options IPFIREWALL_VERBOSE Aktiviert das Loggen von Paketen mit &man.syslogd.8;. Ohne diese Option werden keine Pakete geloggt, auch wenn Sie in den Filterregeln das Loggen angeben. options IPFIREWALL_VERBOSE_LIMIT=10 Begrenzt die Anzahl der über &man.syslogd.8; geschriebenen Einträge. Die Option ist in Umgebungen mit hoher Aktivität nützlich, in denen Sie die Firewall Aktivitäten loggen möchten, aber einem Angreifer nicht die Möglichkeit eines Denial of Service Angriffs durch das Überlasten von syslog geben wollen. Erreicht eine Regel der Regelkette die angegebene Grenze, so wird für diesen Eintrag das Loggen abgestellt. Um das Loggen von Paketen wieder zu aktivieren, müssen Sie den Zähler mit &man.ipfw.8; zurücksetzen: &prompt.root; ipfw zero 4500 Hier ist 4500 die Nummer der Regel in der Regelkette, für die Sie das Log weiterführen möchten. Frühere Versionen von FreeBSD stellten die Option IPFIREWALL_ACCT zur Verfügung. Die Option ist mittlerweile überholt, da der Firewall Code automatisch Accounting Möglichkeiten bereitstellt. Konfiguration von IPFW ipfw Konfiguration Mit &man.ipfw.8; konfigurieren Sie die IPFW-Software. Die Syntax dieses Kommandos sieht ziemlich kompliziert aus, doch wenn Sie einmal den Aufbau der Kommandos verstanden haben, ist es sehr einfach. Das Kommando unterstützt vier verschiedene Operationen: Hinzufügen/Löschen, Anzeigen und Zurücksetzen von Regeln, sowie das Zurücksetzen von Paketzählern. Die Operationen Hinzufügen/Löschen werden genutzt um die Regeln, nach denen Pakete akzeptiert, blockiert oder geloggt werden, zu erstellen. Die Operation Anzeigen zeigt die Regelkette und die Paketzähler an. Die Operation Zurücksetzen löscht alle Regeln der Regelkette. Mit der letzten Operation können Sie ein oder mehrere Paketzähler auf den Wert Null zurücksetzen. Ändern der IPFW-Regeln Die Syntax für diese Operation lautet: ipfw -N Kommando index Aktion log Protokoll Adressen Optionen Dieser Aufruf unterstützt eine Option: -N Löst Adressen und Namen von Diensten in der Ausgabe auf. Kommando kann auf die kürzeste eindeutige Länge reduziert werden. Gültig sind die Werte: add Fügt einen Eintrag in die Firewall/Accounting Regelkette ein. delete Löscht einen Eintrag in der Firewall/Accounting Regelkette. Frühere Versionen von IPFW verfügten über getrennte Firewall- und Accounting-Einträge in der Regelkette. In der jetzigen Version steht das Accounting für jeden Eintrag in der Firewall-Regelkette zur Verfügung. Wenn ein Wert für index angegeben ist, so wird die Regel an entsprechender Stelle in die Regelkette eingefügt. Ansonsten wird die Regel an das Ende der Kette gestellt, wobei der Index um 100 größer ist als der Index der letzten Regel (die voreingestellte letzte Regel mit der Nummer 65535 wird in diesem Verfahren nicht berücksichtigt). Wenn der Kernel mit IPFIREWALL_VERBOSE erstellt wurde, gibt die Regel mit der Option log Meldungen auf der Systemkonsole aus. Gültige Werte für Aktion sind: reject Blockiert das Paket und schickt dem Sender die ICMP-Nachricht host or port unreachable. allow Leitet das Paket normal weiter. Zulässige Aliase sind pass und accept. deny Blockiert das Paket und benachrichtigt den Sender nicht mit einer ICMP-Nachricht. Dem Sender kommt es so vor, als hätte das Paket sein Ziel nie erreicht. count Erhöht den Paketzähler für diese Regel, trifft aber keine Entscheidung wie mit dem Paket zu verfahren ist, das heißt die nächste Regel der Kette wird auf das Paket angewendet. Es ist möglich die kürzeste eindeutige Form der Aktion anzugeben. Für Protokoll können die folgenden Werte angegeben werden: all Trifft auf jedes IP-Paket zu. icmp Paßt auf jedes ICMP-Paket. tcp Paßt auf jedes TCP-Paket. udp Trifft auf jedes UDP-Paket zu. Die Syntax für Adresse lautet: from Adresse/MaskePort to Adresse/MaskePort via Interface Port können Sie nur angeben, wenn das Protokoll auch Ports unterstützt (UDP und TCP). ist optional und gibt die IP-Adresse, den Domainnamen eines lokalen Interfaces oder den Namen des Interfaces (z.B. ed0) an und trifft nur auf Pakete zu, die durch dieses Interface gehen. Die Nummern der Interfaces können mit einem Platzhalter angegeben werden, ppp* trifft auf alle Kernel-PPP Interfaces zu. Adresse/Maske können Sie wie folgt angeben: Adresse oder Adresse/Bitmaske oder Adresse:Maskenmuster Anstelle einer IP-Adresse können Sie einen gültigen Hostnamen angeben. ist eine dezimale Zahl, die angibt, wieviele Bits in der Adressmake gesetzt werden sollen. Die Angabe 192.216.222.1/24 erstellt eine Maske, die auf jede Adresse des Klasse C Subnetzes 192.216.222 zutrifft. Das wird mit der gegebenen IP-Adresse logisch UND verknüpft. Das Schlüsselwort any trifft auf jede IP-Adresse zu. Die Portnummern werden wie folgt angegeben: Port,Port,Port gibt entweder einen einzelnen Port oder eine Liste von Ports an Port-Port gibt einen Portbereich an. Sie können einen einzelnen Bereich mit einer Liste kombinieren, müssen aber den Bereich immer zuerst angeben. Die verfügbaren Optionen sind: frag Trifft auf Pakete zu, die nicht das erste Fragment eines Datagrams sind. in Trifft auf eingehende Pakete zu. out Trifft auf ausgehende Pakete zu. ipoptions spec Trifft auf alle IP-Pakete zu, deren Header die in spec angegebenen, durch Kommata separierte, Optionen enthalten. Die unterstützten IP-Optionen sind: ssrr (strict source route), lsrr (loose source route), rr (record packet route), und ts (time stamp). Ein führendes ! trifft auf alle Pakete zu, die diese Option nicht gesetzt haben. established Trifft auf alle Pakete zu, die zu einer schon bestehenden TCP-Verbindung gehören, das heißt das RST- oder ACK-Bit ist gesetzt. Sie können den Durchsatz der Firewall verbessern, wenn Sie die established Regeln soweit wie möglich an den Anfang der Regelkette stellen. setup Paßt auf alle Pakete, die versuchen eine TCP-Verbindung aufzubauen, das heißt das SYN-Bit ist gesetzt und das ACK-Bit ist nicht gesetzt. tcpflags flags Trifft auf alle Pakete zu, die im TCP-Header eine der durch Kommata getrennten Option gesetzt haben. Die gültigen Optionen sind: fin, syn, rst, psh, ack und urg. Mit einem führenden ! kann die Abwesenheit einer Option erzwungen werden. icmptypes types Trifft auf ICMP-Pakete vom Typ types. Hier kann eine Kommata separierte Aufzählung von Bereichen oder einzelnen Typen angegeben werden. Gebräuchliche Typen sind: 0 echo reply (ping reply), 3 destination unreachable, 5 redirect, 8 echo request (ping request) und 11 time exceeded, das die Überschreitung der TTL angibt und zum Beispiel von &man.traceroute.8; genutzt wird. Anzeigen der IPFW-Regeln Die Syntax für dieses Kommando lautet: ipfw -a -t -N l Drei Optionen sind für diese Form gültig: -a Zeigt die Paketzähler zu den Regeln an. Diese Option ist die einzige Möglichkeit, die Zähler zu sehen. -t Zeigt die Zeit, zu der die Regel zuletzt aktiviert wurde. Die Syntax dieser Ausgabe ist nicht kompatibel mit der Eingabesyntax von &man.ipfw.8;. -N Versucht Adressen und Namen von Diensten aufzulösen. Zurücksetzen der IPFW-Regeln Die Regeln setzen Sie wie folgt zurück: ipfw flush Damit werden alle Regeln der Regelkette, mit Ausnahme der Vorgaberegel 65535 gelöscht. Seien Sie vorsichtig, wenn Sie die Regeln zurücksetzen. Die Vorgabe für die Regel 65535 ist es, alle Pakete zu blockieren, das heißt, das System ist solange vom Netzwerk abgeschnitten, bis wieder neue Regeln in die Kette eingefügt werden. Zurücksetzen der Paketzähler Um einen oder mehrere Paketzähler zurückzusetzen, verwenden Sie folgende Syntax: ipfw zero index Wenn Sie das Argument index nicht angeben, werden alle Paketzähler zurückgesetzt. Wenn Sie das Argument angeben, wird nur der Zähler der angegebenen Regel zurückgesetzt. Beispiel für <application>ipfw</application> Kommandozeilen Das folgende Kommando blockiert alle Pakete, die von dem Host evil.crackers.org auf den Telnet-Port von nice.people.org gehen: - &prompt.root ipfw add deny tcp from evil.crackers.org to nice.people.org 23 + &prompt.root; ipfw add deny tcp from evil.crackers.org to nice.people.org 23 Das nächste Beispiel verbietet jeden IP-Verkehr von dem ganzen crackers.org Klasse C Netzwerk zu der Maschine nice.people.org: &prompt.root; ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org Wenn Sie X-Sessions zu Ihrem internen Netzwerk, einem Subnetz eines C Klasse Netzwerkes, verbieten wollen, wenden Sie das folgende Kommando an: &prompt.root; ipfw add deny tcp from any to my.org/28 6000 setup Um die Accounting Einträge zu sehen: &prompt.root; ipfw -a list oder kürzer &prompt.root; ipfw -a l Den Zeitpunkt, an dem eine Regel das letzte Mal aktiviert wurde, sehen Sie mit: &prompt.root; ipfw -at l Aufbau einer Firewall mit Paketfiltern Beachten Sie bitte, daß die folgenden Vorschläge wirklich nur Vorschläge sind. Die Anforderungen jeder Firewall sind verschieden und wir können Ihnen wirklich nicht sagen, wie Sie Ihre maßgeschneiderte Firewall aufsetzen müssen. Wenn Sie Ihre Firewall außerhalb eines kontrollierten Testumfelds aufbauen, empfehlen wir Ihnen dringend, das Loggen der Regeln im Kernel zu aktivieren und Regeln zu verwenden, die loggen. Das macht es Ihnen leichter, Fehler zu finden und diese ohne große Unterbrechungen zu beheben. Auch nachdem Sie die Firewall aufgesetzt haben, empfehlen wir Ihnen, die `deny'-Regeln zu loggen. Dies macht es leichter, Angriffen nachzugehen und das Regelwerk Ihrer Firewall zu ändern, wenn sich die Anforderungen einmal ändern. Wenn Sie Pakete der accept-Regel loggen, denken Sie bitte daran, daß Sie leicht sehr große Datenmengen erzeugen können, da jedes durchgelassene Paket einen Eintrag im Log generiert. Es kann vorkommen, das große FTP oder HTTP Übertragungen das System langsamer machen. Weiterhin wird für jedes der betroffenen Pakete die Latenzzeit erhöht, da von Seiten des Kernels mehr Arbeit zum Weiterleiten des Paketes erforderlich ist. Da alle Daten auf die Platte ausgeschrieben werden wird syslogd auch mehr Prozessorzeit beanspruchen und es kann leicht passieren, daß die Partition, die /var/log enthält voll läuft. Sie sollten Ihre Firewall aus /etc/rc.conf.local oder /etc/rc.conf aktivieren. Die entsprechende Manual-Seite zeigt Ihnen, welche Einstellungen Sie vornehmen müssen und zeigt einige vorgegebene Firewall-Konfigurationen. Wenn Sie keine der Vorgaben verwenden, können Sie Ihre Regelkette mit ipfw list in eine Datei ausgeben und diese Datei in /etc/rc.conf angeben. Wenn sie weder /etc/rc.conf.local oder /etc/rc.conf benutzen, um Ihre Firewall zu aktivieren, stellen Sie bitte sicher, daß die Firewall aktiviert ist, bevor die IP-Interfaces konfiguriert werden. Als nächstes müssen Sie festlegen, was Ihre Firewall machen soll. Das wird sehr stark davon abhängen welche Zugriffe Sie von außen auf Ihr Netzwerk erlauben wollen und welche Zugriffe von innen nach außen erlaubt sein sollen. Einige gebräuchliche Regeln sind: Blockieren Sie jeden einkommenden Zugriff auf Ports unter 1024 für TCP. Dort befinden sich die meisten der sicherheitsrelevanten Dienste wie finger, SMTP (Post) und telnet. Blockieren Sie jeden einkommenden UDP-Verkehr. Es gibt wenige nützliche UDP-Dienste und die, die nützlich sind, stellen meist eine Bedrohung der Sicherheit dar (z.B. die RPC- und NFS-Protokolle von Sun). Dies bringt allerdings auch Nachteile mit sich. Da UDP ein verbindungsloses Protokoll ist, verbieten Sie auch die Antworten auf ausgehende UDP-Pakete, wenn Sie eingehende UDP-Verbindungen blockieren. Dies kann zum Beispiel Probleme für Anwender des internen Netzwerks hervorrufen, wenn diese einen externen Archie-Server (prospero) verwenden. Wenn Sie den Zugriff auf Archie erlauben wollen, müssen Sie Pakete von den Ports 191 und 1525 zu jedem internen UDP-Port durch Ihre Firewall lassen. Ein anderer Dienst, den Sie vielleicht erlauben wollen, ist ntp, der vom Port 123 ausgeht. Verbieten Sie Verkehr von außen zum Port 6000. Der Port 6000 wird für den Zugriff auf X-Server genutzt und kann eine Bedrohung der Sicherheit darstellen, insbesondere wenn die Anwender gewohnt sind xhost + zu benutzen. Tatsächlich kann X einen Bereich von Ports verwenden, der bei 6000 anfängt. Die Obergrenze ist durch die Zahl der Displays, die auf einer Maschine laufen, gegeben. Laut RFC 1700 (Assigned Numbers) hat der höchst mögliche Port die Nummer 6063. Überprüfen Sie, welche Ports von internen Servern (z.B. SQL-Servern) benutzt werden. Da diese normalerweise aus dem oben angesprochenen Bereich von 1-1024 fallen, ist es wahrscheinlich gut, diese Ports ebenfalls zu blockieren. Eine Checkliste zum Aufbau einer Firewall ist vom CERT unter http://www.cert.org/tech_tips/packet_filtering.html erhältlich. Wie oben schon gesagt, können wir Ihnen nur Richtlinien geben. Sie müssen selbst entscheiden, welche Regeln Sie auf Ihrer Firewall einsetzen wollen. Wir übernehmen keine Verantwortung dafür, daß jemand in Ihr Netzwerk eindringt, auch wenn Sie die obigen Ratschläge befolgt haben. IPFW Overhead und Optimierungen Viele Leute wollen wissen, wieviel zusätzliche Last IPFW auf einem System erzeugt. Hauptsächlich hängt dies von der Art der Regelkette und der Geschwindigkeit des Prozessors ab. Für die meisten Anwendungen mit einer kleinen Regelkette auf einem Ethernet ist der Aufwand vernachlässigbar klein. Wenn Sie genaue Zahlen brauchen, lesen Sie bitte weiter. Die folgenden Messungen wurden auf einem 486-66 mit 2.2.5-STABLE durchgeführt. Obwohl sich IPFW in späteren FreeBSD Versionen leicht geändert hat, läuft es doch mit vergleichbarer Geschwindigkeit. Zur Durchführung der Messungen wurde in IPFW die verbrauchte Zeit in der Routine ip_fw_chk gemessen. Die Ergebnisse wurden alle 1000 Pakete auf der Konsole ausgegeben. Zwei Regelsätze mit je 1000 Regeln wurden getestet. Der erste Regelsatz sollte den schlimmsten Fall durch wiederholte Anwendung der folgenden Regel demonstrieren: &prompt.root; ipfw add deny tcp from any to any 55555 Da ein Großteil der Routine, die die Pakete überprüft, durchlaufen werden muß, bevor entschieden werden kann, ob das Paket wegen der Portnummer nicht auf die Regel paßt, wird mit dieser Regel der schlimmste Fall gut simuliert. Nach 999 Wiederholungen dieser Regel folgte die Regel allow ip from any to any. Der zweite Regelsatz wurde so entworfen, daß die Überprüfung der Regel schnell abgeschlossen werden kann: &prompt.root; ipfw add deny ip from 1.2.3.4 to 1.2.3.4 Die Regel kann aufgrund einer nicht passenden IP-Adresse sehr schnell verlassen werden. Nach 999 Wiederholungen dieser Regel folgte wie im ersten Fall die Regel allow ip from any to any. Im ersten Fall betrug der zusätzliche Aufwand 2,703 ms pro Paket also ungefähr 2,7 µs pro Regel. Damit könnten maximal ungefähr 370 Pakete pro Sekunde verarbeitet werden. Mit einem 10 Mbps Ethernet und Paketen, die ungefähr 1500 Bytes groß sind, entspricht dies einer Ausnutzung von 55% der zur Verfügung stehenden Bandbreite. Im letzten Fall wurde jedes Paket in 1,172 ms abgearbeitet, was ungefähr 1,2 µs pro Regel entspricht. In diesem Fall könnten maximal 853 Pakete pro Sekunde verarbeitet werden, was die Bandbreite eines 10 Mbps Ethernet vollständig ausnutzt. Die große Anzahl und die Beschaffenheit der Regeln in den Beispielen entsprechen nicht der Wirklichkeit. Die Regeln dienten nur der Messung der Geschwindigkeit. Wenn Sie eine effiziente Regelkette aufbauen wollen, sollten Sie die folgenden Ratschläge berücksichtigen: Setzen Sie eine established Regel so früh wie möglich in die Regelkette, um den Großteil des TCP Verkehrs abzudecken. Vor dieser Regel sollten Sie keine allow tcp stehen haben. Plazieren Sie häufig benutzte Regeln vor selten benutzten Regeln, ohne dabei den Sinn der Regelkette zu ändern. Welche Regeln häufig durchlaufen werden, können Sie den Paketzählern mit ipfw -a l entnehmen. OpenSSL security OpenSSL OpenSSL Das OpenSSL-Toolkit ist seit FreeBSD 4.0 Teil des Basissystems. OpenSSL stellt eine universale Kryptographie Bibliothek sowie die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur Verfügung. Einer der Algorithmen, namentlich IDEA, in OpenSSL ist durch Patente in den USA und anderswo geschützt und daher nicht frei verfügbar. IDEA ist Teil des Quellcodes von OpenSSL wird aber in der Voreinstellung nicht kompiliert. Wenn Sie den Algorithmus benutzen wollen und die Lizenzbedingungen erfüllen, können Sie MAKE_IDEA in /etc/make.conf aktivieren und das System mit make world neu bauen. Der RSA-Algorithmus ist heute in den USA und anderen Ländern frei verfügbar. Früher wurde er ebenfalls durch ein Patent geschützt. OpenSSL Installation Installation vom Quellcode OpenSSL ist Teil der src-crypto und src-secure CVSup-Kollektionen. Mehr Informationen über die Erhältlichkeit und das Aktualisieren des FreeBSD Quellcodes erhalten Sie im Abschnitt Beschaffung von FreeBSD. Yoshinobu Inoue Beigetragen von IPsec IPsec Sicherheit IPsec Abschließende Zeichen Am Ende der Beispiele in diesem und anderen Abschnitten werden Sie oft ein ^D sehen. Das bedeutet, daß Sie die Control-Taste zusammen mit der Taste D drücken sollen. Eine weiterere häufig genutzte Kombination ist ^C. Hier drücken Sie die Taste Control zusammen mit der C-Taste. HOWTOs, die die Implementation von IPSec in FreeBSD beschreiben, finden Sie unter und . IPSec stellt eine sichere Kommunikation auf IP- und Socket-Ebene zur Verfügung. Der folgende Abschnitt zeigt wie Sie IPSec benutzen. Weitere Einzelheiten können Sie dem Entwickler Handbuch entnehmen. Die aktuelle Version von IPSec unterstützt den Transport-Modus sowie den Tunnel-Modus, wobei der Tunnel-Modus einige Beschränkungen besitzt. Unter http://www.kame.net/newsletter/ finden Sie weitere Beispiele. Um IPSec benutzen zu können, müssen Sie folgende Optionen in Ihren Kernel kompiliert haben: options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/IPSEC) Transport-Modus mit IPv4 Um zwischen zwei Rechnern, im folgenden Beispiel HOST A (10.2.3.4) und HOST B (10.6.7.8) sicher zu kommunizieren, müssen wir zuerst eine Sicherheitsassoziation einrichten. Das folgende Beispiel benutzt den alten AH (Authentication Header) von HOST A zu HOST B. Für die Kommunikation von HOST B zu HOST A wird der neue AH mit dem neuen ESP (Encapsulating Security Payload) kombiniert. Zu den Verfahren AH, neuer AH, ESP und neuem ESP müssen nun Algorithmen ausgewählt werden. Die zur Verfügung stehenden Algorithmen werden in &man.setkey.8; erläutert. Wir entschieden uns für die Kombinationen MD5 für AH, new-HMAC-SHA1 für neuen AH und new-DES-expIV mit 8 Byte IV für den neuen ESP. Die Schlüssellänge hängt stark vom gewählten Algorithmus ab. Für MD5 beträgt sie 16 Bytes, für new-HMAC-SHA1 20 Bytes und 8 Bytes für new-DES-expIV. Wie wählten jeweils die Schlüssel MYSECRETMYSECRET, KAMEKAMEKAMEKAMEKAME und PASSWORD. Als nächstes müssen wir jedem Protokoll einen SPI (Security Parameter Index) zuweisen. Beachten Sie bitte, daß wir 3 SPIs benötigen, da drei Header erzeugt werden (einer für die Kommunikation von HOST A zu HOST B und zwei für die Kommunikation von HOST B zu HOST A). Beachten Sie weiterhin, daß die SPIs größer oder gleich 256 sein müssen. Im folgenden Beispiel haben wir uns für 1000, 2000 und 3000 entschieden. (1) HOST A ------> HOST B (1)PROTO=AH ALG=MD5(RFC1826) KEY=MYSECRETMYSECRET SPI=1000 (2.1) HOST A <------ HOST B <------ (2.2) (2.1) PROTO=AH ALG=new-HMAC-SHA1(new AH) KEY=KAMEKAMEKAMEKAMEKAME SPI=2000 (2.2) PROTO=ESP ALG=new-DES-expIV(new ESP) IV length = 8 KEY=PASSWORD SPI=3000 Um die Sicherheitsassoziation einzurichten, führen Sie &man.setkey.8; auf HOST A und HOST B aus: &prompt.root; setkey -c add 10.2.3.4 10.6.7.8 ah-old 1000 -m transport -A keyed-md5 "MYSECRETMYSECRET" ; add 10.6.7.8 10.2.3.4 ah 2000 -m transport -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME" ; add 10.6.7.8 10.2.3.4 esp 3000 -m transport -E des-cbc "PASSWORD" ; ^D Bevor Sie die Kommunikation mit IPSec nutzen können, müssen Sie noch eine Sicherheits-Policy auf beiden Rechnern einrichten: Auf Host A: &prompt.root; setkey -c spdadd 10.2.3.4 10.6.7.8 any -P out ipsec ah/transport/10.2.3.4-10.6.7.8/require ; ^D Auf Host B: &prompt.root; setkey -c spdadd 10.6.7.8 10.2.3.4 any -P out ipsec esp/transport/10.6.7.8-10.2.3.4/require ; spdadd 10.6.7.8 10.2.3.4 any -P out ipsec ah/transport/10.6.7.8-10.2.3.4/require ; ^D HOST A --------------------------------------> HOST E 10.2.3.4 10.6.7.8 | | ========== old AH keyed-md5 ==========> <========= new AH hmac-sha1 =========== <========= new ESP des-cbc ============ Transport-Modus mit IPv6 Das folgende Beispiel zeigt die Nutzung von IPSec mit IPv6. Das folgende Beispiel richtet den ESP Transport-Modus für TCP Verbindungen zwischen HOST B Port 110 und HOST A ein. ============ ESP ============ | | Host-A Host-B fec0::10 -------------------- fec0::11 Der Algorithmus zum Verschlüsseln ist blowfish-cbc, der zugehörige Schlüssel ist kamekame. Für die Authentifizierung wird hmac-sha1 mit dem Schlüssel this is the test key verwendet. Auf HOST A geben Sie die folgenden Befehle ein: &prompt.root; setkey -c <<EOF spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec esp/transport/fec0::10-fec0::11/use ; spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec esp/transport/fec0::11-fec0::10/use ; add fec0::10 fec0::11 esp 0x10001 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; add fec0::11 fec0::10 esp 0x10002 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; EOF Entsprechend auf HOST B: &prompt.root; setkey -c <<EOF spdadd fec0::11[110] fec0::10[any] tcp -P out ipsec esp/transport/fec0::11-fec0::10/use ; spdadd fec0::10[any] fec0::11[110] tcp -P in ipsec esp/transport/fec0::10-fec0::11/use ; add fec0::10 fec0::11 esp 0x10001 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; add fec0::11 fec0::10 esp 0x10002 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; EOF Beachten Sie bitte die Richtung der erstellen Security Policy. Tunnel-Modus mit IPv4 Das folgende Beispiel baut einen Tunnel zwischen zwei Gateways auf. Als Protokoll wird der alte AH Tunnel-Modus (RFC 1826) verwendet. Zur Authentifizierung wird keyed-md5 mit dem Schlüssel this is the test verwendet. ======= AH ======= | | Network-A Gateway-A Gateway-B Network-B 10.0.1.0/24 ---- 172.16.0.1 ----- 172.16.0.2 ---- 10.0.2.0/24 Der Gateway A wird wie folgt konfiguriert: &prompt.root; setkey -c <<EOF spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec ah/tunnel/172.16.0.1-172.16.0.2/require ; spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec ah/tunnel/172.16.0.2-172.16.0.1/require ; add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any -A keyed-md5 "this is the test" ; add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any -A keyed-md5 "this is the test" ; EOF Wenn wie oben die Portnummer weggelassen wird, wird [any] verwendet. Mit -m wird der Modus der Sicherheitsassoziation angegeben. -m any gilt für den Transport- sowie den Tunnel-Modus. Auf Gateway B geben Sie folgendes ein: &prompt.root; setkey -c <<EOF spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec ah/tunnel/172.16.0.2-172.16.0.1/require ; spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec ah/tunnel/172.16.0.1-172.16.0.2/require ; add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any -A keyed-md5 "this is the test" ; add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any -A keyed-md5 "this is the test" ; EOF Tunnel-Modus mit IPv6 Transport- und Tunnel-Modus zwischen zwei Gateways Zwischen Gateway A und Gateway B soll der AH Transport-Modus und der ESP Tunnel-Modus eingerichtet werden. In diesem Fall wird zuerst der ESP-Tunnel eingerichtet, danach folgt das Einrichten des AH Transport-Modus. ========== AH ========= | ======= ESP ===== | | | | | Network-A Gateway-A Gateway-B Network-B fec0:0:0:1::/64 --- fec0:0:0:1::1 ---- fec0:0:0:2::1 --- fec0:0:0:2::/64 Für ESP wird 3des-cbc zur Verschlüsselung und hmac-sha1 zur Authentifizierung verwendet. Bei AH wird zur Authentifizierung hmac-md5 benutzt. Auf Gateway A sieht die Konfiguration wie folgt aus: &prompt.root; setkey -c <<EOF spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ; spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ; add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001 -m tunnel -E 3des-cbc "kamekame12341234kame1234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:1::1 fec0:0:0:2::1 ah 0x10001 -m transport -A hmac-md5 "this is the test" ; add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10001 -m tunnel -E 3des-cbc "kamekame12341234kame1234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001 -m transport -A hmac-md5 "this is the test" ; EOF Im folgenden werden zwei Sicherheitsassoziationen mit unterschiedlichen Endpunkten erstellt. Zwischen Host A und Gateway A soll ein ESP-Tunnel eingerichtet werden. Zur Verschlüsselung wird cast128-cbc und zur Authentifizierung wird hmac-sha1 verwendet. Zusätzlich wird zwischen Host A und Host B der ESP Transport-Modus eingerichtet. Zur Verschlüsselung wird rc5-cbc verwendet. Die Authentifizierung verwendet hmac-md5. ================== ESP ================= | ======= ESP ======= | | | | | Host-A Gateway-A Host-B fec0:0:0:1::1 ---- fec0:0:0:2::1 ---- fec0:0:0:2::2 Host A wird wie folgt konfiguriert: &prompt.root; setkey -c <<EOF spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ; spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec esp/transport/fec0:0:0:2::2-fec0:0:0:l::1/use esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ; add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001 -m transport -E cast128-cbc "12341234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10002 -E rc5-cbc "kamekame" -A hmac-md5 "this is the test" ; add fec0:0:0:2::2 fec0:0:0:1::1 esp 0x10003 -m transport -E cast128-cbc "12341234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004 -E rc5-cbc "kamekame" -A hmac-md5 "this is the test" ; EOF Chern Lee Beigetragen von OpenSSH OpenSSH Sicherheit OpenSSH Secure Shell stellt Werkzeuge bereit, um sicher auf entfernte Maschinen zuzugreifen. Die Kommandos rlogin, rsh, rcp und telnet können durch ssh ersetzt werden. Zusätzlich können andere TCP/IP-Verbindungen sicher durch ssh weitergeleitet (getunnelt) werden. Mit ssh werden alle Verbindungen verschlüsselt, dadurch wird verhindert, daß die Verbindung zum Beispiel abgehört oder übernommen (Hijacking) werden kann. OpenSSH wird vom OpenBSD Projekt gepflegt und basiert auf SSH v1.2.12 mit allen aktuellen Fixen und Aktualisierungen. OpenSSH ist mit den SSH Protokollen der Versionen 1 und 2 kompatibel. Seit FreeBSD 4.0 ist die OpenSSH Teil des Basissystems. Vorteile von OpenSSH Mit &man.telnet.1; oder &man.rlogin.1; werden Daten in einer unverschlüsselten Form über das Netzwerk gesendet. Daher besteht die Gefahr, das Benutzer/Paßwort Kombinationen oder alle Daten an beliebiger Stelle zwischen dem Client und dem Server abgehört werden. Mit OpenSSH stehen eine Reihe von Authentifizierungs- und Verschlüsselungsmethoden zur Verfügung, um das zu verhindern. Aktivieren von sshd OpenSSH Aktivieren Stellen Sie sicher, daß /etc/rc.conf die folgende Zeile enthält: sshd_enable="YES" Der ssh Dæmon wird damit bei dem nächsten Neustart des Systems geladen. Alternativ können Sie den Dæmon auch händisch starten. SSH Client OpenSSH Client &man.ssh.1; arbeitet ähnlich wie &man.rlogin.1;: - &prompt.root ssh user@example.com + &prompt.root; ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: ******* Der Anmeldevorgang wird danach, wie von rlogin oder telnet gewohnt, weiterlaufen. SSH speichert einen Fingerabdruck des Serverschlüssels. Die Aufforderung, yes einzugeben, erscheint nur bei der ersten Verbindung zu einem Server. Weitere Verbindungen zu dem Server werden gegen den gespeicherten Fingerabdruck des Schlüssels geprüft und der Client gibt eine Warnung aus, wenn sich der empfangene Fingerabdruck von dem gespeicherten unterscheidet. Die Fingerabdrücke der Version 1 werden in ~/.ssh/known_hosts, die der Version 2 in ~/.ssh/known_hosts2 gespeichert. In der Voreinstellung akzeptieren OpenSSH Server Verbindungen mit SSH v1 und SSH v2. Die Clients können sich aber das Protokoll auswählen, dabei wird das Protokoll der Version 2 als robuster und sicherer als die Vorgängerversion angesehen. Mit den Optionen oder kann die Protokollversion, die ssh verwendet, erzwungen werden. Secure Copy OpenSSH secure copy scp Mit scp lassen sich Dateien analog wie mit rcp auf entfernte Maschinen kopieren. Mit scp werden die Dateien allerdings in einer sicheren Weise übertragen. - &prompt.root scp user@example.com:/COPYRIGHT COPYRIGHT + &prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: COPYRIGHT 100% |*****************************| 4735 00:00 -&prompt.root +&prompt.root; Da der Fingerabdruck schon im vorigen Beispiel abgespeichert wurde, wird er bei der Verwendung von scp in diesem Beispiel überprüft. Da die Fingerabdrücke übereinstimmen, wird keine Warnung ausgegeben. Die Argumente, die scp übergeben werden, gleichen denen von cp in der Beziehung, daß die ersten Argumente die zu kopierenden Dateien sind und das letzte Argument den Bestimmungsort angibt. Da die Dateien über das Netzwerk kopiert werden, können ein oder mehrere Argumente die Form besitzen. Konfiguration OpenSSH Konfiguration Die für das ganze System gültigen Konfigurationsdateien des OpenSSH Dæmons und des Clients finden sich in dem Verzeichnis /etc/ssh. Die Client-Konfiguration befindet sich in ssh_config, die des Servers befindet sich in sshd_config. Das SSH-System läßt sich weiterhin über die Anweisungen (Vorgabe ist /usr/sbin/sshd) und in /etc/rc.conf konfigurieren. ssh-keygen Mit &man.ssh-keygen.1; können RSA-Schlüssel für einen Benutzer erzeugt werden, die anstelle von Paßwörtern verwendet werden können. - &prompt.user ssh-keygen + &prompt.user; ssh-keygen Initializing random number generator... Generating p: .++ (distance 66) Generating q: ..............................++ (distance 498) Computing the keys... Key generation complete. Enter file in which to save the key (/home/user/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/user/.ssh/identity. ... &man.ssh-keygen.1; erzeugt einen öffentlichen und einen privaten Schlüssel für die Authentifizierung. Der private Schlüssel wird in ~/.ssh/identity, der öffentliche Schlüssel in ~/.ssh/identity.pub gespeichert. Damit die RSA-Schlüssel zur Authentifizierung verwendet werden können, muß der öffentliche Schlüssel in der Datei ~/.ssh/authorized_keys auf der entfernten Maschine abgelegt werden. Damit werden Verbindungen zu der entfernten Maschine über den RSA-Mechanismus anstelle von Paßwörtern authentifiziert. Wenn bei der Erstellung der Schlüssel mit &man.ssh-keygen.1; ein Paßwort angegeben wurde, wird der Benutzer bei jeder Anmeldung zur Eingabe des Paßworts aufgefordert. Zum gleichen Zweck kann ein DSA-Schlüssel zur Verwendung mit SSH v2 erstellt werden. Dazu rufen Sie das Kommando ssh-keygen -d oder ssh-keygen -t dsa mit FreeBSD &os.current; auf. Sie erzeugen damit ein DSA-Schlüsselpaar, das nur in SSH v2 Verbindungen genutzt wird. Der öffentliche Schlüssel wird in ~/.ssh/id_dsa.pub, der private Schlüssel in ~/.ssh/id_dsa gespeichert. Die öffentlichen DSA-Schlüssel werden in ~/.ssh/authorized_keys2 auf der entfernten Maschine abgelegt. Mit &man.ssh-agent.1; und &man.ssh-add.1; können Sie mehrere durch Paßwörter geschützte private Schlüssel verwalten. SSH Tunnel OpenSSH Tunnel Mit OpenSSH ist es möglich, einen Tunnel zu erstellen, in dem ein anderes Protokoll verschlüsselt übertragen wird. Das folgende Kommando erzeugt einen Tunnel für telnet: &prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com &prompt.user; Dabei wurden die folgenden Option von ssh verwendet: Zwingt ssh die Version 2 des Protokolls zu benutzen (Benutzen Sie das nicht mit älteren ssh-Servern). Zeigt an, daß ein Tunnel erstellt werden soll. Ohne diese Option würde ssh eine normale Sitzung öffnen. Zwingt ssh im Hintergrund zu laufen. Ein lokaler Tunnel wird in der Form localport:remotehost:remoteport angegeben. Die Verbindung wird dabei von dem lokalen Port localport auf einen entfernten Rechner weitergeleitet. Gibt den entfernten SSH server an. Ein SSH-Tunnel erzeugt ein Socket auf localhost und dem angegebenen Port. Jede Verbindung, die auf dem angegebenen Socket aufgemacht wird, wird dann auf den spezifizierten entfernten Rechner und Port weitergeleitet. Im Beispiel wird der Port 5023 auf die entfernte Maschine und dort auf localhost Port 23 weitergeleitet. Da der Port 23 für Telnet reserviert ist, erzeugt das eine sichere Telnet Verbindung durch einen SSH-Tunnel. Diese Vorgehensweise kann genutzt werden, um jedes unsichere TCP-Protokoll wie SMTP, POP3, FTP, usw. weiterzuleiten. Mit SHH einen sicheren Tunnel für SMTP erstellen&prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** &prompt.user; telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP Zusammen mit &man.ssh-keygen.1; und zusätzlichen Benutzer-Accounts können Sie leicht benutzbare SSH-Tunnel aufbauen. Anstelle von Paßwörtern können Sie Schlüssel benutzen und jeder Tunnel kann unter einem eigenen Benutzer laufen. Beispiel für SSH-Tunnel Sicherer Zugriff auf einen POP3-Server Nehmen wir an, an Ihrer Arbeitsstelle gibt es einen SSH-Server, der Verbindungen von außen akzeptiert. Auf dem Netzwerk Ihrer Arbeitsstelle soll sich zudem noch ein Mail-Server befinden, der POP3 spricht. Das Netzwerk oder die Verbindung von Ihrem Haus zu Ihrer Arbeitsstelle ist unsicher und daher müssen Sie Ihre e-mail über eine gesicherte Verbindung abholen können. Die Lösung zu diesem Problem besteht darin, eine SSH-Verbindung von Ihrem Haus zu dem SSH-Server an Ihrer Arbeitsstelle aufzubauen, und von dort weiter zum Mail-Server zu tunneln. &prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ****** Wenn Sie den Tunnel eingerichtet haben, konfigurieren Sie Ihren Mail-Client so, daß er POP3 Anfragen zu localhost Port 2110 sendet. Die Verbindung wird dann sicher zu mail.example.com weitergeleitet. Umgehen einer strengen Firewall Einige Netzwerkadministratoren stellen sehr drakonische Firewall-Regeln auf, die nicht nur einkommende Verbindungen filtern, sondern auch ausgehende. Es kann sein, daß Sie externe Maschinen nur über die Ports 22 und 80 (SSH und Web) erreichen. Sie wollen auf einen Dienst, der vielleicht nichts mit Ihrer Arbeit zu tun hat, wie einen Ogg Vorbis Musik-Server, zugreifen. Wenn der Ogg Vorbis Server nicht auf den Ports 22 oder 80 läuft, können Sie aber nicht auf ihn zugreifen. Die Lösung hier ist es, eine SSH-Verbindung zu einer Maschine außerhalb der Firewall aufzumachen und durch diese zum Ogg Vorbis Server zu tunneln. &prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled.myserver.com user@unfirewalled.myserver.com's password: ******* Konfigurieren Sie Ihren Client so, daß er localhost und Port 8888 benutzt. Die Verbindung wird dann zu music.example.com Port 8000 weitergeleitet und Sie haben die Firewall erfolgreich umgangen. Weiterführende Informationen: OpenSSH &man.ssh.1; &man.scp.1; &man.ssh-keygen.1; &man.ssh-agent.1; &man.ssh-add.1; &man.sshd.8; &man.sftp-server.8;