Lösungen zu Kapitel 3
Alias-Wirrwarr
Die Aufgabe:
Was gibt der folgende Befehl aus?
$ alias q=ls $ alias q=`q;ls' $ q ...
Listing B.1 alias
Die Lösung:
Zunächst wird ein Alias namens »q« angelegt, der einem ls-Aufruf entspricht. Anschließend wird ein neuer Alias mit dem Namen »q« erzeugt, der den alten Alias »q« überschreibt. Dabei wird der Parameter »q« nicht als Alias interpretiert.
Die Ausgabe wäre also eine Fehlermeldung bezüglich des nicht gefundenen Programms »q« und die Ausgabe der Dateien des Verzeichnisses durch ls.
$ q bash: q: command not found 1.jpg 101103.cpp
Listing B.2 Die Ausgabe
Für angehende Experten
Die Aufgabe:
Was passiert, nachdem die folgenden Befehle in der bash ausgeführt wurden?
$ uname | tee /tmp/mylog Linux $ !?na > x $ alias displayX=`cat x` $ displayX ...
Listing B.3 Spaß mit der Bash
Die Lösung:
Nachdem uname ausgeführt wurde und durch die Ausgabe des Programms auch in der Datei /tmp/mylog gespeichert wurde, wird versucht, durch !?na den Befehl erneut auszuführen, der als Letztes den String »na« enthielt. Dies wäre natürlich der obige Befehl. Funktionieren wird dies allerdings nicht, denn die Ausgabeumlenkung kann in diesem Fall nicht angewandt werden, weshalb nichts in die Datei x geschrieben wird und auch die nachfolgenden Befehle keine Wirkung haben werden. Lässt man die Ausgabeumlenkung weg, funktioniert der Befehl.
Würde der Befehl trotz Ausgabeumlenkung funktionieren (dieses Feature kommt vielleicht in zukünftigen bash-Versionen noch hinzu), würde der Name des Betriebssystems in der Datei x stehen, und der Alias displayX würde den Befehl »Linux« aufrufen, da durch Kommandosubstitution die Ausgabe des cat-Aufrufs der Wert wäre, den displayX erhalten würde. Das würde natürlich nicht funktionieren, da »Linux« kein gültiger Befehl ist.
Wie geht das?
Die Frage:
Wie können Programme wie chsh (zum Ändern der Login-Shell) oder passwd (zum Ändern des Passworts) die Passwortdateien modifizieren, obwohl sie von nicht-priviliegierten Benutzern ausgeführt werden können?
Die Lösung:
Bei diesen Programmen wird eine ganz übliche Technik verwendet um auch Benutzern ohne root-Rechten die Möglichkeit zu geben, die Programme so auszuführen, als ob man im Besitz von root-Rechten wäre. Die Programme werden dazu mit dem suid-Bit versehen, was das Ausführen unter den Rechten des Eigentümers der Programmdatei ermöglicht.
$ /bin/ls -lh /usr/bin/chsh -rwsr-xr-x 1 root root 29K 2007-06-22 20:54 /usr/bin/chsh
Es gibt sogar eine ganze Menge solche Programme, die diese Zugriffsrechte benötigen. Beispielsweise könnte ping nicht mit ICMP-Sockets arbeiten, wenn es nicht die zugehörigen Rechte besäße. Weitere Programme mit solchen Zugriffsrechten sind beispielsweise passwd, sudo, traceroute, at, ping6 und su.