Monitoring ohne Umwege
Das /proc-Dateisystem
Es darf geschrieben werden
Das letzte Ziel unserer Reise durch das /proc-Verzeichnis führt uns in das Unterverzeichnis /sys, in dem Angaben zu den Kernel-Parametern verwaltet werden, von denen Sie einige sogar verändern können. Manche Dateien beinhalten lediglich Informationen, wie /proc/sys/kernel/version. Interessanter für administrative Aufgaben sind die zur Laufzeit veränderbaren Parameter. Sollten Sie eins der folgenden Beispiele nicht nachvollziehen können, da Sie die entsprechende Datei nicht auf Ihrem System finden, ist das kein Grund zur Besorgnis. Der Füllstand des Unterverzeichnisses /sys hängt von der Konfiguration des verwendeten Kernels ab. Einen Überblick über alle dort gespeicherten Parameter verschaffen Sie sich mit
sysctl -a | less
Im ersten Beispiel finden Sie die Lösung zu dem am Anfang des Artikels angesprochenen Port-Forwarding-Problem. Wenn Sie Ihren Rechner als Router konfigurieren möchten und überzeugt sind, alle Einstellungen richtig gemacht zu haben, es aber trotzdem nicht funktioniert, kann das daran liegen, dass Ihr Kernel zwar grundsätzlich Port Forwarding beherrscht, aber gar nicht weiß, dass er das für Sie leisten soll. Kontrollieren können Sie das mittels
[andi@gemini andi]$ cat /proc/sys/net/ipv4/ip_forward 0 [andi@gemini andi]$
Im Unterverzeichnis /net von /proc/sys sind, wie der Name schon vermuten lässt, Netzwerk-spezifische Variablen gespeichert, die glücklicherweise aussagekräftige Namen tragen. Liest man eine dieser Variablen aus, erhält man entweder 0 oder 1 als Rückgabewert, wobei 0 für falsch ("false") und 1 für wahr ("true") steht. Der Rückgabewert 0 bestätigt die Vermutung, dass der Kernel noch gar nichts von seiner neuen Aufgabe weiß. Indem Sie die 0 durch eine 1 ersetzen, ändern Sie das. Dazu führen Sie als Benutzer root folgenden Befehl aus:
echo 1 > /proc/sys/net/ipv4/ip_forward
Die Zahl 1 wird mittels > nach /proc/sys/net/ipv4/ip_forward umgeleitet. Ein erneutes Auslesen der Variable zeigt die Änderung:
[andi@gemini andi]$ cat /proc/sys/net/ipv4/ip_forward 1
Manche Distributoren, wie z. B. Mandrake, setzen diese Variable aus Sicherheitsgründen standardmäßig auf Null. Kommt dazu ein fehlerhaftes Programm zur Netzwerkkonfiguration (etwa durch einen Tippfehler des Programmierers), kommen Sie dem Problem nur durch Kenntnis des Speicherortes dieser Variablen auf die Spur.
Nicht nur bei Netzwerkproblemen ist das /proc/sys-Verzeichnis hilfreich. Wenn Sie einen aktuellen, aber noch fehlerhaften Treiber für Ihre Hardware benötigen, der gelegentlich zu einem Einfrieren des Systems führt, ist es sinnvoll die magic-SysRq-Key-Funktion des Kernels zu aktivieren, bis eine fehlerfreie Version des Treibers zur Verfügung steht.
Das ist zwar keine schöne Lösung, kann Ihr Dateisystem aber vor Schäden bewahren. Aktiviert werden die magischen Tasten als Superuser root mittels
echo 1 > /proc/sys/kernel/sysrq
Auf immer und ewig
Es ist zwar praktisch, Kernel-Parameter zur Laufzeit verändern zu können, aber da es sich bei /proc um ein virtuelles Dateisystem handelt, werden Ihre Änderungen nicht dauerhaft gespeichert und gehen bei einem Neustart des Systems verloren. Zur Lösung des Problems gibt es zwei Möglichkeiten. Schreiben Sie die benötigten Befehle in eine Startdatei Ihrer Distribution. Der Speicherort variiert allerdings von Anbieter zu Anbieter. Für SuSE heißt die Datei beispielsweise boot.local und liegt unter /etc/init.d/. Distributionsunabhängig ändern Sie die Default-Werte in der Datei /etc/sysctl.conf, zu der auch eine Manpage existiert. Als Beispiel für den Aufbau der Datei können Sie Listing 2 verwenden.
Listing 2
# Forwarding deaktivieren net.ipv4.ip_forward = 0 # SysRq-Key aktivieren kernel.sysrq=1 #Schutz vor IP-Spoofing einschalten net.ipv4.conf.all.rp_filter=1
Bei den mit # beginnenden Zeilen handelt es sich um Kommentare. Eventuell finden Sie in der Datei sysctl.conf schon einige Einstellungen Ihres Distributors. Da es sich dabei um Kernel-Parameter handelt, ist die Dokumentation der Kernel Sourcen die erste Anlaufstelle, um sich über die Bedeutung der dort getroffenen Einstellungen zu informieren.
Glossar
Port Forwarding
Um alle Rechner eines lokalen Netzes mit dem Internet zu verbinden, muss die IP-Forwarding-Funktion des Kernels aktiviert werden. Der entsprechend konfigurierte Computer stellt einen Port bereit und nimmt die angeforderten Daten an, überlässt die Verarbeitung aber einem anderen Rechner.
PIDs
Die Process Identification ID ist eine eindeutige Nummer, welche innerhalb des laufenden Systems ausschließlich diesen einen Prozess eindeutig referenziert.
Pipe
Eine Datenübertragungs-Einrichtung zwischen mehreren Prozessen; ein Prozess liefert die Daten, welche dann von dem in der Pipe folgenden Prozess weiterverarbeitet werden.
chroot
Mit dem Befehl chroot ("change root") werden Programme in einem anderen Wurzelverzeichnis als / ausgeführt. Häufig wird chroot benutzt, um Dienste in eine isolierte Umgebung einzusperren.
tr
Der Befehl tr liest Zeichenketten von der Standard-Eingabe und tauscht einzelne Zeichen aus oder löscht sie. Binärzeichen werden dabei durch ihren oktalen Wert angegeben. Der Aufruf erfolgt in der Form: tr OPTION Wert1 Wert2, wobei Wert1 durch Wert2 ersetzt wird.
Alias
Eingebaute Funktion der Shell, mit der Sie Abkürzungen definieren können. Eingabe von alias aterm='aterm -tr -trsb' ruft bei Eingabe von aterm das Kommando inklusive der angegebenen Optionen auf. Dauerhaft definiert man einen alias-Befehl in den Startdateien der verwendeten Shell, z. B. in der .bashrc mit dem Eintrag alias aterm='aterm -tr -trsb'. Damit die Änderungen wirksam werden, muss die Datei neu eingelesen werden, z. B. mit source .bashrc.
magic-SysRq-Key
Funktion des Kernels, die ermöglicht, auch ein eingefrorenes System relativ sicher herunterzufahren. Die Bezeichnung leitet sich von den notwendigen Tastaturkombinationen ab. Ist die Option aktiviert, kann man z. B. das Kommando sync ([Alt-SysRq-s]) aufrufen, Partitionen im nur-Lese-Modus remounten ([Alt-SysRq-u]) oder den Rechner neu starten ([Alt-SysRq-b]). Ausführliche Dokumentation dazu finden Sie in der Datei sysrq.txt, die Bestandteil der Dokumentation des Kernel-Quellcodes ist.
Infos
[1] Andreas Grytz: "Informationen sammeln", LinuxUser 02/2001, S. 40, http://www.linux-user.de/ausgabe/2001/02/040-sysinfo/system_info.html



