Frage Follow-up: Warum sind Shebang-Dateien nicht suidable?


Folgefrage zu https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts . Es gibt eine sehr gute Antwort von Gilles. Ach, ich verstehe es nicht. nichts, was dort beschrieben wird, scheint zwischen ausführbaren Dateien und interpretierbaren Dateien zu liegen.

  • Skripte hatten eine Bedingung für den Austausch von Renndateien, aber eine Unix-Sperrung ist nicht notwendig, um dies zu beheben. Jede C-ausführbare Datei wird zuerst gelesen und dann ausgeführt. Dies könnte genauso leicht mit dem interpretierbaren Code wie mit ausführbarem Code geschehen. Die meisten (Shell-) Skripte sind nicht länger als die meisten ausführbaren C-Dateien, so dass beide zuerst geladen werden können. die Tatsache, dass frühere Implementierungen zuerst eine Zeile lesen, dann die Datei schließen und dann wieder öffnen (und somit diese Wettlaufbedingung erleiden), ist nicht intrinsisch. es war zufällig eine uralte Implementierung. ist das nicht leicht universell in allen Unix-Implementierungen fixierbar, indem man die gesamte interpretierbare Skriptdatei liest?

  • Die Laufzeit, die erforderlich ist, um eine bestimmte Funktion auszuführen, ist anfällig, aber dies gilt sowohl für den C-Code als auch für den Interpreter. Haben zB Shell- oder Python-Skripte Schwachstellen?

  • Jede ausführbare Datei (C) kann andere Shell-Programme genauso aufrufen wie eine interpretierte Sprache. Programme, die sich gegenseitig übergaben, wurden ursprünglich als Unix-Methode bezeichnet, daher sollten wir dies oft tun.

All dies ist mehr oder weniger in Gilles 'Antwort angegeben, vielleicht mit Ausnahme des expliziten "zuerst lesen, dann zweit ausführen". stattdessen beschreibt es / dev / fd / äquivalente Implementierungen.

also vermisse ich es immer noch. Was ist an sich anders? (Das einzige Sicherheitsmerkmal, das mir einfällt, ist, dass wir Noobs durch das Verbot von suid-Skripten das Schreiben erschweren irgendein setuid Skripte.)

Gab es dort ein Komitee, das seine Entscheidung für, sagen wir, ubuntu machte und erklärte, wo ich die Motivation lesen kann?

/ ia


0
2017-09-13 20:32


Ursprung




Antworten:


Sicher, es ist möglich, die Implementierung zu ändern, um sicher zu sein, aber in der Praxis erfordert es die Zusammenarbeit jedes Unix-Anbieters und eine Menge Benutzer-Umerziehung. Wenn Sie in der Lage sind, eine solche Anstrengung zu koordinieren, mehr Macht für Sie. :) Die Alternative (z. B. Festhalten mit Setuid-Wrapper-Programmen) mag unbequem sein, ist aber nicht unerträglich.

Anders gesagt, es gibt gute Gründe, warum wir immer noch nicht richtig buchstabieren können erstellen. Der Aufwand zur Behebung dieses Problems wird nicht als dem Nutzen angemessen beurteilt.


0
2017-09-13 21:57



thx, aber das entgeht mir auch (Wortspiel?). Jede Unix-Distribution kann dies tun. es muss nicht koordiniert werden. creat muss vermutlich so sein wie bei POSIX? - ivo Welch
Es muss koordiniert werden. Niemand möchte ein Skript schreiben, das für die Ausführung von setuid entworfen wurde, und stellt dann fest, dass einige Benutzer es nicht erfolgreich ausführen können, da das jeweilige Betriebssystem keine Unterstützung hinzugefügt hat. - jjlin


Es ist viel einfacher, ein Shell-Skript zu ändern als eine Binärdatei zu ändern. Außer einem Editor sind keine speziellen Werkzeuge erforderlich, und Sie können auf die Datei schreiben. Sogar sed funktioniert, aber das ist immer noch ein Stream-Editor.

Aus Sicherheitsperspektive ist es jedoch sinnvoll. Sie können ein Skript über sudo oder su als root ausführen. Sie können immer ein suid-Programm innerhalb eines Skripts ausführen ....


0
2017-09-14 00:26