Jail für jedes vHost sinnvoll?

Apache, Lighttpd, nginx, Cherokee
shantanna
Posts: 35
Joined: 2011-03-15 16:59

Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-04-28 18:22

Möchte nur wissen ob es sich lohnt jede einzelne vHost in eigene Jail zu stecken? So bleiben doch andere vHosts unberührt im Falle einer Kompromittierung. Oder liege ich da falsch?

Gruß, satriani.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Jail für jedes vHost sinnvoll?

Post by Roger Wilco » 2011-04-28 19:03

Das kommt ganz auf deine Benutzer und dein Paranoia-Level an.

Jeden einzelnen VirtualHost z. B. mittels mod_chroot oder gar mit eigener Webserver-Instanz einzusperren kann zwar sinnvoll sein, ist aber i. d. R. Overkill. Ein geeignetes Rechtetrennungskonzept (z. B. mittels SuExec oder mpm-itk/mpm-peruser) und eine sinnvolle Konfiguration reicht normalerweise aus. Wenn du zuviele Ressourcen übrig hast, kannst du sicherlich den Weg über die individuellen Jails gehen.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-04-28 19:58

Roger Wilco wrote:Wenn du zuviele Ressourcen übrig hast, kannst du sicherlich den Weg über die individuellen Jails gehen.


Welche Ressourcen genau meinste den? Festplattenspeicher oder RAM und CPU?

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Jail für jedes vHost sinnvoll?

Post by Roger Wilco » 2011-04-28 20:13

Speicherplatz und Hauptspeicher. CPU ist i. d. R. zu vernachlässigen.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-04-28 22:34

also, lohnt sich nicht wirklich. Dann mache ich eben mit chroot in der Hoffnung, dass es sicher genug ist :)
Hätte nicht gedacht, dass es so auf die Ressourcen geht.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-04-29 21:44

Na ja, auf die Ressourcen geht, dass Du in jedem Jail einen Webserverprozess gestartet haben musst; verschiedene virtuelle Hosts sich also keine Ressourcen teilen können. Wenn man allerdings einen leichtgewichtigen Webserver wie Nginx oder Lighttpd verwendet, fällt das kaum ins Gewicht. Die FastCGI-Prozesse muss man ohnehin je virtuellem Host vorhalten (zumindest, wenn man suexec einsetzt).

Ich selbst habe meine Webanwendungen auf verschiedene Jails verteilt - allerdings basieren alle auf unterschiedlichen Technologien (u. a. RoR, Python/Django, Plone/Zope, PHP5), so dass ein Ressourcen-Sharing ohnehin kaum möglich wäre. So kann ich aber auf wenig aufwändige Weise Seiten hosten, die zwar dieselbe Technologie, aber unterschiedliche Versionsstände voraussetzen (z. B. Python 2.x und 3.x oder Zope 2 und 3), ohne dass diese sich gegenseitig in die Quere kommen.

Ein weiterer Punkt, den man bedenken sollte, ist die Anzahl verfügbarer öffentlicher IPs. Klar, mit pf ist es kein Problem, per rdr auf beliebige interne Jail-IPs "durchzustellen" - extern hat man jedoch i. d. R. eine limitierte Anzahl öffentlicher IPs. pf kann nur eine 1:1-Abbildung schaffen; sollen also mehrere virtuelle Hosts in unterschiedlichen Jails mit derselben öffentlichen IP betrieben werden, wird ein Reverse Proxy benötigt. Wenn man ohnehin loadbalancen muss oder Applikationsserver abschirmen möchte, dann hat man keinen zusätzlichen Aufwand - den Reverse Proxy bräuchte man ohnehin. Anderenfalls bedeutet das natürlich zusätzlichen Konfigurationsaufwand; in Zusammenspiel mit mod_security, guten Filterregeln und automatisierter Logfile-Überwachung kann das aber auch ein Plus an Sicherheit bedeuten.

P. S. chroot ist sneakoil - vielleicht fühlt man sich als Admin hinterher besser, in puncto Sicherheit hat man aber (so gut wie) nichts erreicht.
Last edited by daemotron on 2011-04-29 21:45, edited 1 time in total.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-04-30 13:41

man... daemotron du machst mich wahnsinnig :D

