2012-08-10 11 views
9

Hay un problema cuando inicio una base de datos PostgreSQL en una cárcel de FreeBSD.FreeBSD: jail no puede establecer security.jail.sysvipc_allowed

Encontré un artículo sobre el problema. Intenté su consejo, pero no tuve suerte y no sé por qué. Existe el enlace: PostgreSQL in jail.

También leí la documentación de PostgreSQL en kernel resources:

Si se ejecuta en jaulas de FreeBSD, permitiendo sysctl 's security.jail.sysvipc_allowed, administradores de correos que se ejecutan en diferentes cárceles deben ser ejecutados por diferentes usuarios del sistema operativo. Esto mejora la seguridad de porque evita que los usuarios no root interfieran con memoria compartida o semáforos en diferentes cárceles, y permite que el código de limpieza PostgreSQL IPC funcione correctamente. (En FreeBSD 6.0 y después el código de limpieza CIP no detecta correctamente los procesos en otras cárceles, impidiendo el funcionamiento de los administradores de correos en el mismo puerto en diferentes cárceles.)

Lo que he hecho:

  • edité /etc/rc.conf (en la máquina host) y se añadió la línea jail_sysvipc_allow="YES"
  • en la línea de /etc/sysctl.conf, agrego la máquina cárcel security.jail.sysvipc_allowed=1

He reiniciado la máquina de la cárcel varias veces. No reinicié la máquina host y no quiero.

Espero que alguien me puede dar una solución o algún consejo. Muchas gracias.

Este es el mensaje que aparece al reiniciar la cárcel:

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

O cuando corro sysctl manualmente: (en la cárcel)

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

versión de FreeBSD: FreeBSD xxxxxxx 9,1-SALIDA PREVISTA FreeBSD 9.1-PRERELEASE

versión de postgreSQL: postgresql-server-9.1.4

Mensaje

Error:

[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" 

Actualización:

en máquina anfitrión, /etc/sysctl.conf: security.jail.sysvipc_allowed = 1 /etc/rc.conf: jail_sysvipc_allow = "SÍ"

En el servidor Jail, no hay configuración jail_sysvipc adicional.

valor sysctl en la máquina host:

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

sigo teniendo el mismo mensaje de error a medida que fui antes.

En adicional, me pregunto si hay algo con security.jail.param.allow.sysvipc? Porque, en máquina host, no pude configurarlo. (Security.jail.param.allow.sysvipc 0-> 0)

+0

¿Qué versión de FreeBSD está utilizando? ¿Qué versión de PostgreSQL? –

+0

Además, ¿esto le está causando un problema específico? ¿Simplemente quieres mejorar el aislamiento entre las cárceles? ¿Estás teniendo problemas para comenzar Pg en una cárcel? ¿Cuál es el fondo? Incluya los comandos que ejecuta y los errores que producen, tal como lo hizo con el intento de solución sobre el que escribió. Por favor actualice su pregunta. –

+0

El mismo problema aquí, con FreeBSD-9.1, compilado hace dos días .. – drumfire

Respuesta

3

Encontré el problema después de la ayuda de mi compañero de equipo.

Como utilizo /etc/jail.conf, debo agregar una línea "allow.sysvipc" para habilitar la memoria compartida del sistema.

en la máquina anfitrión,

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

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

El sysctl security.jail.sysvipc_allowed tiene que ser establecido en el anfitrión, no en la cárcel. Pero si configura jail_sysvipc_allow="YES" en el rc.conf del host, que debería configurarlo para usted, vea /etc/rc.d/jail.

Debe verificar en el host si el valor de security.jail.sysvipc_allowed cambia a 1 si inicia la cárcel. Si no, probablemente haya algo mal en su rc.conf. Intente configurar security.jail.sysvipc_allowed manualmente en el host .

17

Solución encontrado. Lo siguiente funciona para mí. Por anfitrión, hacer:

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

Encuentra la JID correcta, 3 en mi ejemplo. A continuación, en la anfitrión, ejecuta:

jail -m jid=3 allow.sysvipc=1

6

Hay algunas nuevas características para la cárcel de granularidad especial, necesitamos permitir que el cambio sysvipc_allowed para cada cárcel poner esto en /etc/rc.conf:

jail_example_parameters="allow.sysvipc=1" 
0

Mi sistema requerido /etc/rc.conf modding antes de reiniciar la cárcel, de lo contrario sería establecer tanto el anfitrión como la cárcel a 0. no lo hice necesidad de establecer security.jail.sysvipc_allowed = 1 en/etc/sysctl.conf.

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