Alexander (HH): chmod auf fernem Server

Beitrag lesen

Moin Moin!

http://www.elcappuccino.ch/cgi/chmod/chmod.pl
Soll jemand auf den Link klicken? OK, da steht ein paar Mal "Operation not permitted", mit anderen Worten: Du hast kein Recht, an den Mode-Bits etwas zu ändern, vermutlich weil die Dateien dem CGI-User nicht gehören.
Vergleiche mal UID und GID der Dateien (Index 4 und 5 des stat-Rückgabewerts) mit UID, EUID, GID und EGID des Scripts ($<, $>, $( und $)).

Resultat:

CWD is: /home/elcappuccino.ch/cgi/chmod
$< = 30, $> = 30, $( = 65534 65534, $) = 65534 65534
exists /home/elcappuccino.ch/cgi/chmod
can read /home/elcappuccino.ch/cgi/chmod
can execute /home/elcappuccino.ch/cgi/chmod
Permissions: 0705 UID: 3900 GID: 100

[...]

Noch eindeutiger geht es nicht: Die Dateien gehören nicht dem User, unter dem das Script läuft, und auch die Gruppen passen nicht. Damit läßt dich kein unixoides System irgendetwas an den Attributen oder Inhalten drehen.

Wenn das ein Shared Hosting Server ist, solltest Du mal ein ernstes Wort mit dem Provider wechseln, denn offensichtlich läuft der Webserver ohne suexec oder Equivalent. Damit kann jeder Kunde mit eigenen CGIs überall da herumpfuschen, wo der Webserver-User (UID=30, GID=65534) Schreibrechte hat -- auch in Verzeichnissen anderer User. Zum Beispiel, weil ein Kunden-CGI irgendwo Schreibrechte braucht und der Kunde stumpf chmod 777 gemacht hat. Sollte der Provider nicht reagieren, solltest Du über einen anderen Provider nachdenken, der seine Server sicher konfiguriert hat.

Wenn das ein Managed Server ist, egal ob virtuell oder echte Hardware, müßtest Du root-Rechte haben (oder Dir verschaffen können) und das Problem selbst beheben können.

Wenn das ein Root-Server ist, egal ob virtuell oder echte HW, hast Du root-Rechte und kannst das Problem selbst beheben.

Ein vorübergehender Lösungsansatz wäre ein kleiner Wrapper (in C), der per setuid/setgid das CGI unter Deinem Account laufen läßt -- nicht schön, aber brauchbar. Siehe http://perldoc.perl.org/perlsec.html#Security-Bugs. Wichtig hierbei ist, dass der Script-Name fest eincompiliert ist und eben NICHT als Parameter oder per Environment übergeben wird, denn sonst könnte jeder Kunde jedes Programm unter Deinem Account laufen lassen!

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".