Mein Gesamtkonzept sieht folgendermaßen aus: Ich habe gerade einen RootServer bei Hetzer. Da kommen demnächst 6 Webseiten rein, alle laufen nur mit PHP5 + MySQL, drei von den Seiten sind relativ gross, komplex und mit hoher Besucherrate, wobei eine von den einer großen Russischen Firma gehört. Die meisten Sorgen bereitet mir genau diese russische Seite. Laut den Auftraggeber wurde die Seite oft attackiert, angeblich von der Konkurrenz. Deshalb habe ich ehrlich gesagt bisschen Panik :) Ich möchte nicht, dass die anderen Projekte dadurch Schaden nehmen. Sobald diese Seite mir Problem, trotztallen Sicherheitsvorkehrungen macht, kommt die sofort von meinem Server runter! So habe ich es mit dem Auftraggeber abgemacht.
Nun stehe ich vor der Entscheidung, Performance oder Sicherheit, beides geht ja bekanntlich sehr schwer.

Was die Performance angeht, ist ein richtiger Webserver ausschlaggebend. Weshalb ich mich für den Hiawatha-Webserver entschieden habe, der superflott und sicher zugleich ist. PHP5 möchte ich mal über PHP-FPM probieren (hat sich anscheinend bewährt wenn es offiziell zum Bestandteil von PHP5.3.x geworden ist), hoffentlich ist das eine gute Kombination, bisher hatte ich PHP immer über FastCGI am Laufen :)
Und MySQL muss auch ordentlich abgesichert werden. Alles andere, wie Mailserver und etc. haben auf meinem Server nichts zu suchen. Die IP's stehen auch genug zur Verfügung.

Also, worauf würdest du tippen, sollen die Seiten in die eigene Jails oder werden die Seiten dadurch träge? :)

daemotron wrote:P. S. chroot ist sneakoil - vielleicht fühlt man sich als Admin hinterher besser, in puncto Sicherheit hat man aber (so gut wie) nichts erreicht.


ist chroot also wirklich nutzlos? Könntest du mal bitte erklären warum? Nur aus reiner Neugier :D

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-04-30 14:20

shantanna wrote:man... daemotron du machst mich wahnsinnig :D

Immer wieder gerne :ymparty:

shantanna wrote:Nun stehe ich vor der Entscheidung, Performance oder Sicherheit, beides geht ja bekanntlich sehr schwer.

Ganz so dramatisch würde ich es nicht formulieren. Wenn beides unvereinbar ist, stimmt am Betriebskonzept etwas nicht.

shantanna wrote:Also, worauf würdest du tippen, sollen die Seiten in die eigene Jails oder werden die Seiten dadurch träge? :)

Ich würde zumindest die kritische(n) Seiten in eigene Jails sperren. Da wird überhaupt nix träge, und jede Hetzner-Kiste hat genug RAM, um sich den einen oder anderen Webserver-Prozess zusätzlich leisten zu können. Allerdings würde ich die Jails so organisieren, dass sie leicht mit Sicherheitsupdates versorgt werden können - also entweder ein eigenes kleines Tinder-Jail betreiben, oder (bei einer kleinen Anzahl Jails) die Ports im Jail bauen. Das Basis-System würde ich auf einem eigenen Dataset zentralisieren, so dass bei einem System-Update ein

Code: Select all

make installworld DESTDIR=/meine/jailbase
ausreicht, um auch die Jails aktualisiert zu halten. Wie das genau geht, steht übrigens im FreeBSD Handbuch beschrieben.

shantanna wrote:ist chroot also wirklich nutzlos? Könntest du mal bitte erklären warum? Nur aus reiner Neugier :D

