einiges zu avanti (linux) -> das gute startskript
Thomas Berger
ThB at gymel.com
Sa Mai 22 11:40:25 CEST 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo Herr Lehmann,
| ja..., um welche datei und worum geht es denn nun eigentlich?
| verzeihung, aber das ist mir zu undeutlich.
|
|
| darf mal aufzählen:
| im avanti-paket (aus BS) gibt es avanti.conf in ...avanti/etc/avanti.conf
| (dort datenbanknamen-deklaration usw.)
im Prinzip ja, aber ...
| dann haben wir in /etc/init.d (=suse-linux) die startdatei avanti2 (Ihre!)
| die macht: ein start stop usw (natürlich macht sie mehr!)
da gehoert sie nicht nur unter Suse-Linux oder Linux allgemein hin.
Durch die spezielle Form der Kommentare im Header wird sie aber auch
von Linux-Runlevel-Editor beruecksichtigt.
| dann führen sie in /etc ein:
| die datei /etc/avanti diese datei ist unten abgebildet. sie
definiert ein paar umgebungsvariablen, wer
| soll nachher das aufführungsrecht zu avanti haben: shakespear oder
william?
|
| dabei steht aber in Ihrer startdatei avanti2 folgendes:
|
|
|
| # Check for existence of needed config file and read it
| test -r /etc/sysconfig/avanti2 || exit 6
| . etc/sysconfig/avanti2
|
| STOP.
| das versteh ich nicht.
Die von mir gestern verschickte Startdatei war das Skript
/etc/init.d/avanti2, das bei Ihnen /etc/init.d/avanti heisst.
| es gibt eine weitere datei mit dem namen avanti2 in /etc/sysconfig ?
sie sagen extra: "needed cofig file"
| es kann nicht Ihrer startdatei avanti2 sein.
Nein, /etc/sysconfig/avanti2 ist die neulich als einzige angekommene mit
Zeilen wie:
## Type: string()
## Default: "avanti"
#
# Which account should run Avanti?
#
AVANTI_USER="avanti"
## Type: string()
## Default: "avanti"
| es ist ver(w)irrend, wieviel vielfältige und/oder gleichklingende
avanti-namen es gibt.
|
| bin der meinung:
| -avanti.conf sollte dem original-paket überlassen sein.
Hm. Normalerweise haben Pakete kein eigenes etc-Verzeichnis.
Ich selber habe fuer mich daher eingefuehrt, in /etc/avanti.conf
die Einstellungen zu machen. Das Verwaltungsskript aus
/etc/init.d kopiert das dann an die unuebliche Stelle, wo avanti
es erwartet. Wenn avanti chrooted ablaeuft, werden dabei auch
gleichzeitig die Pfade umgeschrieben.
| -avanti sollte der name der startdatei sein.
Mein Eindruck war, dass sich auch der Name des Produkts
von avanti auf avanti2 geaendert hat. Zumindest haben sich
Format und Ort der Konfigurationsdateien geaendert, Anlass
genug, auch die Verwaltungsskripten umzubenennen (nicht dass
ich so elaborierte fuer avanti[1] gehabt haette).
| des weiteren sind da auch noch einige verständnis/bestätigungsfragen:
|
| so stehts in Ihrer start-datei drin:
|
| AVANTI_ROOT=/opt/avanti
| AVANTI_JAIL=/var/lib/avanti/jail
| AVANTI_OUT=/var/log/avanti.out
| AVANTI_PID=/var/run/avanti2.pid
| AVANTI_CONF=/etc/avanti.conf
| # relative to AVANTI_ROOT
| AVANTI_BIN=/bin/avanti
|
|
|
| AVANTI_ROOT ist programmpakets-verzeichnis!
|
| AVANTI_JAIL ist ebenfalls ein verzeichnis, präziser ausgedrückt:
.../jail ist das verz!
|
| AVANTI_OUT und AVANTI_PID sind klar. ohne frage.
|
| nochmal: AVANTI_CONF ist was?
| Ihre conf-datei, die hat z.b.
AVANTI_EXTRA_MOUNT="/seconddisk/databases" drinstehen....
nein, das war die sysconfig-Datei, nicht die .conf-Datei
| was ist aber bitteschöndas?
| # relative to AVANTI_ROOT
| AVANTI_BIN=/bin/avanti
|
| ist der wert von AVANTI_BIN ein symbollink oder so?
| oder ist das der "echte ort" auf der platte: mit dem namen datei
"avanti" auf /bin ????
Nein, es ist der Pfad (relativ zu AVANTI_ROOT) des Binaries, also
/opt/avanti/bin/avanti
| naja, soweit ist man(n) gekommen:
|
| Starting avanti2 ln: accessing `/var/lib/avanti/jail/bin/sh': Not a
directory
| ldd: /var/lib/avanti/jail/bin/*: No such file or directory
| /tmp on /var/lib/avanti/jail/home type none (rw,bind)
| startproc -e -c /var/lib/avanti/jail -l
/var/lib/avanti/jail/var/log/avanti.out
| -t5 -u domainadmin -g www /bin/avanti -daemon
| startproc: Usage:
| startproc [-f] [+/-<prio>] [-s] [-u uid] [-g gid] [-v] [-l
log_file|-q]
| /full/path/to/program
|
failed
| checkproc: Usage:
| checkproc [-v] [-k] [-p pid_file] /full/path/to/program
| xyz:/etc/init.d #
|
|
|
|
| denke, wenn obiges geklärt ist, wird sich der dschungel um "starting
avanti2" lichten.
|
| da sind natürlich noch (leise) fragen:
| -wie kommt es zu: /bin/avanti ? es gibt keine datei avanti auf /bin !
... relativ zu AVANTI_ROOT
| -var/lib/avanti/jail/var/log/avanti.out scheint mir irgendwie zu lang
oder zu unlogisch zu sein?!
/var/log/avanti.out ist jeweils der Name. Davor ist ggfls. der
Kaefigpfad zu setzen. (Man kann das wohl als Pipe realisieren, so dass
das, was in /var/lib/avanti/jail/var/log/avanti.out hineingeschrieben
wird als /var/log/avanti.out gelesen werden kann, das habe ich aber
noch nicht ausprobiert)
| -in /var/lib/avanti/jail gibt die datei bin (die aus /bin/ash zu
/var/lib/avanti/jail/bin wurde. warum?
Weil das Verzeichnis bin vorher haette existieren muessen.
| aber obiges sagt da soll es noch sh geben. nö! statt sh gibt es ash.
eine ebene tiefer....
|
|
| ich habe den eindruck, daß mit dem startskript eine künstliche welt
aufgebaut wird. diese soll DEN DA
| draussen ver(w)irren! ist die verwirrung tatsächlich nötig?
Das mit der kuenstlichen Welt sehen Sie richtig. Die hat aber nicht
unbedingt den Zweck zu verwirren, sondern sie soll ausreichend sein,
damit ihre Einwohner lebensfaehig sind: Ein in einer chroot-Umgebung
ablaufender Prozess sieht nur diese kuenstliche Welt und hat absolut
keine Chance mehr, auf die "reale Welt" jenseits des Kaefigs
zuzugreifen.
| naiv gefragt: reicht es nicht, wenn ich den checkproc befehl in das
alte startskript einbaue? und somit z.b.
| den user und die gruppe übergebe? (sodaß man mit suid nicht arbeiten
muss) . oder ist das die falsche frage?
| ;-)
Ich habe nicht behauptet, dass das Startskript die chroot-Umgebung
komplett aufsetzt, das war etwas Arbeit und ich brauchte auch die
Hilfe von Herrn Butkus dazu, die benotigten Dateien ueberhaupt zu
ermitteln. Es werden zwar einige Dateien kopiert, aber u.U. nicht
alle Verzeichnisse angelegt und vor allem - daher habe ich das auch
nicht weiter getrieben - sind die Major und Minor-Device-Numbers
fuer die Dateien in /dev je nach Linux-Dialekt verschieden:
In bin benoetigen Sie
ash
avanti
avanti-cl
sh -> ash
in etc benoetigen Sie
avanti.conf
localtime
(und wirklich auch UIF0GER, UIFsGER????)
in dev benoetigen Sie
null
in lib benoetigen Sie
ld-linux.so.2
libc.so.6
Es werden ja - optional!, ueber /etc/sysconfig/avanti2 konfiguriert -
zwei Sicherheitsmechanismen angeboten, naemlich vor allem das Ablaufen
unter einer User-ID ohne besondere Privilegien und zweitens das in-den-
Kaefig-setzen. Letzteres ist dann fast zwingend, wenn der Prozess als
root ablaufen muss, ansonsten eher verzichtbar (wegen der zusaetzlichen
Verwirrung in den Pfaden, gegen die man nichts machen kann) manche
Admins haben da aber etwas falsch verstanden und wollen es chrooted.
Im Gegensatz zu anderen U**Xen erlaubt Linux tatsaechlich, beide
Mechanismen simultan einzusetzen.
Wenn Sie in /etc/sysconfig/avanti2
AVANTI_RUN_CHROOTED="no"
setzen, sind Sie die zusaetzliche Komplikation mit dem chroot-Kaefig
los. Dann laeuft avanti dort, wo Sie es installiert haben, also etwa
in (in init.d durch AVANTI_ROOT eingestellten) /opt/avanti
(das ist bei mir ein symlink auf /opt/avanti-2.2 oder was gerade die
aktuell installierte Version ist).
Die zentrale Konfigurationsdatei /etc/avanti.conf wird dann auch stets
nach /opt/avanti/etc/avanti.conf kopiert.
Mittels startproc kann das init-Skript User und Gruppe beim Start von
/opt/avanti/bin/avanti angeben, das ist eigentlich angenehmer als
das Setzen des suid-Bits auf der Datei.
Die Vor- und Nachteile einmal gegenuebergestellt (manche Minusse
koennten auch Plusse sein und umgekehrt, das ist eine Stilfrage):
suid-Bit:
~ + Egal wer startet, egal wie gestartet wird, avanti laeuft
~ immer unter der eingestellten Benutzerkennung.
~ - Nach jeder Aktualisierung der Binaries muessen die Flags
~ und Owner neu gesetzt werden
~ - Ein Skript in /etc/rc3.d braucht man stets, damit avanti
~ beim Boot automatisch gestartet wird, am besten jedoch (nur Linux)
~ ein elaborierters in /etc/init.d, damit auch der Runlevel-Editor
~ damit etwas anfangen kann
init-Mechanismus mit startproc:
~ + Es ist ziemlich egal, wie die konkreten Rechte im Avanti-
~ Verzeichnis aussehen
~ - nur root (oder dezidierte privilegierte Accounts?) darf den Service
~ verwalten
Wie sich das Ganze nun mit dem PHP-Interface avadmin zusammenbringen
laesst, ist mir nicht klar. Sicher ist zumindest, dass es chrooted
nicht geht (man braucht killproc(8) um avanti sauber abzuschiessen,
das geht nur privilegiert) und dass ein Stoppen oder Reloaden nur
geht, wenn die Benutzerkennungen uebereinstimmen. Dafuer muss avanti
entweder unter der Webserver-Kennung ablaufen oder aber - aber das
ist dann von Server zu Server verschieden - man muss den Server so
aufsetzen (etwa mit suExec unter Apache), dass die php-Admin-Skripte
unter der Benutzerkennung von avanti ausgefuehrt werden.
Herumpopeln in einer /etc/avanti.conf verbietet sich in beiden
Situationen, d.h. hier muesste man auf eine in den Avanti-Verzeichnissen
liegende Originalversion der avanti.conf zurueckfallen.
Ich denke, man wird auch langfristig zwei sehr verschiedene Szenarios
beruecksichtigen muessen:
* Ein avanti-optimierter Server, dort ist avanti stark in das
~ System integriert (ueber ausgefeilte init-Skripten, chroot, eigene
~ Mounts etc.), der "normale" Administrator ist fuer Betrieb und
~ Konfiguration verantwortlich. Ein webbasierenden
~ Verwaltungsmechanismus ist eher ueberfluessig und a priori ein
~ Sicherheitsrisiko.
bzw.
* Ein avanti-User-Server: Hier wird avanti irgendwann irgendwie durch
~ den Administrator lieblos abgeworfen, fuer start/stop und
~ Konfiguration ist ein User zustaendig, dem man am liebsten auch
~ einen Shell-Account verwehrt, d.h. es *muss* einen Webbasierenden
~ Mechanismus fuer alle Administrationstaetigkeiten geben.
viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFAryAJENVh3bB0lwMRAnRzAJ9Fwje3jsW0JQZPx6M+ntzEcbzeGwCgvDfs
cSSYeopY0UWEnIE7C2rrkCs=
=sjNS
-----END PGP SIGNATURE-----
Mehr Informationen über die Mailingliste Allegro