Welche Dateirechte muss ein Shell-Skript besitzen, damit es ausgeführt werden kann?
r
w
x
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.
Nicht angemeldet
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:
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 Rechtenkann von Mitgliedern der Gruppe
tabunicht gelesen werden, von Nichtmitgliedern (einschließlich dem Eigentümerhugo, selbst wenn er Mitglied vontabuist) 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.