2 Instanzen von Apache - geht das, wenn ja - wie?

Mario Lorenz ml-tlug at vdazone.org
Do Dez 10 00:28:18 CET 2009


Am 07. Dec 2009, um 00:02:27 schrieb Hans-Dietrich Kirmse:
> Hallo Mario,
> 
> Danke auch für diese Antwort. Etwas weiter bin ja schon, aber der 2.
> Apache läuft leider noch nicht.


.. und ich bin mal zwei Tage nicht da und auf der Liste geht eine Diskussion los
wie das ganze letzte Jahr nicht :)

> Es ist bei uns so: das Webinterface für die Admin-Scripte laufen unter
> der UID von www-data. über sudo bekommt www-data das Recht, diese
> auszuführen (in vielen bzw. den meisten Fällen root-Rechte).

Ja, das ist mir wohl bewusst :)

> Wenn die Schüler in ihren html_public-Verzeichnissen PHP-Scripte ablegen
> und diese werden aufgerufen, dann werden die natürlich vom Apache
> ausgeführt unter der UID von www-data. Und www-data hat per Eintrag in
> der sudoers nunmal besondere Rechte, um z.B. die Scripte zur User- und
> Rechnerverwaltung auszuführen.

Ja. Wenn die Scripte unter der UID von www-data laufen. Das tun sie, wenn
Du mit mod_p* arbeitest. Wahrscheinlich kannst Du die Leute auf ihr eigenes
Home-Verzeichnis per php.ini irgendwie einsperren, aber offensichtlich

> Es ist ja nicht so, dass man die PHP-Scripte nicht auf das betreffende
> Homeverzeichnis einschränken kann. Nur ob man da alles richtig macht ???

willst Du Dich nicht drauf verlassen...

Damit bleibt Dir, andere User-IDs zu verwenden.

also, nimm den einen apache (und vergiss zusätzliche instanzen, selbstcompilieren
etc, das macht Dir in der Wartung nur Arbeit hinterher...).

- Richte einen VHOST ein.
  schalte dort mod_php ab. (php_engine off oder so ähnlich)

- Schalte Suexec ein, mittels der Direktive SuexecUserGroup  admuser admgrp
  (admuser und admgrp seien neu definiert User + Gruppen)

- Schalte für das Admin-Verzeichnis CGI ein. Zum Beispiel über eine ScriptAlias-Direktive,
  oder über Option ExecCGI und Dateiendung .cgi für alle Scripte.
  Die Scripte müssen ausführbare Programme sein (mit #!/usr/bin/php als erste Zeile falls PHP,
  kann aber auch was anderes sein) und admuser/admgrp gehören

- Versuche die Scripte auszuführen. Fehlermeldungen von suexec werden protokolliert und sagen Dir
  was noch falsch ist. Suexec ist - weil sicherheitsrelevant- sehr pingelig.

- Die Scripte sollten lt. SuexecUserGroup als admuser/admgrp laufen. Du kannst jetzt mittels
  sudo admuser (und nicht www-data) die Root-Rechte einräumen
  Da die auf diesem vhost die User keine Scripte laufen lassen können, können sie kein admuser und damit
  kein root werden.
  Die Scripte der Schüler laufen weiter unter anderem vhost, unter von mir aus modphp, als www-data,
  oder auch ohne modphp auch mit suexec und anderer ID... 
> >In Summe bedeutet es, dass
> >man umfangreichere PHP-Apps (CMSe etc.) nicht vernünftig betreiben kann.
> >Schüler-Programmierübungen kann man lässig mit CGI und suexec abfangen.
> 
> abfangen ja, aber didaktisch ist das m.E. nicht wirklich sinnvoll.
> 

Jain. CGI heist, grob gesagt: Anstelle einer Datei, die vom Webserver gelesen und ausgeliefert wird,
wird ein Programm gestartet, welches auf stdout das erzeugt, was der Webbrowser für eine Datei hält.
Ich weiss nicht, ob man dieses Konzept vermitteln kann, aber wenn ja, ist das ein sehr leistungsfähiges
Konzept. Es ist m.e. sogar sauberer als das was meistens mit php gemacht wird, wo HTML geschrieben wird
und dann irgendwo dazwischen Programmcode embedded wird.


> habe ich gemacht. (unter /etc/apache2b )
> 
> >
> >Die zweite Apache-Instanz startest Du einfach manuell mit httpd -d 
> ><zweites serverroot>
> >bzw -f <zweites configfile>
> 
> meldet er mir, dass er den Befehl "httpd" nicht kennt.
> ein Aufruf von "apache2 -f /etc/apache2b"  liefert mir:
> apache2: bad user name ${APACHE_RUN_USER}

which apache2
Bzw, schau mal mit dpgk -L apache2 nach wie der indiander bei debian
genau heisst. Ich glaub jedoch er liegt in /usr/sbin. Und es muss
apache2 -d /etc/apache2b heissen, -f ist für -f /etc/apache2b/httpd.conf
(oder so ähnlich)

 
> ich hatte eine Systemgruppe www-data2 und einen Systemuser www-data2
> angelegt und das in /etc/apache2b/envvars  eingetragen.
> Auch ein User/Gruppe  www-xxx:www-xxx  änderte daran nichts.
> 
> wie könnte ich einen guten Namen vergeben? Oder ist diese Fehlermeldung
> nur falsch bzw. nichtssagend?

Kannst Du mit su www-data2
in diesen Usercontext wechseln ?

Gruesse,

Mario
-- 
Mario Lorenz                            Internet:    <ml at vdazone.org>
                                        Ham Radio:   DL5MLO at DB0ERF.#THR.DEU.EU
* This virus needs Windows95 to run!