Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Apache, Lighttpd, nginx, Cherokee
djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-27 12:14

Mahlzeit ;).

Grundsatzidee (die Frage die sich dadurch stellt ist denke ich klar):

6 Indianer-Instanzen
1 PHP-Version

PHP wird in jeder Instanz als Modul geladen - sieht irgendjemand eine Möglichkeit PHP nicht für jede Instanz seperat zu kompilieren, sondern für alle Instanzen die gleiche Version zu verwenden? Das würde auch einiges an Update-Arbeit beseitigen. Alle 6 Instanzen sind in einer Umgebung, also sind auch alle LIB-Pfade etc zu 100% gleich. Lediglich die Pfade zu den einzelnen Apache-Binaries (sowohl httpd als auch apachectl) unterscheiden sich.

Folgendes ist gegeben:

- Apache 1.3
- PHP5
- Alle PHP- und Apache- Instanzen werden natürlich per Hand kompiliert (fertige Pakete kommen nicht in Frage)

CGI, FCGI, SuPHP und Co kommen nicht in Frage und sind auch nicht erforderlich. Umstieg auf lighttpd fällt auch ins Wasser. Ansätze, Ideen, Vorschläge?

Danke für die Aufmerksamkeit
Last edited by djcrackman on 2006-10-27 15:23, edited 1 time in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by Joe User » 2006-10-27 12:52

Sofern alle Apache gleich kompiliert werden und mod_php in allen Instanzen gleich konfiguriert sein soll, reicht das einmalige kompilieren von mod_php und das Laden von mod_php in allen Instanzen aus. Ob man dies letztendlich auch will (Security der PHP-Sessions, etc...), steht auf einem anderem Blatt...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-27 13:34

Welches Risiko siehst bei den Sessions? Die Session-Handler sollten doch im RAM der jeweiligen Apache-Childs liegen - oder liege ich da falsch?

PS: Apache gleich kompiliert, ja, jedoch jede Instanz in ihrem Verzeichnis.

zum Beispiel

Code: Select all

.../apache_1/
.../apache_2/
.../apache_3/
Du verstehst was ich meine?

Update #1:

Hab mich jetzt einfach mal dran gemacht und das in folgender Konstellation gebaut:

Apache 1.3.37

Code: Select all

Compiled-in modules:
  http_core.c
  mod_log_config.c
  mod_mime.c
  mod_status.c
  mod_info.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_asis.c
  mod_alias.c
  mod_rewrite.c
  mod_access.c
  mod_auth.c
  mod_proxy.c
  mod_so.c
Installiert unter:

/opt/apache_1.3.37
/opt/apache_1.3.37_1
/opt/apache_1.3.37_2

PHP wie folgt gebastelt:

Code: Select all

'./configure' '--prefix=/opt/php-4.4.4' '--with-apxs=/opt/apache_1.3.37/bin/apxs' '--disable-cgi' '--disable-all'
Danach das Modul nach /opt/apache_1.3.37_1/libexec/ und /opt/apache_1.3.37_2/libexec/ kopiert und die Indianer entsprechend konfiguriert (Port 80, 81 und 82). Alle lassen sich problemlos starten, laufen ohne Fehler und die Performance ist auch nicht anders, als wenn ich jeden Indianer mit einem eigenen Modul 'füttere'.

Nun bleibt natürlich noch das Argument von Joe hier stehen: wie sieht die Geschichte sicherheitstechnisch aus?

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-28 00:04

Ich bin wieder etwas schwer von Begriff. Ich habe schon versucht die Leitung unter meinem Allerwertesten zu entfernen - hat nicht geholfen.

Du hast das Apachemodul per Hand installiert und ein Zentrales PHP angelegt. War es das? Da ist mir doch was entgangen - oder nicht? Vorallem die verschienden Apache laufen nicht in unterschiedlichen chroots?

Wenn doch, dann ist die Frage, was ist das Problem für Dich einfach vhosts anzulegen oder apache einfach mit verschiedenen Konfigurationen(als Parameter) zu starten?
Wie gesagt: ich sitze Wahrscheinlich auf der Leitung.

Die Session-Handler sollten doch im RAM der jeweiligen Apache-Childs liegen - oder liege ich da falsch?
Handler?
Das Problem ist, daß Sessions Menschenlesbare Textdateien sind(ein paar Zahlen dazwischen, die die Datentypen kennzeichnen). *Wenn* es gelingt mit so einer Session zu spielen dann kann man sich Zugang zu allen anderen Sessions verschaffen und das gleich bei allen Webapps. Da sind oft loginhints drin. Krasser ist das, wenn die Sessions in /tmp gespeichert werden( wo meistens Programme ausgeführt werden können). Da kann das nicht nur andere Sessions betreffen sondern alles, was da so rumliegt bzw kann andersherum das, was da so rumliegt als Session verwendet werden. Braucht Geschick - aber es gibt einige Exploits.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-28 09:20

