[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