Halihallo Danny
Leider brechen einige Scripte mit Fehlermeldungen ab (Rechte-Problem), die über eine Terminal-Emu (WinXP-Client <> Netzwerk <> Unix-Maschine) einwandfrei funktionieren.
Nun, die Scripte laufen unter dem User, unter dem Apache läuft. Laut
deiner Aussage ist das der User "apache".
Das Problem: Erforderlich ist User XY, der Webserver startet die Shell aber automatisch immer mit "apache", der wohl in der http.conf eingetragen ist.
Richtig.
Ich finde einfach keine Möglichkeit diesen User-Namen dynamisch zu wechseln, z.B. durch HTTP-Auth.
Nun, HTTP-Auth hat mit der Berechtigung auf dem lokalen System nichts
zu tun.
Die Unix-Befehle login und su funktionieren scheinbar nicht ohne Terminal, die Einspeisung des Passwortes durch Umleitung klappt jedenfalls nicht. :(
Bei login:
Philipp:~# man login
login is used to establish a new session with the system.
It is normally invoked automatically by responding to the
login: prompt on the user's terminal. login may be spe
cial to the shell and may not be invoked as a sub-process.
login darf nicht als sub-prozess gestartet werden => keine
Möglichkeit login in einem von Apache gestarteten Prozess zu starten.
Bei su:
Philipp:~# man su
su is used to become another user during a login session.
Invoked without a username, su defaults to becoming the
super user.
Hm. "during a login session". Das ist ein Apache Sub-Prozess
natürlich nicht...
Das sind nur Passagen aus der Doku, die mir aufgefallen sind. Ich
habe damit jedoch keine Erfahrung und weiss eigentlich nicht genau
wovon ich rede :-)
Es gäbe da noch etwas: setuid() im Perlprogramm selber. Lies hierzu
einmal 'man setuid'. Aber sei bei derartigen Angelegenheiten sorgsam
und vorsichtig, denn damit öffnest du eine empfindliche Schwachstelle
in deinem System. Nicht nur Schwachstelle, sondern ein potenziell
offener Zugriff mit root-privileges, was katastrophal ist! - Falls es
denn überhaupt ausgeführbar ist...
In Perl kann man System-Kommandos, bzw. Scripte mit Parametern ausführen und anschließend deren Ausgabe abholen aber nicht interaktiv eingreifen...
Doch. Inter Process Communication als Stichwort:
perldoc IPC::Open2
perldoc IPC::Open3
perldoc perlipc
oder open mit je einer Pipe für Input und Output (IPC::Open2).
Viele Grüsse
Philipp
The only program that runs perfectly every time, is a virus.