Du hast richtig verstanden:

- Ich kompiliere alles selbst.
- Ich habe ein zentrales PHP-Binary erzeugt, welches ich unter /opt/php_4.x.x hinterlegt habe.
- Ich habe die Moduldatei für einen Indianer mit APXS erzeugt und diese dann bei den anderen Indianer per Hand in das libexec-Verzeichnis eingefügt.
- Ich habe seperate Indianer verwendete, da einige noch mit zusätzlichen Modulen ausgestattet werden und auch die Möglichkeit bestehen bleiben soll, dass ich eine Instanz durch eine andere Version ersetze.
- Alle Indianer sind in der selben Umgebung (ob CHROOT, Jail o.ä. lass ich derweil dahin gestellt, da es nicht relevant ist - sie haben alle die gleichen Umgebungspfade und -variablen).
- Pro vhost werden ich folgendes:
    [code] php_admin_value open_basedir /user/basedir php_admin_value user_dir /user/basedir php_admin_value upload_tmp_dir /user/basedir/tmp php_admin_value sendmail_path '/usr/sbin/sendmail_php -t -i -f usersite.xyz@tld.net' php_admin_value session.save_path /user/basedir/tmp[/code]
- PHP-Funktionen wie system(), exec() etc sind deaktiviert, der Benutzer hat keine Möglichkeiten aus seinem Heimatverzeichnis auszubrechen - sofern nicht wieder irgendwo ein PHP-Leak auftauch. Eben hier setzt meine zentrale Lösung an: ich baue mir eine neue Version, knall sie rein, tausche die Moduldateien aus, graceful an alle Indianer und weiter gehts.

Welche sicherheitstechnischen Aspekte übersehe ich?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by Joe User » 2006-10-28 11:07

Du musst letztendlich dafür sorgen, dass alle Pfadangaben der php.ini durch php_*-Directiven in den einzelnen httpd.conf auf das jeweilige /user/basedir verweisen. Sobald das der Fall ist, sollte dieses Setup auch sicherheitstechnisch einem "normalen" Setup gleichkommen...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-28 12:09

Auf Lächerlichkeiten wie safe_mode verzichte ich in meinem default Setup, jedoch haben meine User die freie Wahl, ob sie safe_mode verwenden wollen, oder nicht.

Ergo sind folgende Dinge relevant und unbedingt zu beachten (falls ich was vergessen habe, bitte laut schreien ;)):

Code: Select all

safe_mode_include_dir 
safe_mode_exec_dir
open_basedir
extension_dir
auto_prepend_file
auto_append_file
user_dir
upload_tmp_dir
session.save_path
soap.wsdl_cache_dir
Habe ich etwas vergessen?

PS @Joe User: Dinge wie Sorgfaltspflicht und Co sind mir zu 100% bewusst - und wären mir die sicherheitstechnischen Aspekte egal, dann würde ich nicht so darauf rumreiten ;).

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-29 02:02

(ob CHROOT, Jail o.ä. lass ich derweil dahin gestellt, da es nicht relevant ist - sie haben alle die gleichen Umgebungspfade und -variablen).
Das ist imho ein relevanter Part. Der Sinn einer Chroot ist, daß die Sachen getrennt sind. Da mußt Du Dir Gedanken um so was machen ... aber das merkst Du, wenn es soweit ist.

Ohne das sehe ich immer noch nicht, was der Vorteil der vielen Binaries ist, die sich abgesehen von Modulen nicht unterscheiden. Ich meine im Endeffekt machst Du ein umständliches

Code: Select all

cp apache andererapache
Andererseits: warum auch nicht? Ich muß nicht alles verstehen.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-29 22:13

@lucki2 Jein, es ist in dem Fall nicht relevant ob die Indianer in einem gemeinsamen CHROOT laufen, oder nicht. Aufgrund der Konfiguration bietet sich derzeit keine Möglichkeit mit PHP Faxen zu machen - als alter Hase und Pessimist bin ich natürlich so eingestellt, dass immer mal wieder ein neuer Leak auftauchen kann und es dann zu Problemen kommen kann - schnelle Reaktion ist dann das Um und Auf.

Wie gesagt: die einzelnen Apache-Instanzen haben sowohl ihren Sinn als auch ihren Grund. Ich kann so beispielsweise einige Sites auf eine andere Apache Version umstellen. Sollte ein Indianer abdampfen laufen die anderen Sites weiter etc.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-29 23:48

