Elwedridsch schrieb
Trotzdem würde ich gerne wissen ob das so sein soll und warum.
Die Shell interpretiert ja das Skript. Von daher kann ich mir die Umgehung des execute-Rechts irgendwie, wenn auch nicht vollständig, erklären.
Aber sollte die Shell dann so etwas nicht abprüfen?
Nein, das ist OK so. Sobald ein User eine Shell benutzen darf/kann, dann kann er auch (Shell)-Befehle absetzen - im Rahmen seiner Systemberechtigungen. Ob er diese Befehle dann händisch eingibt oder aus einer "gesammelten Liste"(<- Shellskript) ausliest, das ist dann unerheblich. Und explizites Leserecht räumst du diesem User ja ein.
Nichts hindert einen User Text aus dem Skript (oder sogar binär über einen Hexeditor) Code einfach "abzuschreiben" und in einem eigenen Skript zu verwenden - dann sind die vorher gesetzten (Ausführ-)Berechtigungen hinfällig.
Etwas anderes wäre ein 0700, dann würde der Weg über die implizite Nutzung der Shell nicht funktionieren.
Elwedridsch schrieb
Und kann das nicht unter entsprechend günstigen Umständen eine Hintertür ins System darstellen?
Wenn die "günstigen Umstände" gleichbedeutend mit "totalem Versagen" des Admins einhergehen - dann ja ;-) Stichwort z.B. sudo bzw. Unkenntnis über Systemgruppenrechte und Devices.
Ansonsten nein. Mit dd z.B. die Festplatten überschreiben können - das darf normalerweise kein User. Egal ob das in einem Skript drinsteht oder per Hand eingegeben wird.
Im konkreten Fall würde ich sagen/raten:
a) Wenn der/die User nichts über den Aufbau des Skriptes (Was wird Wie getan) wissen dürften, dann darf man es nicht lesbar machen.
b) Viele Shellskripte und Programme prüfen eingangs die User-ID/Gruppe des Benutzers. Einmal als Sicherheitsmerkmal, aber auch um nicht unnötiges "Rauschen" zu produzieren wenn Befehle ausgeführt werden sollen z.B. per Skript, die aber dann mangels Systemrechte fehlschlagen.
In deinem Fall könntest du das am Anfang so regeln, wenn z.B. nur root das Skript - so wie es ist - ausführen soll:
Wenn: $UID ungleich 0
Dann: meldung "Du musst root sein... Go away!" und exit