Frage 102-11

Welche Dateirechte muss ein Shell-Skript besitzen, damit es ausgeführt werden kann?

  1. r

  2. w

  3. x

  4. SetUID (s statt x für den Eigentümer)

LPI-Lernziel Einfache Skripte anpassen oder schreiben (105.2)

Vergegenwärtigen wir uns einmal kurz, welche Rechte es überhaupt gibt: Leserecht (»read«, kurz r), Schreibrecht (»write«, kurz w), Ausführungsrecht (»execute«, kurz x). Daneben existieren noch die Sonderrechte SUID, SGID und Sticky Bit (falls Sie sich mit der Anwendung der Rechte nicht sicher sind, ist dies eine gute Gelegenheit zur Rekapitulation!).

Wenn ein Shell-Skript nicht gelesen werden kann, kann es auch nicht ausgeführt werden. Damit muss ein Shell-Skript die Rechte r und x besitzen (Antworten 1 und 3). Wenn Sie dieses Skript auch verändern wollen, müssen Sie zusätzlich über Schreibrechte verfügen oder das Skript in Ihr HOME-Verzeichnis kopieren und dort bearbeiten; Schreibrecht (Antwort 2) ist zur reinen Ausführung aber nicht nötig.

Das SetUID-Bit auf einem Shellskript wäre eine kapitale Sicherheitslücke (warum?) und wird vom Linux-Kernel darum nicht befolgt, selbst wenn es gesetzt ist.

9 Kommentare · Kommentar hinzufügen · RSS

Teilnehmer

Peter Kluge (eingetragen) · 24. März 2010, 11:02

Wenn nur das r-Recht vergeben ist, lässt sich das Shellscript mit dem Aufruf:

bash skript_name.sh

ausführen.

Richtig wäre hier nur r.

x ist nur nötig falls man das Shellscript wie ein Kommando aufrufen möchte.

gruß

Peter

Ausführen vs. Verarbeiten

Michael Mattiszik (eingetragen) · 19. Juli 2011, 12:36

Das mag jetzt zwar Wortklauberei sein, aber IMHO führt die Befehlszeile

bash skript_name.sh

das Programm bash und nicht das Skript aus. Das Skript ist in diesem Beispiel ein Argument, welches übergeben wird.

Alternativ kann ich ja auch mittels

cat skript_name.sh

die Befehele Stück für Stück manuell eingeben - aber habe ich damit das Skript auch ausgeführt?

Ich denke prüfungesrelevant richtig ist hier R-X für die Skripte im direkten Gegensatz zu Binaries, die auch bei --X ausgeführt werden können.

Bug oder Feature?

dutCh (Gast) · 3. August 2012, 12:53

591 0 ~$ cp /bin/uname unamex
`/bin/uname' -> `unamex'

592 0 ~$ chmod 100 unamex
mode of `unamex' changed to 0100 (--x------)

593 0 ~$ ./unamex
Linux

594 0 ~$ chmod 455 unamex
mode of `unamex' changed to 0455 (r--r-xr-x)

595 0 ~$ ./unamex
bash: ./unamex: Permission denied

596 0 ~$ chmod 6455 unamex
mode of `unamex' changed to 6455 (r-Sr-sr-x)

597 0 ~$ ./unamex
bash: ./unamex: Permission denied

Bug oder Feature?

Anselm Lingnau (eingetragen) · 3. August 2012, 14:04

Hm. Wo genau ist da jetzt der Bug (bzw. das Feature)?

Bug oder Feature?

dutCh (Gast) · 3. August 2012, 15:12

No exec bei & ~100 !??

Hätte mich bei der Prüfung voll erwischt. Es sei denn man hat es schon mal gehört...

Bug oder Feature?

Anselm Lingnau (eingetragen) · 4. August 2012, 13:23

Ist aber so. Maschinenprogramme brauchen nur das x-Recht, um ausführbar zu sein – siehe hierzu z. B. execve(2) (man muss etwas zwischen den Zeilen lesen).

Großen praktischen Nährwert hat die Sache nicht. Man könnte zum Beispiel ein Maschinenprogramm haben, das einen Datenbankserver anspricht, und es für die Welt ausführbar, aber nicht lesbar machen. In dem Fall wäre es für neugierige Naturen schwieriger, mit etwas wie »strings« das Datenbankserver-Kennwort herauszufinden. Ob ich mich persönlich als Programmautor allerdings auf sowas verlassen würde (Stichwort »Security by Obscurity«), ist aber eine ganz andere Frage.

Bug oder Feature?

dutCh (Gast) · 4. August 2012, 23:10

Verdammt, wenn selbst der Admin hier den Punkt nicht sieht muss ich es nach cool in bash und C nochmal in profanem deutsch schreiben...

Das bin-files ohne read aber mit exec ausgeführt werden können finde ich überraschend, aber okay.

Das dies aber ohne u+x trotz exec für meine group und other nicht geht ist eine Falle!

Ich denke die allermeisten würden da reintappen, beim Erstkontakt.

Bug oder Feature?

Anselm Lingnau (eingetragen) · 5. August 2012, 11:43

Dass Du eine Datei mit den Rechten 0011 als Eigentümer nicht ausführen kannst, ist eine Konsequenz einer ganz anderen Regel bei Zugriffsrechten, nämlich dass immer die »am besten passenden« Rechte beachtet werden. Wenn Du der Eigentümer der Datei bist, dann gelten für Dich die Eigentümer-Rechte (»nicht ausführbar«), auch wenn Du gleichzeitig in der Gruppe bist, der die Datei zugeordnet ist (»ausführbar«) bzw. irgendwie auch Bestandteil »aller Benutzer«.

Über die Rechtetripel denkt man besser wie:

  • Erstes Tripel: Eigentümer der Datei
  • Zweites Tripel: Mitglieder der Dateigruppe – außer ggf. dem Eigentümer (!)
  • Drittes Tripel: Rest der Welt (also weder Eigentümer noch Dateigruppenmitglieder)

Mit »ausführbar vs. nicht ausführbar« hat das speziell nichts zu tun, denn es gilt genauso für »lesbar vs. nicht lesbar« bzw. »schreibbar vs. nicht schreibbar«.

Für den Eigentümer der Datei ist das kein praktisches Problem, da er sich bei Bedarf sowieso immer alle Rechte holen kann, die er haben möchte (im Gegensatz zu anderen Betriebssystemen unterstützt Linux kein separates Recht »Rechte setzen«, das dürfen nur der Eigentümer und root). Allerdings kann man dieses Feature ausnutzen, um alle Mitglieder einer Gruppe von der Benutzung einer Datei auszuschließen, d.h. eine Datei mit den Rechten

-rw----r-- 1  hugo  tabu  ...

kann von Mitgliedern der Gruppe tabu nicht gelesen werden, von Nichtmitgliedern (einschließlich dem Eigentümer hugo, selbst wenn er Mitglied von tabu ist) jedoch schon.

Bug oder Feature?

dutCh (Gast) · 5. August 2012, 13:27

Wow, klasse Ausführung! Jetzt haben Sie den Punkt, ich auch und sicher auch alle anderen.

Und wenn man's so sieht auch richtig logisch, also keine weitere Ausnahme die man sich merken muss.

Wichtig

LPI-Logo

Die LPI Academy ist keine offizielle Webseite des LPI!

Sponsor

Linup-Front-Logo

Die LPI Academy wird für die Community unterstützt von der Linup Front GmbH

A Django Site

Diese Seite

Version: 0 (Anselm)
22.8.2009 12:04:17

Benutzer

Nicht angemeldet

Kommentare

RSS