A.4 Lösungen zu Kapitel 7
Alias-Wirrwarr
Was gibt der folgende Befehl aus?
\begin{gpListing}
$ alias q=ls
$ alias q=`q;ls'
$ q
...
Antwort:
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.
Listing A.1 Die Ausgabe
$ q
bash: q: command not found
1.jpg
101103.cpp
Für angehende Experten
Was passiert, nachdem die folgenden Befehle in der bash ausgeführt wurden?
Listing A.2 Spaß mit der bash
$ uname | tee /tmp/mylog
Linux
$ !?na > x
$ alias displayX=`cat x`
$ displayX
...
Antwort:
Nachdem uname ausgeführt und durch die Ausgabe des Programms auch in der Datei /tmp/mylog gespeichert wurde, wird versucht, durch !?na den Befehl erneut auszuführen, der zuletzt den String »na« enthielt. Dies wäre natürlich der erste Befehl im Listing. Funktionieren wird die gewünschte Ausgabeumlenkung 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 hingegen die Ausgabeumlenkung weg, so 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?
Wie können Programme wie chsh (zum Ändern der Login-Shell) oder passwd (zum Ändern des Passworts) die Passwortdateien modifizieren, obwohl sie von nicht privilegierten Benutzern ausgeführt werden können?
Antwort:
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 sie root-Rechte besäßen. Die Programme werden dazu mit dem setuid-Bit versehen, was das Ausführen unter den Rechten des Eigentümers der Programmdatei ermöglicht.
Listing A.3 Die Rechtebits von /usr/bin/chsh
$ /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 solcher Programme, die diese Zugriffsrechte benötigen. Beispielsweise könnte ping nicht mit ICMP-Sockets arbeiten, wenn es nicht die entsprechenden Rechte besäße. Weitere Programme mit solchen Zugriffsrechten sind beispielsweise passwd, sudo, traceroute, at, ping6 und su.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.