FreeBSD: джейл не может установить security.jail.sysvipc_allowed

Существует проблема, когда я запускаю базу данных PostgreSQL в тюрьме FreeBSD.

Я нашел статью о проблеме. Я попробовал его совет, но мне не повезло, и я не знаю почему. Есть ссылка: PostgreSQL в тюрьме.

Я также прочитал документацию PostgreSQL по ресурсам ядра:

Если вы работаете во FreeBSD jails, включив sysctl"s security.jail.sysvipc_allowedПочтовые мастера, работающие в разных тюрьмах, должны запускаться разными пользователями операционной системы. Это повышает безопасность, поскольку предотвращает вмешательство не-root-пользователей в общую память или семафоры в разных тюрьмах и позволяет корректно функционировать коду очистки PostgreSQL IPC. (В FreeBSD 6.0 и более поздних версиях код очистки IPC не определяет должным образом процессы в других тюрьмах, предотвращая запуск почтовых мастеров на одном и том же порту в разных тюрьмах.)

Что я сделал:

  • Я редактировал /etc/rc.conf (на хост-машине) и добавил строку jail_sysvipc_allow="YES"
  • В тюрьме машины /etc/sysctl.confДобавляю строчку security.jail.sysvipc_allowed=1

Я перезапустил тюремную машину несколько раз. Я не перезагружал хост-машину и не хочу.

Надеюсь, кто-нибудь может дать мне решение или совет. Спасибо.

Это сообщение, когда я перезапускаю тюрьму:

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

Или когда я запускаю sysctl вручную: (в тюрьме)

 root@xxxxx:/home/xxxx# sysctl security.jail.sysvipc_allowed=1
 security.jail.sysvipc_allowed: 0
 sysctl: security.jail.sysvipc_allowed: Operation not permitted

Версия Freebsd: FreeBSD xxxxxxx 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE

версия postgreSQL: postgresql-server-9.1.4

Сообщение об ошибке:

 root@xxxxxx:/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"

Обновить:

в хост-машине /etc/sysctl.conf: security.jail.sysvipc_allowed=1 /etc/rc.conf: jail_sysvipc_allow="ДА"

На сервере Jail нет дополнительной конфигурации jail_sysvipc.

Значение sysctl в хост-машине:

   root@xxxxx:/home/xxxx# sysctl -a | grep 'sysvipc'
   security.jail.param.allow.sysvipc: 0
   security.jail.sysvipc_allowed: 1

Я получаю то же сообщение об ошибке, что и раньше.

Кроме того, мне интересно, если есть что-нибудь с security.jail.param.allow.sysvipc? Потому что на хост-машине мне не разрешили его установить. (security.jail.param.allow.sysvipc 0-> 0)

5 ответов

Решение

Я нашел проблему после помощи моего товарища по команде.

Поскольку я использую /etc/jail.conf, мне нужно добавить строку "allow.sysvipc", чтобы включить системную общую память.

в хост-машине,

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

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

Решение найдено. Следующее действительно работает для меня. На хосте сделайте:

root @ host # jls
   JID IP-адрес Имя хоста Путь
     3  -               some.jail                     /usr/jails/somejail

Найдите правильный JID, 3 в моем примере. Затем на хосте выдайте:

jail -m jid=3 allow.sysvipc=1

Есть несколько новых функций для джейла в особой детализации, нам нужно разрешить изменение sysvipc_allowed для каждой джейла, поместив это в /etc/rc.conf:

jail_example_parameters="allow.sysvipc=1"

Sysctl security.jail.sysvipc_allowed должен быть установлен на хосте, а не в тюрьме. Но если вы установите jail_sysvipc_allow="YES" в принимающей rc.conf, который должен установить это для вас, видите /etc/rc.d/jail,

Вы должны проверить на хосте, если значение security.jail.sysvipc_allowed изменяется на 1, если вы запускаете тюрьму. Если нет, то, вероятно, что-то не так в вашем rc.conf. Попробуйте установить security.jail.sysvipc_allowed вручную на хосте.

Моей системе требовалось изменить /etc/rc.conf перед перезапуском джейла, в противном случае для хоста и джейла было установлено значение 0. Мне не нужно было устанавливать security.jail.sysvipc_allowed=1 в /etc/sysctl.conf.

/etc/rc.conf:
jail_sysvipc_allow="YES"
Другие вопросы по тегам