chroot ist nicht nutzlos, aber es ist kein Sicherheits-Feature. Der chroot()-Syscall dient nur dazu, den Bezugspunkt für absolute Pfadangaben für einen Prozess neu zu setzen. Er implementiert aber keine Zugangskontrollmechanismen (außer der Prüfung auf UID==0). D. h. das Einsperren in eine chroot-Umgebung kann rückgängig gemacht werden (siehe u. a. http://www.bpfh.net/simes/computing/chroot-break.html, http://de.wikipedia.org/wiki/Chroot *), und gerade in puncto IPC bietet chroot überhaupt keine Abschottung - der Prozess läuft ja weiterhin im Hauptsystem (Jail ID 0). Bei einem Jail hingegen kommt der Prozess in einen komplett abgeschotteten Kontext, bei dem nicht nur das Root-Directory geändert wurde, sondern auch die JID (und damit der Zugriff auf eine ganze Reihe von Systemressourcen, u. a. IPC, Dateideskriptoren, etc.)

Mangels einer geeigneten OS Level Virtualisierung wurde chroot gerade unter Linux häufig als Pseudo-Security-Feature mißbraucht; aber selbst dort gibt es mittlerweile mit den Linux Containers (siehe http://lxc.sourceforge.net/) eine entsprechende Alternative (wenn auch noch nicht so mächtig wie derzeit FreeBSD Jails, aber in Sachen Sicherheit allemal besser als chroot).

* Ironischerweise hat ausgerechnet FreeBSD eine erweiterte chroot()-Implementierung, die Second Chroot Call Attacken blockiert. Die Einschränkungen bezüglich IPC und Dateideskriptoren-Tabelle gelten aber auch unter FreeBSD.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-02 12:52

ich kann mich gerade erinnern irgendwo gelesen zu haben, dass die Nutzung von MySQL innerhalb einer Jail nicht funktionieren würde. Stimmt das? :?
MySQL, Webserver, PHP über PHP-FPM, Sendmail und alles was eine gewöhnliche PHP-MySQL Seite braucht müssen unbedingt in jeder Jail einwandfrei funktionieren.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-05-02 14:14

Stopp, gaanz langsam. Also, die Libraries, gegen die ein Binray gelinkt ist, müssen natürlich im Jail ebenfalls verfügbar sein. Bei fast allen Programmen ist das mindestens libc.so.7; meist werden auch noch andere Bibliotheken (readline, zlib, ...) benötigt. Normalerweise erzeugt man daher ein Jail mit dem kompletten Basis-Userland (make installworld), und kompiliert Ports innerhalb des Jails (oder installiert die entsprechenden Packages mitsamt Abhängigkeiten).

MySQL läuft sehr wohl in einem Jail; lediglich muss man von anderen Jails dann per TCP auf den mysqld zugreifen, Verbindungen über Socket sind natürlich nicht möglich (es sei denn, beide Jails liegen auf demselben Dataset oder Disklabel und man trickst mit Hardlinks, was man aber wieder aus anderen Gründen auf keinen Fall tun möchte).

In der Standard-Konfiguration gibt es nun tatsächlich einige Dinge, die in einem Jail nicht funktionieren, und die man aus Sicherheitsgründen auch nicht aktivieren möchte. Dazu gehören u. a.:
  • Shared Memory (SysV IPC SHM): Aktiviert man Shared Memory, sind die dafür vorgesehenen Segmente Jail-übergreifend verfügbar, wodurch die Trennung der Jails stark aufgeweicht wird. Betroffen hiervon sind u. a. Zabbix (sowohl Server als auch Agent) und PostgreSQL (nur Server, Client braucht kein SHM).
  • Raw Sockets (u. a. verwendet von ping & Co).
  • Gemeinsamer (schreibender) Zugriff auf ein Dateisystem. Mit Nullfs kann man hier arbeiten, direktes Herumfummeln von außen impliziert aber echte Sicherheitsprobleme(siehe http://www.bsdforen.de/showthread.php?t ... post190654)

Das Gerücht, MySQL funktioniere nicht in einem Jail, ist definitiv nicht wahr. Ich vermute, es kommt daher, dass PostgreSQL tatsächlich nicht in einem Jail funktioniert (außer man aktiviert SHM, was man aber nicht möchte...).

Aus eigener Erfahrung kann ich Dir definitiv zusichern, dass sich normale PHP-Webseiten problemlos in einem Jail betreiben lassen. Den MySQL-Server kann man auch problemlos in einem eigenen Jail betreiben; man muss nur darauf achten, dass zwischen Webjails und MySQL-Jail das Routing funktioniert und kein Paketfilter die Verbindung verhindert.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-05-02 14:19

matzewe01 wrote:Also eine lokale Virtuelle IP aufbauen z.B 192.168.0.1 -> auf die dann mysql als einziges hört.

Da liegt einer der Unterschiede zwischen Linux chroot und FreeBSD Jails: die (virtuelle) IP binde ich an ein Jail; sie wird damit zur Eigenschaft des Jails. Starte ich im Jail einen Dienst, der auf *:3306 hört, lauscht er zwangsweise nur auf der dem Jail zugeordneten IP. Andere IPs (selbst 127.0.0.1) sind innerhalb des Jails nicht verfügbar.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-05-02 15:03

Ich habe zwei MySQL-Installationen, jeweils in einem eigenen Jail. Zwischen beiden läuft eine Master-Slave Replikation; den Slave halte ich mir für konsistente Backups ohne Downtime (der hat z. B. nur minimalen Query Cache). Auf den Master in seinem dedizierten Jail können andere Dienste aus ihren jeweiligen Jails heraus per TCP zugreifen.

Davon unbenommen bleibt aber, dass jedes Jail eine dedizierte IP hat. Prozesse können keine passiven (lauschenden) Sockets an IPs binden, die nicht zu ihrem Jail gehören. Sie können aber selbstverständlich einen aktiven Socket mit Ziel <IP-eines-anderen-Jails> erstellen und so als Client auf Dienste zugreifen, die in einem anderen Jail laufen.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-03 11:38

ich fürchte die Zugriffe per TCP könnten die Performance beeinträchtigen, was gerade bei mehreren Projekten nicht unterschätzt werden darf.
Aber was ich noch wissen will, ist die Reihenfolge. Muss ich zuerst das gesamte System, sprich Webserver, MySQL, PHP etc. aufstellen bevor ich die Jails erstelle oder kann man die nachträglich in den Jails problemlos installieren?

Ich habe mich dafür entschieden alle Projekte in einem Dataset zu betreiben, nämlich /usr/local/www so kann ich zB. alle Projekte einzeln snapshoten oder alle auf einmal :-D
Last edited by shantanna on 2011-05-03 11:43, edited 1 time in total.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-05-04 11:00

shantanna wrote:ich fürchte die Zugriffe per TCP könnten die Performance beeinträchtigen, was gerade bei mehreren Projekten nicht unterschätzt werden darf.


Warum befürchtest Du das? Solange alles auf derselben Maschine abläuft, wird TCP intern kaum anders gehandhabt als ein Unix-Socket - es werden dieselben Routinen aus der libc verwendet, und beide Socket-Arten sind auf Kernel-Ebene nix anderes als Dateideskriptoren. Der Unterschied entsteht erst, wenn Daten wirklich über den IP-Stack weiter runter laufen und dann über den Netzwerktreiber geschleust werden müssen, um die Maschine zu verlassen.

Ich behaupte mal, dass TCP und Unix Socket innerhalb derselben Maschine sich so minimal unterscheiden, dass es Dir nicht gelingen wird, wirklich meßbare Performance-Unterschiede auf Ebene Deiner Applikation zu ermitteln. Der interpretierte PHP-Bytecode ist x mal langsamer als der hoch optimierte Maschinencode der libc.

shantanna wrote:Aber was ich noch wissen will, ist die Reihenfolge. Muss ich zuerst das gesamte System, sprich Webserver, MySQL, PHP etc. aufstellen bevor ich die Jails erstelle oder kann man die nachträglich in den Jails problemlos installieren?


Genau anders herum. Wenn Du Jails einsetzen möchtest, erstellst Du erst die Jails (lies Dir bitte mal die entsprechenden Kapitel im Handbuch dazu durch) und installierst dann in den Jails die entsprechende Zusatzsoftware (Webserver, DB-Server, etc.).

shantanna wrote:Ich habe mich dafür entschieden alle Projekte in einem Dataset zu betreiben, nämlich /usr/local/www so kann ich zB. alle Projekte einzeln snapshoten oder alle auf einmal :-D


Äh, nein. Wenn /usr/local/www ein Dataset ist, kannst Du nur genau von diesem Dataset einen Snapshot erstellen. Er enthält dann automatisch immer alle Projekte, die dort abgelegt sind.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-04 11:56

danke dir daemotron,
was hältst du von ezjail? Hast du zufällig Erfahrungen damit gemacht, lohnt es sich oder soll man lieber die traditionelle Art anwenden?

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Jail für jedes vHost sinnvoll?

Post by daemotron » 2011-05-05 13:42

Ich organisiere mir meine Jails selbst; kann Dir daher zu ezjail nichts sagen. Wenn man seine Jails wie im Handbuch, Kapitel 15.6 beschrieben organisiert, ist das Erstellen eines neuen Jails mit äußerst wenigen Befehlen erledigt (Dataset für die Nutzdaten erstellen, Skeleton kopieren, Eintrag in fstab erstellen, mounten, fertig).

Gestartet werden Jails eh automatisch über die rc.conf (wenn man das denn möchte), bleiben also nur noch Updates, um die man sich Jail-weise kümmern muss. System-Updates werden per make installworld ins mroot-Verzeichnis installiert und stehen damit automatisch allen Jails zur Verfügung, lediglich mergemaster(8) muss in jedem Jail einmal ausgeführt werden (mit den Optionen -i -F -U aber auch kein großer Aufwand). Das kommt aber nicht so häufig vor (eigentlich nur bei einem Upgrade des Basissystems nötig, also ca. einmal im Jahr). Für einen Server mit 40 Jails benötige ich ca. eineinhalb Stunden (ohne Bauzeit für world und Kernel).

Um Ports in den Jails auf Aktualität zu prüfen und ggf. zu aktualisieren, habe ich mir mal ein Shell-Skript geschrieben; herunterladen kannst Du es hier:

http://sourceforge.net/projects/root-to ... 2/download

Die Verwendung ist einfach: Ruft man das Skript nach einem Update des Ports Tree mit dem Argument -c auf, werden in allen Jails die installierten Ports auf Verwundbarkeiten überprüft und eventuell vorhandene Updates aufgelistet. Der Aufruf mit -u installiert verfügbare Updates dann in den Jails. Das Skript setzt allerdings voraus, dass in jedem Jail die Ports ports-mgmt/portmaster und ports-mgmt/portaudit installiert sind (beide haben keine weiteren Abhängigkeiten und können daher problemlos installiert werden).

Vor einem Update-Lauf bietet es sich an, die Umgebungsvariable PAGER auf 'more' zu setzen (less oder most warten immer auf User-Interaktion); außerdem sollte man vorher unbedingt /usr/ports/UPDATING lesen, um böse Überraschungen zu vermeiden. Außerdem sollte man immer zuerst jail-update -c laufen lassen und die zu aktualisierenden Ports prüfen - bei einigen muss man anschließend noch manuell tätig werden (z. B. Apache neu starten o. ä.).
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-10 22:19

Danke daemotron,
du hast doch auch ne Maschine bei Hetzner, wie hast du es geschafft, dass deine Jails im Netz sind? Der Eintrag in resolv.conf der Jails hat bei mir
nichts gebracht.

EDIT: Hat sich erledigt, wusste nicht, dass Ping innerhalb einer Jail nicht funktioniert :)
Last edited by shantanna on 2011-05-10 22:41, edited 2 times in total.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-12 09:37

matzewe01 wrote:Ich hätte den mysql ausserhalb der Jail betrieben und dachte, dass ich von der Jail aus auf den "global" Verfügbaren mysqld per TCP/IP zugreifen kann.


Tja, jetzt stehe ich vor dem Problem, dass ich halt von den Jails auf MySQL nicht zugreifen kann.
Muss man für MySQL eigene Jail unterhalb zB. /usr/jails/mysql erstellen oder kann man MySQL genau so sicher auf dem Host betreiben?
Ich habe auf dem Host nach der Anleitung von Joe User installiert.
Kennt jemand detaillierte Howto wie man das Netz zwischen Jails und MySQL einrichtet? Ich habe bis jetzt im Inet nichts gefunden :-?

Alle meine Webprojekte laufen in den eigenen Jails sprich /usr/jails/web1 /usr/jails/web2 usw. Jede Jail wurde mir php und webserver bestückt.
Last edited by shantanna on 2011-05-12 09:42, edited 1 time in total.

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Jail für jedes vHost sinnvoll?

Post by rudelgurke » 2011-05-12 18:30

Hmm - natürlich kann man auf MySQL zugreifen von einer Jail aus. Entweder auf dem Host oder in einer anderen Jail - nur Socket Kommunikation also ein nullfs mount z. Bsp. sollte man unterlassen.
Dann anstatt 127.0.0.1 die IP des Jails und dort entsprechend Benutzer erstellen mit der jeweiligen Client IP des Mail / Web oder was auch immer läuft Jail.
Ist reine interne TCP Kommunikation - läuft ohne Probleme.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-14 07:04

rudelgurke wrote:Dann anstatt 127.0.0.1 die IP des Jails und dort entsprechend Benutzer erstellen mit der jeweiligen Client IP des Mail / Web oder was auch immer läuft Jail.
Ist reine interne TCP Kommunikation - läuft ohne Probleme.


Benutzer erstellen bei MySQL-Jail? Muss ich für jeweils eine WebJail separate Mysqlbenutzer erstellen?

Ich kriege es nicht in die Reihe, das internes Netzwerk einzurichten zwischen den Jails.
Ich habe bis jetzt folgendes gemacht:

Extra Jail für MySQL erstellt und nur MySQL in der Jail installiert und rc.conf wie folgt editiert:

Code: Select all

ifconfig_lo0="inet 127.0.0.2 netmask 255.255.255.255"

bei my.conf

Code: Select all

# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port      = 3306
socket      = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
bind-address= 127.0.0.2
port      = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id   = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/db/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/db/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout


config.inc.php in der WebJail sieht so aus:

Code: Select all

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * phpMyAdmin sample configuration, you can use it as base for
 * manual configuration. For easier setup you can use setup/
 *
 * All directives are explained in Documentation.html and on phpMyAdmin
 * wiki <http://wiki.phpmyadmin.net>.
 *
 * @version $Id$
 * @package phpMyAdmin
 */

/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/*
 * Servers configuration
 */
$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '127.0.0.2';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';

/* User for advanced features */
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
/* Advanced phpMyAdmin features */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma_relation';
// $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
// $cfg['Servers'][$i]['history'] = 'pma_history';
// $cfg['Servers'][$i]['tracking'] = 'pma_tracking';
// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';

/*
 * End of servers configuration
 */

/*
 * Directories for saving/loading files from server
 */
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

?>


in rc.conf des Hosts habe ich das eingefügt

Code: Select all

jail_mysql_ip="xxx.xxx.xx.xx,127.0.0.2"
jail_web_ip="xxx.xxx.xx.xx,127.0.0.5"


mehr eigentlich nicht, habe ich was verpasst oder falsch gamacht?

Gruß, shantanna.
Last edited by shantanna on 2011-05-14 07:05, edited 1 time in total.

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Jail für jedes vHost sinnvoll?

Post by rudelgurke » 2011-05-14 13:08

Passt schon so. Nur der CREATE syntax für neue User sieht dann anders aus:

Code: Select all

CREATE USER 'test'@'127.0.0.5' IDENTIFIED BY 'password';


Dann jeweils die IP des jeweiligen Jails. Ging nur darum dass z. Bsp. aus einer evtl. Postfix Jail mit entsprechender IP kein Unfug in anderen Datenbanken gemacht werden kann. War vielleicht etwas unglücklich formuliert.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-14 15:12

das mit create user geht leider nicht "Ignoring query to other database"

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

Re: Jail für jedes vHost sinnvoll?

Post by Joe User » 2011-05-14 16:34

Für die Jails würde ich IPs statt aus 127/8 lieber aus 10/8 verwenden, das reduziert mögliche Probleme beim Routing und manchen Diensten.

MySQL-User und Datenbanken lege ich gerne etwas ausführlicher an, auch wenn davon Einiges unnötig redundant ist:

Code: Select all

mysql -uroot -p
CREATE USER 'username'@'10.0.1.2' IDENTIFIED BY 'PaSsWoRd';
GRANT USAGE ON *.* TO 'username'@'10.0.1.2' IDENTIFIED BY 'PaSsWoRd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `database` DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON `database`.* TO 'username'@'10.0.1.2' IDENTIFIED BY 'PaSsWoRd';
FLUSH PRIVILEGES;
QUIT;
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.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-14 17:04

Danke Joe User, da wird mir schon einiges klar.
Aber, wie vergibt man richtig die IPs an Jails? Ich habe ein Subnetz /29 und möchte dass jede einzelne Jail im Internet mit jeweils einer IP aus dem Subnetz erreichbar bleibt und dass alle Jails mit der MySQL-Jail über lokales Netz kommunizieren sprich auf die MySQL-DB zugreifen können.
Ich gehe davon aus, das die rc.conf des Hosts entsprechend editiert werden soll (Nur wie genau?) und wahrscheinlich noch in jeder Jail ein rc.conf erstellen und anpassen. Kannste mal ein Beispiel geben wie das ganze aussehen soll?

Danke vielmals im Voraus.

shantanna
Posts: 35
Joined: 2011-03-15 16:59

Re: Jail für jedes vHost sinnvoll?

Post by shantanna » 2011-05-14 23:04

OK, ich habs hinbekommen. Das war eine schere Geburt :D
Dank deinen Howt Joe User :)
Das Netzwerk-Interfaces bereitstellen war das entscheidene.

Dank euch für die Hilfe