2012-08-10 21 views
9

Es gibt ein Problem, wenn ich eine PostgreSQL-Datenbank in einem FreeBSD-Gefängnis anstelle.FreeBSD: jail kann nicht security.jail.sysvipc_allowed setzen

Ich habe einen Artikel über das Problem gefunden. Ich habe es versucht, aber ich hatte kein Glück und ich weiß nicht warum. Es gibt den Link: PostgreSQL in jail.

Ich habe auch gelesen, die PostgreSQL-Dokumentation auf kernel resources:

Wenn durch Aktivierung sysctl ‚s security.jail.sysvipc_allowed, laufen Webmastern in verschiedenen Jails in FreeBSD Jails ausgeführt wird, sollen durch unterschiedliche Betriebssystembenutzer ausgeführt werden. Dies verbessert die Sicherheit , weil es verhindert, dass Nicht-Root-Benutzer Shared Memory oder Semaphoren in verschiedenen Jails stören, und es ermöglicht die PostgreSQL IPC Bereinigungscode ordnungsgemäß zu funktionieren. (In FreeBSD 6.0 und später den Bereinigungscode IPC nicht richtig Prozesse in anderen Gefängnissen erkennen, die Ausführung von Webmastern auf dem gleichen Port zu verhindern in verschiedenen Gefängnissen.)

Was ich getan habe:

  • I edited /etc/rc.conf (auf dem Host-Rechner) und hinzugefügt, um die Linie jail_sysvipc_allow="YES"
  • im Gefängnis der Maschine /etc/sysctl.conf, füge ich hinzu Linie security.jail.sysvipc_allowed=1

Ich habe den Jail-Computer mehrmals neu gestartet. Ich habe den Host-Rechner nicht neu gestartet und möchte nicht.

Hoffe jemand kann mir eine Lösung oder einen Rat geben. Vielen Dank.

Dies ist die Botschaft, wenn ich das Gefängnis neu starten:

/etc/rc.d/sysctl: WARNING: unable to set security.jail.sysvipc_allowed=1 

Oder wenn ich laufe Sysctl manuell (auf Gefängnis)

[email protected]:/home/xxxx# sysctl security.jail.sysvipc_allowed=1 
security.jail.sysvipc_allowed: 0 
sysctl: security.jail.sysvipc_allowed: Operation not permitted 

Freebsd Version: FreeBSD xxxxxxx 9,1-PRERELEASE FreeBSD 9.1-PRERELEASE

postgreSQL-Version: postgresql-server-9.1.4

Nachricht

Fehler:

[email protected]:/home/xxx # /usr/local/etc/rc.d/postgresql initdb 
The files belonging to this database system will be owned by user "pgsql". 
This user must also own the server process. 

The database cluster will be initialized with locale C. 
The default text search configuration will be set to "english". 

creating directory /usr/local/pgsql/data ... ok 
creating subdirectories ... ok 
selecting default max_connections ... 10 
selecting default shared_buffers ... 400kB 
creating configuration files ... ok 
creating template1 database in /usr/local/pgsql/data/base/1 ... FATAL: could not create  
shared memory segment: Function not implemented 
DETAIL: Failed system call was shmget(key=1, size=2146304, 03600). 
child process exited with exit code 1 
initdb: removing data directory "/usr/local/pgsql/data" 

Update:

in Host-Maschine, /etc/sysctl.conf: security.jail.sysvipc_allowed = 1 /etc/rc.conf: jail_sysvipc_allow = "YES"

Im Jail-Server gibt es keine zusätzliche jail_sysvipc-Konfiguration.

Sysctl Wert in Host-Maschine:

[email protected]:/home/xxxx# sysctl -a | grep 'sysvipc' 
    security.jail.param.allow.sysvipc: 0 
    security.jail.sysvipc_allowed: 1 

ich immer noch die gleiche Fehlermeldung, wie ich vorher bekam.

In weiteren, frage ich mich, ob es etwas mit security.jail.param.allow.sysvipc ist? Weil ich es im Host-Rechner nicht einrichten durfte. (Security.jail.param.allow.sysvipc 0-> 0)

+0

Welche FreeBSD-Version verwenden Sie? Welche PostgreSQL-Version? –

+0

Auch, verursacht dies ein bestimmtes Problem? Möchten Sie nur die Isolation zwischen den Gefängnissen verbessern? Hast du Probleme, Pg in einem Gefängnis zu starten? Was ist der Hintergrund? Fügen Sie die von Ihnen ausgeführten Befehle und die von ihnen erzeugten Fehler genau so ein, wie Sie es für die versuchte Lösung, über die Sie geschrieben haben, getan haben. Bitte aktualisieren Sie Ihre Frage. –

+0

Das gleiche Problem hier, mit FreeBSD-9.1, vor zwei Tagen kompiliert .. – drumfire

Antwort

3

Ich habe das Problem nach der Hilfe meines Teamkollegen gefunden.

Da ich /etc/jail.conf verwende, muss ich eine Zeile "allow.sysvipc" hinzufügen, um Systemfreigabe Speicher zu aktivieren.

in Host-Maschine,

/etc/sysctl.conf 
    security.jail.sysvipc_allowed=1 

    /etc/rc.conf 
    jail_sysvipc_allow="YES" (DO NOT have to do this, remove it) 
2

Die sysctl security.jail.sysvipc_allowed hat auf dem Host gesetzt werden, nicht im Gefängnis. Aber wenn Sie jail_sysvipc_allow="YES" in rc.conf des Hosts setzen, sollte dies für Sie festgelegt werden, siehe /etc/rc.d/jail.

Sie sollten auf dem Host prüfen, ob der Wert von security.jail.sysvipc_allowed Änderungen auf 1, wenn Sie das Gefängnis beginnen. Wenn nicht, ist wahrscheinlich etwas in Ihrer rc.conf falsch. Versuchen Sie security.jail.sysvipc_allowed manuell auf dem Host.

17

Lösung gefunden. Folgendes funktioniert für mich. Auf dem Host, tun:

[email protected]# jls 
    JID IP Address  Hostname      Path 
    3 -    some.jail      /usr/jails/somejail 

Finden Sie die richtige JID, 3 in meinem Beispiel. Dann wird auf dem Host, Ausgabe:

jail -m jid=3 allow.sysvipc=1

6

Es gibt einige neue Features für Gefängnis in spezieller Granularität, müssen wir ändern für jedes Gefängnis steckt diese in /etc/rc.conf sysvipc_allowed erlauben:

jail_example_parameters="allow.sysvipc=1" 
0

Mein System erforderlich modding /etc/rc.conf vor dem Gefängnis einen Neustart, sonst wäre es sowohl Gastgeber und Gefängnis auf 0 gesetzt habe ich nicht Notwendigkeit der Bildung security.jail.sysvipc_allowed = 1 in/etc/sysctl.conf.

/etc/rc.conf: 
jail_sysvipc_allow="YES"