Ich akzeptiere das mal einfach so, auch wenn ich den Vorteil gegenüber anderen Lösungen noch(!) nicht sehe. Vielleich kommt ja irgendwann auch bei mir der aha-Effekt. 8)

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 06:22

Wie gesagt, das ganze ist eine Konzeptidee ;). Ich fasse mal kurz die Vorteile zusammen, die ich sehe:

- 1 Indianer sttirbt, 4 laufen weiter
- Indianer X kann mit zusätzlichen Modulen ausgestattet werden (Perl o.ä.)
- Version jedes einzelnen Indianers frei wählbar - nur ein Teil der Hosts wird umgestellt.
- Zentrale PHP-Version - nur noch einmal kompilieren erforderlich.
- Globale PHP-Einstellungen.

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by flo » 2006-10-30 07:25

Die Lösung der unterschiedlichen Apache-Instanzen habe ich auch lieben gelernt - nachdem dadurch natürlich auch die Ressourcen jedes Indianers getrennt konfigurierbar sind, wird Seite A nicht durch Performancefresser von Seite B runtergezogen - Vorteile liegen auf der Hand.

flo.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 07:45

Jaja shon recht, was ich meine ist(meinetwegen starte auch den apache ganz per Hand ändert wenig):

Code: Select all

apachectl -f /usr/apache/conf/httpd-host1.conf -k start
apachectl -f /usr/apache/conf/httpd-host2.conf -k start
apachectl -f /usr/apache/conf/httpd-host3.conf -k start
apachectl -f /usr/apache/conf/httpd-host4.conf -k start
apachectl -f /usr/apache/conf/httpd-host5.conf -k start
schaun wir mal was ich damit erreiche:
1 Indianer sttirbt, 4 laufen weiter
->na klar!
2. - Indianer X kann mit zusätzlichen Modulen ausgestattet werden (Perl o.ä.)
-> Klaro: haben verschiedene Konfigurationen
3. Version jedes einzelnen Indianers frei wählbar - nur ein Teil der Hosts wird umgestellt.
-> gut die neue Version muß dazu und der Starteintrag angepasst(aber auch bei Deiner Lösung)
4. Zentrale PHP-Version - nur noch einmal kompilieren erforderlich.
-> Klar(das macht mir andersrum eher Sorgen)
5. Globale PHP-Einstellungen
-> jupps( wie 4.)

War das alles? Einziger Vorteil von Dir ist: pidof . Soll heißen, das oben ist nur ein Ansatz, sonst Kriegst Du die nicht getrennt gestoppt und gestarted, aber das geht.

Ich brauche so was, wenn Apache unter verschiedenen Usern laufen muß.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 07:55

@flo Das mit den Child-Settings etc ist natürlich auch ein Vorteil ;).

@lucki2 Wie bereits gesagt: ich verwende Apache 1.3 und somit auch fix einkompilierte Module - ich halte nichts von nachladen. Der Nachteil deines Vorschlags: was ist wenn ich einen einzelnen Indianer zum testen auf 2.x verbiegen will? Dann kann ich mich brausen gehen, richtig ;). Meine init-Scripts erzeuge ich per Cron automatisiert respektive sind diese dynamisch - also müsste ich weder bei deiner, noch bei meiner Lösung Startcripts umbauen. Graceful's schicke ich direkt an das Binary, ohne Umweg über das Startscript.

Ergo halte ich meine Vorgehensweiße für die sauberere - ein Porschefahrer wird auch von seinem Auto überzeugt sein :P. Meinungen sind wie Nasen, eh schon wissen.

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by flo » 2006-10-30 08:02

Code: Select all

/usr/local/apache2/bin/httpd 
    -f "/usr/local/conf/proxyhosts/domain.de.conf" 
    -c "User nutzer" 
    -c "Group gruppe" 
    -c "PidFile /usr/local/conf/proxyhosts/domain.de.conf.pid" 
    -c "Listen 127.0.0.1:8095" -k start
Damit macht er die PID :-)

flo.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 08:14

was ist wenn ich einen einzelnen Indianer zum testen auf 2.x verbiegen will? Dann kann ich mich brausen gehen, richtig Wink.
falsch.
Dann ändere ich einen Eintrag in ... apache2ctrl apache2 ... und habs(das ganze können auch variablen sein )und apachectl ist recht übersichtlich.

Code: Select all

vi `which apachectl`
@floh :)

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 08:21

@lucki2 Wenn ich eine zentrale apachectl verwende, wie soll das dann gehen? Ich schicke immerhin alle 15 Minuten einen Graceful an alle Instanzen.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 10:50

