kai*_*rhl 9 postgresql freebsd jail
我在FreeBSD jail中初始化PostgreSQL数据库时出现问题.
我发现了一篇关于这个问题的文章.我尝试了它的建议,但我没有运气,我不知道为什么.有链接:PostgreSQL在监狱里.
我还阅读了有关内核资源的PostgreSQL文档:
如果能够在FreeBSD的监狱运行
sysctl
的security.jail.sysvipc_allowed
,在不同的监狱运行邮政局长应该由不同的操作系统用户运行.这提高了安全性,因为它可以防止非root用户干扰不同jail中的共享内存或信号量,并且它允许PostgreSQL IPC清理代码正常运行.(在FreeBSD 6.0及更高版本中,IPC清理代码无法正确检测其他jail中的进程,从而阻止了不同jail中同一端口上的postmaster运行.)
我做了什么:
/etc/rc.conf
(在主机上)并添加了该行jail_sysvipc_allow="YES"
/etc/sysctl.conf
,我添加线security.jail.sysvipc_allowed=1
我多次重启监狱机器.我没有重新启动主机而不想.
希望有人可以给我一个解决方案或一些建议.非常感谢.
这是重新启动jail时的消息:
/etc/rc.d/sysctl: WARNING: unable to set security.jail.sysvipc_allowed=1
Run Code Online (Sandbox Code Playgroud)
或者当我手动运行sysctl时:(在监狱里)
root@xxxxx:/home/xxxx# sysctl security.jail.sysvipc_allowed=1
security.jail.sysvipc_allowed: 0
sysctl: security.jail.sysvipc_allowed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
更新:
在主机上,/ etc/sysctl.conf:security.jail.sysvipc_allowed = 1 /etc/rc.conf:jail_sysvipc_allow ="YES"
在Jail服务器中,没有额外的jail_sysvipc配置.
主机中的sysctl值:
root@xxxxx:/home/xxxx# sysctl -a | grep 'sysvipc'
security.jail.param.allow.sysvipc: 0
security.jail.sysvipc_allowed: 1
Run Code Online (Sandbox Code Playgroud)
我仍然得到与之前相同的错误消息.
另外,我想知道是否有任何与security.jail.param.allow.sysvipc?因为,在主机中,我不被允许设置它.(security.jail.param.allow.sysvipc 0-> 0)
dru*_*ire 18
找到解决方案 以下内容对我有用.在主机上,执行:
root@host# jls JID IP Address Hostname Path 3 - some.jail /usr/jails/somejail
在我的示例中找到正确的JID,3.然后,在主机上发出:
jail -m jid=3 allow.sysvipc=1
小智 6
jid有一些特殊粒度的新功能,我们需要允许在/etc/rc.conf中为每个jail添加sysvipc_allowed:
jail_example_parameters="allow.sysvipc=1"
Run Code Online (Sandbox Code Playgroud)
经过队友的帮助我发现了问题。
因为我使用/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)
Run Code Online (Sandbox Code Playgroud)