dedlfix: Warum verlangen manche Software (Forum, Shop) 777'er Rechte

Beitrag lesen

Hi!

Der Apache führt sie aber nur dann aus, wenn sie im CGI-Verzeichnis liegen. Das ist ein normales Verzeichnis, das mit Konfigurationsdirektiven (ScriptAlias) für die CGI-Ausführung freigegeben ist.
Das stimmt leider nur teilweise.
[andere Möglichkeiten]

Die setzen aber voraus, dass die irgendwer wissentlich oder versehentlich aktiviert. Ein (PHP-)Hoster wird das sicherlich nicht für die DocumentRoots der Kunden gemacht haben - davon war ich für diesen Einwand ausgegangen. Wenn man davon ausgeht, können die x-Bits im Apachen nicht wirken. Wer sie allerdings für irgendwelche Zwecke aktiviert hat, sollte sich fragen, ob das wirklich im DocumentRoot notwendig muss.

HTML und ein Shell-Script zu mischen sollte durchaus möglich sein, die große Kunst ist eigentlich nur, den HTML-Shell-Hybriden dann auch noch valide zu halten.

HTML-Validität wäre mir als Angreifer egal, Hauptsache ich bekomme die Syntax so hin, dass sie meinen Wunsch ausführt. Du meintest vermutlich syntaktische Validität.

Ungerade Ziffern (das x-Bit) haben bei Dateien nichts verloren!
Für Programme:
711 (-rwx--x--x) für Programme, deren Innenleben nicht jeder sehen soll. Haken: Das funktioniert nicht für Scripte, denn sobald der Script-Interpreter läuft, muß er das Programm lesen können. Für Scripte also zähneknirschend 755.

Wenn der Script-Interpreter PHP heißt, dann braucht der kein x-Bit.

Doch, wenn PHP vom Betriebssystem via Shebang als Interpreter für ein Script geladen werden soll, muß das x-Bit gesetzt sein, sonst bekommt man errno=EPERM (Permission denied), unabhängig davon, ob es um PHP oder irgendeine andere interpretierte Sprache geht.

Da das das haupsächliche Einsatzgebiet von PHP-Scripten ist, ging ich an dieser Stelle von vom Apachen/Webserver gestarteten Scripten aus. Dafür sind keine x-Bits notwendig.

Der feine Unterschied ist, dass bei vielen Hostern und vielen Linux-Distributionen PHP gleich automatisch per mod_php in den Apachen eingebunden ist, während andere Sprachen via CGI oder seltener FastCGI angebunden werden. Deswegen scheint auf den ersten Blick PHP ein Sonderfall zu sein. Ist es aber nicht.

Auch vom Apachen via (F)CGI gestartete PHP-Scripte benötigen kein x-Bit, da der Apache das Script nicht via Shell sondern den PHP-Interpreter startet, der das Script als Parameter übergeben bekommt und dann nur noch das r-Bit braucht.

Ausnahme sind Scripts, die mit einer Shebang-Zeile beginnen und direkt über ihren Dateinamen aufgerufen werden. In der Shebang-Zeile steht dann der Pfad zum zu verwendenden Script-Interpreter.
Nö, keine Ausnahme, Regelfall. Siehe oben.

Mit Ausnahme meinte ich die anderen PHP-Einsatzfälle, also CLI-Aufrufe.

Klar, es schadet nicht, wenn ein Programm nicht ausführbar ist. chmod a-x /sbin/init && reboot, danach sprechen wir uns wieder ... ;-)

Wenn die Funktionalität benötigt wird, dann muss selbstverfreilich das x-Bit vorhanden sein. Das heißt jedoch nicht, dass alle Programme immer und zwingend das x-Bit brauchen, wenn sie nur mal eben irgendwo rumliegen sollen. Sowas soll ja auch gelegentlich vorkommen, dass man einen Teil des Dateisystems als Ablage und nicht als Ort zum Starten von Programmen verwendet. Beispielsweise, wenn man ein Programm uneingepackt (warum auch immer) zum Download anbietet, ist es nicht nötig, dass es aus dem Download-Verzeichnis heraus gestartet werden können muss.

Lo!