[lug-ld] S) Antwort muss (für mich) sein
Christian Boltz
lug-ld at cboltz.de
Sa Okt 15 14:29:02 CEST 2022
Hallo Heinz, hallo zusammen,
ich halte mich bei ein paar Punkten mal an Deine Betreffzeile ;-)
Am Samstag, 15. Oktober 2022, 11:49:01 CEST schrieb Pahle Heinz:
[...]
> Linuxler, bitte mitschreiben: Windows guckt, wenn keine Pfadangabe bei
> der App erfolgt, erst im wdir und wendet sich bei Misserfolg an PATH.
> Übrigens: Ich habe an keiner Stelle relative Pfade thematisiert. Die
> verwende ich z.B. in meiner Entwicklungsumgebung (genauer in den C++
> Sourcen).
> Wie kommst Du (und auch andere) drauf, vor der Verwendung des current
> dir in PATH zu warnen? Einen größeren Blödsinn so etwas zu tun, kenne
> ich nicht und ich habe das noch nirgends gesehen.
OK, dann gebe ich Dir mal ein konkretes Beispiel:
Gegeben sei ein Rechner mit mehreren Benutzern, einer davon bösartig.
Die dürfen alle nach /tmp/ schreiben, weil da halt jeder Schreibrechte
hat.
Dieser bösartige Nutzer schreibt jetzt ein kleines Shellscript /tmp/ls
mit Inhalt rm -rf / an und führt chmod +x /tmp/ls aus.
Danach kommt der Admin und will sich mal ansehen, was in /tmp/ so an
Dateien rumliegt. Also ruft er cd /tmp und dann ls auf.
Kannst Du Dir jetzt vorstellen, warum es ein Sicherheitsrisiko ist, wenn
das aktuelle Verzeichnis in $PATH ist, und noch dazu ganz vorn in $PATH?
(Dürfte unter Windows übrigens ähnlich sein, nur dass es dann halt eine
Batchdatei names C:\temp\dir.bat mit Inhalt format c: [1] wird.)
Statt Scripten gehen natürlich auch Binaries, und was dieses Script oder
Programm macht, kann je nach Angriffsziel unterschiedlich sein.
> @Alle:
> Nebenbei würde mich total interessieren, ob Linux zwecks Ausführung
> immer den Dateiheader inspiziert.
Ja.
AFAIK erfolgt das im Kernel, und der kümmert sich dann darum, dass das
Programm auf die "richtige Art" gestartet wird - also Binaries direkt
und Scripte über den jeweiligen Interpreter.
Ausnahme: Wenn Du ein Script mit bash meinscript aufrufst, startest
Du damit explizit bash, auch wenn in meinscript.sh #!/usr/bin/perl
stehen sollte. (Wenig überraschend wird die bash bei einem Perl-Script
ziemlich schnell entnervt aufgeben ;-)
In diesem Kontext könnte https://de.wikipedia.org/wiki/Binfmt_misc
interessant sein. Damit kannst Du dem Kernel neue Binär-Programmformate
beibringen. Wenn Du unbedingt willst, könntest Du sogar Windows-
Programme direkt unter Linux ausführbar machen ;-)
> negativ, das Gegenbeispiel: Bei Ubuntu wollte ich nachsehen, was
> Anführungszeichen bei echo bewirken. Aber: Seitenlang werden alle
> Gags von echo erklärt, die ich aktuell gar nicht wissen wollte, aber
> damit total zugemüllt wurde. Genau das machte ich eben beruflich
> nicht; siehe vorher.
Ich könnte jetzt ganz spitzfindig sagen, dass die Anführungszeichen gar
nichts mit echo zu tun haben, sondern mit der Shell (z. B. bash),
von dem es aufgerufen wird ;-) - aber das hilft Dir nicht wirklich
weiter. Immerhin erklärt es, warum das nicht in der Dokumentation von
echo erklärt wird.
Aber es steht tatsächlich in man bash im Abschnitt QUOTING ;-)
Bevor ich lang erkläre: wechsle mal in ein Verzeichnis, in dem ein paar
Dateien liegen, und vergleiche die Ausgabe von
echo $HOME * foo bar
echo "$HOME * foo bar"
echo '$HOME * foo bar'
und als Bonus
echo \$HOME \* foo bar
echo \\$HOME \\* foo bar
Die Varianten mit \ darfst Du gern auch zusätzlich in " oder ' packen.
Und Du darfst auch gern echo mit ls ersetzen.
> Nebenbei: Ich hasse die schlauen Foren wie die Pest. So Sätze, wie
> "Jetzt bist Du schon n Jahre dabei und weißt das immer noch nicht.."
> lassen bei mir die Fußnägel hochrollen. Solche "Dummsabbler" wissen
> bezüglich Weltwissen messbar nichts und spielen sich auf.
Ich halte es da lieber wie in der nicht-zufälligen Signatur ;-)
> Ob Scripte nach all dem Rumgemache überhaupt noch für mich interessant
> sind, das bezweifle ich.
Kommt wie immer auf den Usecase an ;-)
Generell kann man (fast) alles mit Shellscripten machen - bei einigen
(vielen?) Anwendungsfällen gibt es aber weniger schmerzhafte
Alternativen.
Meine Faustregel ist:
Wenn es mit einem Shellscript mit 20 Zeilen geht und ich mir beim
Schreiben nicht die Finger verknote, ist es OK.
Wenn das Script deutlich größer und/oder komplizierter wird, sollte man
über Alternativen nachdenken (in meinem Fall oft Python, kann aber auch
Perl, C usw. sein).
> Danke auch an Christan, habe verspätet Deine eMail gekriegt. Aber, Du
> hast richtig vermutet: Bei meiner ursprünglichen Absicht muss viel
> mehr passieren als Verzeichniswechsel.
Verrätst Du auch was? Das würde es leichter machen, eine passende Lösung
vorzuschlagen ;-)
Gruß
Christian Boltz
[1] Wie ich neulich gelernt habe, verweigert format die Arbeit, wenn die
Festplatte gerade benutzt wird. Ich ignoriere dieses Detail mal ;-)
(Im Gegenzug: rm -rf / fragt in aktuellen Versionen auch nach,
ob man das wirklich will.)
--
Hm, mich hat Frust in meiner Linuxanfangszeit doch eher beflügelt,
ich hab mir gedacht, dem Schrotthaufen Code zeig ich mal, wer die
Hosen anhat. Wobei, ich zappel wohl hier immer noch eher in einem
Strampelanzug herum ;) [Thorsten von Plotho-Kettner in suse-linux]
Mehr Informationen über die Mailingliste lug-ld