[Allegro] Avanti-X: starten

Thomas Berger ThB at Gymel.com
Sa Mär 17 00:19:54 CET 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hallo Herr Fischer,

> ich kämpfe einmal wieder mit meinen Start-Programmen für den
> Avanti-X-Server.
> Soweit ich sehe, benutzt avadmin in status.php den Aufruf
> my_posix_kill($pid, 1)
> um festzustellen, ob Avanti läuft.
> Dabei kommt bei mir derzeit nichts zurück, unabhängig ob der Avanti unter
> der angegebnen Nummer läuft oder nicht.
> Deswegen meldet status.php immer nut "Server läuft nicht", insbesondere kann
> ich ihn so nicht stoppen.
> 
> Das das my_posix_kill nur ein posix_kill und dieses im wesentlichen ein kill
> ist, frage ich mich, ob es an den Eigentümerrechten des Prozesses liegt –
> kill antwortet nur root und dem Besitzer des Prozesses, soweit ich weiß.

und kill -1 ist das HUP-Signal, also ein ziemlich kraeftiges.
avanti (hier konform mit vielen anderen U**X-Daemonen) wird dadurch
veranlasst, die Konfigurationsdateien neu einzulesen.

[kill antwortet jedem, aber das Betriebssystem laesst natuerlich
nicht zu, dass ein Prozess mit Signalen eines "fremden" Benutzers
belaestigt wird]

Sind Sie sicher (ich selber habe mir avadmin nie angesehen), dass
das der Test darauf ist, ob Avanti noch lebt?


> Andererseits ist es mir auch nicht gelungen, den Besitzer des
> Avanti-Prozesses durch so etwas wie
> su wwwrun -c "/srv/avanti/avanti-2.2.9/bin/avanti -daemon"
> zu steuern.

Viele Daemonen (z.B. auch das ZTarget, nicht jedoch avanti) wechseln
sofort nach dem Start (als root) auf eine andere, ungefaehrliche
Benutzerkennung um, die in der Konfigurationsdatei hinterlegt ist.
Das ist praktisch, wenn der Daemon in den regulaeren runlevel-
Mechanismus (etc/rc.d und unterhalb) eingebunden ist, also durch
root beim Sytemstart automatisch gestartet wird. Allerdings kann
nur ein root (oder dem Zielbenutzer) gehoerender Prozess ohne
Passwortabfrage dergestalt die Identitaet wechseln.

Startscripte fuer Daemonen sind hochgradig abhaengig von der
konkreten Linux-Distribution bzw. anderen Unix-Dialekt, es gibt
jeweils unterschiedliche Shell-Makros und Hilfsprogramme, um
den Daemonenstart zu unterstuetzen.

So sieht eine Aufrufzeile etwa unter SuSE aus:

        ## Start daemon with startproc(8). If this fails
        ## the return value is set appropriately by startproc.
/sbin/startproc -e $CHROOT_PREFIX -p $AVANTI_PID -l $AVANTI_OUT -t5 -u
$AVANTI_USER -g $AVANTI_GROUP $AVANTI_BIN -daemon

(und /sbin/checkproc ist die Methode der Wahl, das Ueberleben
von avanti zu ueberpruefen)

Und so sieht es unter RHEL aus:

start_daemon runuser -s /bin/bash - $AVANTI_USER -c \"$DAEMON -daemon\"

(naja, so sieht es eigentlich nicht aus: Ich habe versucht, es LSB-
kompatibel zu machen, das ist unter RHEL eigentlich nicht ueblich).


Unter Solaris habe ich es mir vor vielen Jahren viel einfacher gemacht:

(cd /usr/users/xxx/avanti-x; ulimit -c 1; su xxx -c "./avanti-x -daemon")

(Ausgefuehrt wird obige Zeile durch root, nur so klappt es passwortlos)
[Gaaanz frueher musste man hoellisch aufpassen, dass der Prozess
detachte, d.h. mit Umleiten von STDOUT und STDERR und nohup's
jonglieren, damit der Startende nicht haengen blieb, das ist
gluecklicherweise Vergangenheit)


Was auch einen Versuch wert sein kann, ist das Binary suid zu setzen,
das wird bei modernen Linuxen aber u.U. schon auf Dateisystemebene
unterbunden, aus Sicherheitsgruenden natuerlich.

Man kann auf die Starterei durch das Betriebssytem jedoch
moeglicherweise verzichten, wenn man unter der Ziel-Benutzerkennung
einen hochfrequenten Cronjob als Watchdog implementiert, der etwa
alle zwei Minuten nachprueft, ob Avanti noch lebt und ihn andernfalls
neu startet.

Wenn Sie avadmin benutzen, muss die Benutzerkennung von avanti
die des Webservers sein (also etwa wwwrun), sonst kann nichts
funktionieren [Ausser der Webserver laeuft als root ;-).
Am besten dann also avanti gleich so installieren, dass
anschliessend alle Dateien diesem Benutzer uebereignet werden.

[Die ganze Konstruktion ist trotzdem eher fragwuerdig, denn
man ist eigentlich sehr zurueckhaltend damit, einem so exponierten
Benutzer wie wwwrun Schreibrechte einzuraeumen, und das kann
bei avanti-Datenbanken schon mal der Fall sein, dass man das
braucht. Persoenlich halte ich es jedenfalls fuer absurd, einen
Datenbankserver unter derselben Benutzerkennung wie den Webserver
aufzusetzen und wuerde das nie tun.]

viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFF+yYZhKFJT0F1FsoRAqxQAJ4+epdEGDtnvZj0T0v2WkTjEPUr+ACfS0FV
wqErSi5r+PzAaAejZVZRSdE=
=dH0F
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro