9

FreeBSDjailでPostgreSQLデータベースを初期化すると問題が発生します。

問題についての記事を見つけました。私はそのアドバイスを試しましたが、運がなかったので、理由がわかりません。リンクがあります:刑務所内のPostgreSQL

カーネルリソースに関するPostgreSQLのドキュメントも読みました。

を有効にしてFreeBSDjailで実行している場合sysctlsecurity.jail.sysvipc_allowed異なるjailで実行されているポストマスターは、異なるオペレーティングシステムユーザーによって実行される必要があります。これにより、root以外のユーザーが異なるjail内の共有メモリやセマフォに干渉するのを防ぎ、PostgreSQLIPCクリーンアップコードが正しく機能するようになるため、セキュリティが向上します。(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を手動で実行する場合:( jailで)

 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 = "YES"

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)

4

5 に答える 5

18

解決策が見つかりました。以下は私のために働きます。ホストで、次のことを行います。

root @ host#jls
   JIDIPアドレスのホスト名パス
     3-some.jail / usr / jails / somejail

正しいJID、私の例では3を見つけます。次に、ホストで、次を発行します。

jail -m jid=3 allow.sysvipc=1

于 2012-09-10T13:34:18.917 に答える
6

特別な粒度のjailにはいくつかの新機能があります。これを/etc/rc.confに配置する各jailに対してsysvipc_allowedを変更できるようにする必要があります。

jail_example_parameters="allow.sysvipc=1"
于 2012-11-15T15:10:07.420 に答える
3

チームメイトの助けを借りて問題を見つけました。

/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) 
于 2012-08-14T17:30:26.207 に答える
2

sysctlは、jailではなく、ホストsecurity.jail.sysvipc_allowedで設定する必要があります。ただし、ホストに設定した場合は、それが設定されているはずです。を参照してください。jail_sysvipc_allow="YES"rc.conf/etc/rc.d/jail

security.jail.sysvipc_allowedjailを開始した場合、値が1に変わるかどうか、ホストを確認する必要があります。そうでない場合は、rc.confに何か問題がある可能性があります。ホストsecurity.jail.sysvipc_allowedで手動で設定してみてください。

于 2012-08-12T23:31:28.033 に答える
0

私のシステムでは、jailを再起動する前に/etc/rc.confを変更する必要がありました。そうしないと、ホストとjailの両方が0に設定されます。/etc/sysctl.confでsecurity.jail.sysvipc_allowed=1を設定する必要はありませんでした。

/etc/rc.conf:
jail_sysvipc_allow="YES"
于 2013-05-08T01:17:13.367 に答える