Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 11 Shellskriptprogrammierung mit der bash
Pfeil 11.1 Das erste Shellskript
Pfeil 11.2 Kommentare
Pfeil 11.3 Rechnen in der Shell
Pfeil 11.3.1 Integer-Variablen
Pfeil 11.3.2 expr
Pfeil 11.3.3 Den bc nutzen
Pfeil 11.4 Arrays
Pfeil 11.5 Bedingte Anweisungen
Pfeil 11.5.1 if
Pfeil 11.5.2 case
Pfeil 11.6 Schleifen
Pfeil 11.6.1 while
Pfeil 11.6.2 until
Pfeil 11.6.3 for
Pfeil 11.6.4 seq – Schleifen mit Aufzählungen
Pfeil 11.7 Menüs mit select
Pfeil 11.8 break
Pfeil 11.9 Funktionen
Pfeil 11.9.1 Eine simple Funktion
Pfeil 11.9.2 Funktionsparameter
Pfeil 11.9.3 Rückgabewerte
Pfeil 11.10 Temporäre Dateien
Pfeil 11.11 Syslog-Meldungen via Shell
Pfeil 11.12 Pausen in Shellskripte einbauen
Pfeil 11.13 Zusammenfassung
Pfeil 11.14 Aufgaben

Rheinwerk Computing - Zum Seitenanfang

11.10 Temporäre Dateien

Manchmal benötigt man für ein Skript eine oder mehrere temporäre Datei(en). Zur Erzeugung einer solchen Datei gibt es verschiedene Verfahren.

Verzeichnis wählen

Zunächst einmal geht es um den Ort, an dem eine solche Datei erstellt werden soll. Es könnte das aktuelle Arbeitsverzeichnis, das Verzeichnis /tmp oder auch jedes andere Verzeichnis sein. Es empfiehlt sich jedoch, für temporäre Dateien auch das spezielle Verzeichnis für temporäre Dateien (also /tmp) zu verwenden.

Dateinamen wählen

Es ist nicht sonderlich schlau, eine Datei wie /tmp/a und /tmp/b als temporäre Datei zu verwenden. Zum einen sind diese Dateien vom Namen her recht einfallslos, was zur Folge haben kann, dass auch andere Programme oder Skripte denselben Dateinamen verwenden. [Fn. Solche Programme gehören im Übrigen in den Mülleimer.] Zum anderen ergibt sich ein Sicherheitsproblem: Ein Angreifer könnte eine Race Condition erschaffen und ausnutzen. Sagen wir, dass Ihr Shellskript auf die folgende Weise in die Datei /tmp/a schreibt:

Listing 11.53 Sehr verwundbarer Code

echo $1 > /tmp/a

Besitzt der Angreifer auch nur einen Hauch von Hacking-Know-how, so sieht er sofort, dass dieser Code, wenn er vom Superuser ausgeführt wird, praktisch alle Türen auf einem Linux-System öffnet. Erzeugt der Angreifer nun einfach vorher einen Link von /tmp/a auf /etc/passwd, so würde der Superuser beim Aufruf des Skripts (vielleicht ohne es zu merken) die Passwortdatei überschreiben.

Wäre der Angreifer zudem in der Lage, den übergebenen Parameter $1 zu manipulieren, könnte er den neuen Inhalt der Passwortdatei selbst gestalten. [Fn. Mehr zum Thema »Sichere Programmierung« erfahren Sie in unserem Buch »Praxisbuch Netzwerk-Sicherheit«, 2. Auflage 2007.]

Prozess-ID

Nun könnte man meinen, dass der einfachste Weg, hier Abhilfe zu schaffen, der sei, dass man an dem Dateinamen die Prozess-ID des Shellskripts anhängt, den Skriptcode also folgendermaßen modifiziert:

Listing 11.54 Immer noch verwundbarer Code

echo $1 > /tmp/a.$$

Dies ist aber immer noch relativ unsicher, da sich Prozess-IDs unter Linux inkrementieren und daher sehr einfach voraussagen lassen. [Fn. Es sei denn, man verwendet Kernel-Patches wie GRSecurity, die randomisierte Prozess-IDs ermöglichen.]

mktemp

Eine wesentlich bessere Lösung stellt das Programm mktemp dar, das beim Aufruf eine Datei im Verzeichnis /tmp erstellt und ihren Namen ausgibt. Diese Datei hat eine recht lange und vor allen Dingen zufällige Endung, die sich nur sehr schwer voraussagen lässt. Das obige Skript ließe sich also folgendermaßen wesentlich sicherer implementieren:

Listing 11.55 Bereits relativ sicherer Code

echo $1 > `mktemp`

Das Problem besteht nun darin, dass Sie keine Ahnung haben, wie die entsprechende Datei heißt. Daher muss der Dateiname gemerkt (und am besten auch gleich nach der Verwendung wieder überschrieben) werden.

Listing 11.56 Ein noch besser abgesicherter Code

TMPFILE=`mktemp`
echo $1 > $TMPFILE
...
...
# Den Dateinamen in $TMPFILE überschreiben
rm -f $TMPFILE
TMPFILE="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Jetzt müsste es dem Angreifer schon gelingen, den Dateinamen vorherzusagen, oder er müsste das Programm mktemp hacken und durch eine eigene Version ersetzen. [Fn. Dies wiederum ließe sich mit Intrusion-Detection-Systemen für Dateisysteme herausfinden. Mehr hierzu ebenfalls in unserem »Praxisbuch Netzwerk-Sicherheit«, 2. Auflage, 2007.]

Selbstverständlich ist der Inhalt der temporären Datei noch nicht unwiderruflich gelöscht, aber auch dies soll nur erwähnt werden, weil eine Lösung des Problems das eigentliche Thema (Shellskriptprogrammierung) übersteigt.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux Handbuch






 Linux Handbuch


Zum Katalog: Linux Server






 Linux Server


Zum Katalog: Raspberry Pi






 Raspberry Pi


Zum Katalog: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Katalog: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de