FreeBSD: джейл не может установить security.jail.sysvipc_allowed
Существует проблема, когда я запускаю базу данных PostgreSQL в тюрьме FreeBSD.
Я нашел статью о проблеме. Я попробовал его совет, но мне не повезло, и я не знаю почему. Есть ссылка: PostgreSQL в тюрьме.
Я также прочитал документацию PostgreSQL по ресурсам ядра:
Если вы работаете во FreeBSD jails, включив
sysctl
"ssecurity.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"