Wenn ich eine zentrale apachectl verwende, wie soll das dann gehen? Ich schicke immerhin alle 15 Minuten einen Graceful an alle Instanzen.
Das war einfach mal so 5 Zeilen möglichst kurz hingeschrieben. Eine Blickrichtung, ein Ansatz. Daß das so abgeschrieben nicht funktionieren wird habe ich schon erwähnt. Floh hat da auch schon was angebracht. *Wenn* es jedoch um die Frage gehen sollte, wie graceful starten über apachectl geht:

Code: Select all

apachectl -k graceful
Andere Probleme gibts mit apachectl schon!. Die apachectl ist - wie erwähnt - aber seeehr übersichtlich: vi ist Dein Freund.
*)
$HTTPD $ARGV
ERROR=$?
esac
Das nicht als Angriff. Als Argument für Deinen Ansatz habe ich gesehen, daß Du den Apache monolytisch haben willst.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 11:11

@lucki2

1.) vi ist nicht mein Freund ;).
2.) Angriffe seh ich auch keine ;).

Wie ich einen graceful über apachectl mache ist mir durchaus bewusst (die aktuelle Lösung hat nun 2 Jahre am Buckel) - daran wird es nicht scheitern. Blind abschreiben werd ich so oder so nichts, da ich mir erst noch einen Aspekt mit den vhosts durch den Kopf gehen lassen muss.

Übrigens: apachectl -k start ist zumindest bei 1.3 Quatsch ;). Ein apachectl start reicht hier. Den -k-Parameter gibt es nur beim httpd-Binary.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 11:31

djcrackman wrote: Übrigens: apachectl -k start ist zumindest bei 1.3 Quatsch ;).
Versuch das mal mit -f parameter, dann ist das wahrscheinlich auch geklärt :-D
Wenn Du vi nicht magst - such Dir halt einen Editor aus. cat, less oder more tuts zur Not auch. Oder schau Dir den obigen Auszug an.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 11:45

Nano und Joe - NMC :P.

Übrigens: Die apachectl nimmt keine - Parameter an ;).

Code: Select all

usage: /opt/apache_1.3.37/bin/apachectl (start|stop|restart|fullstatus|status|graceful|configtest|help)

start      - start httpd
stop       - stop httpd
restart    - restart httpd if running by sending a SIGHUP or start if
             not running
fullstatus - dump a full status screen; requires lynx and mod_status enabled
status     - dump a short status screen; requires lynx and mod_status enabled
graceful   - do a graceful restart by sending a SIGUSR1 or start if not running
configtest - do a configuration syntax test
help       - this screen
Das httpd-Binary frisst da schon mehr:

Code: Select all

Usage: /opt/apache_1.3.37/bin/httpd [-D name] [-d directory] [-f file]
                                    [-C "directive"] [-c "directive"]
                                    [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T] [-F]
Options:
  -D name          : define a name for use in <IfDefine name> directives
  -d directory     : specify an alternate initial ServerRoot
  -f file          : specify an alternate ServerConfigFile
  -C "directive"   : process directive before reading config files
  -c "directive"   : process directive after  reading config files
  -v               : show version number
  -V               : show compile settings
  -h               : list available command line options (this page)
  -l               : list compiled-in modules
  -L               : list available configuration directives
  -S               : show parsed settings (currently only vhost settings)
  -t               : run syntax check for config files (with docroot check)
  -T               : run syntax check for config files (without docroot check)
  -F               : run main process in foreground, for process supervisors
Aber danke, -f war mir vorher schon bekannt. Meiner Nase ... äh ... Meinung nach, ist es funktional ident, jedoch für meinen Geschmack nicht sauber genug.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 11:49

*g* Wie gesagt vi oder ein anderer Editor ist dein Freund. Oder ... Augen nach oben Richten. Ich zeigs Dir noch mal:
*)
$HTTPD $ARGV
ERROR=$?
esac
Das Problem ist Environment.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 11:58

@lucki2 Der von der gepostete Source ist in meiner apachectl nicht enthalten.

http://files.uttx.net/stuff_download/ap ... source.txt

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by lucki2 » 2006-10-30 12:18

Alles klar - andere sehen besser aus. Haste natürlich Recht.
PS: Ich habs auch rausgefunden, die ich da habe ist eine vom apache2. Damit sind wir da auch beieinander. Dann verstehe ich das auch besser(Wobei das Prinzip sich dadurch wenig ändert).

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: Konzeptidee - Frage der Umsetzung (mehrere Indianer, 1 PHP-Instanz) (Update #1)

Post by djcrackman » 2006-10-30 13:04

Dachte mir gleich, dass du vom 2er redest (hatte ich bereits in Verwendung, allerdings ein frühes Stadium von 2.0 *augenverdreh*).

Grundsätzlich hat meine Idee also Hand und Fuß - gut. Dann muss ich noch mein zweites Problem lösen und dann gehts weiter.