2012-08-10 21 views
9

Có vấn đề khi tôi khởi động cơ sở dữ liệu PostgreSQL trong một nhà tù FreeBSD.FreeBSD: nhà tù không thể đặt security.jail.sysvipc_allowed

Tôi đã tìm thấy một bài viết về sự cố. Tôi đã thử lời khuyên của nó nhưng tôi không có may mắn và tôi không biết tại sao. Có liên kết: PostgreSQL in jail.

Tôi cũng đọc tài liệu PostgreSQL trên kernel resources:

Nếu chạy trong nhà tù FreeBSD bằng cách cho phép sysctl 's security.jail.sysvipc_allowed, Postmasters chạy trong nhà tù khác nhau nên được điều hành bởi người sử dụng hệ điều hành khác nhau. Điều này cải thiện an ninh vì nó ngăn người dùng không phải root can thiệp vào bộ nhớ hoặc semaphores dùng chung trong các nhà tù khác nhau và cho phép mã dọn dẹp IPP PostgreSQL hoạt động bình thường. (Trong FreeBSD 6.0 và sau đó là mã ngẫu nhiên IPC không phát hiện đúng các quy trình trong nhà tù khác, ngăn chặn các hoạt động của Postmasters trên cùng một cổng trong các nhà tù khác nhau.)

Những gì tôi đã làm:

  • tôi sửa /etc/rc.conf (trên máy chủ) và thêm dòng jail_sysvipc_allow="YES"
  • Trong dòng máy tù của /etc/sysctl.conf, tôi thêm security.jail.sysvipc_allowed=1

Tôi khởi động lại máy tính nhiều lần. Tôi đã không khởi động lại máy chủ và không muốn.

Hy vọng ai đó có thể cho tôi giải pháp hoặc một số lời khuyên. Cám ơn rất nhiều.

Đây là thông điệp khi tôi khởi động lại nhà tù:

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

Hoặc khi tôi chạy sysctl bằng tay: (trên tù)

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

FreeBSD phiên bản: FreeBSD xxxxxxx 9.1-prerelease FreeBSD 9.1-PRERELEASE

phiên bản postgreSQL: postgresql-server-9.1.4

Tin

Lỗi:

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

Cập nhật:

trong máy chủ, /etc/sysctl.conf: security.jail.sysvipc_allowed = 1 /etc/rc.conf: jail_sysvipc_allow = "YES"

Trong máy chủ Jail, không có thêm cấu hình jail_sysvipc.

giá trị sysctl trong máy chủ:

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

tôi vẫn nhận được thông báo lỗi tương tự như tôi có trước đó.

Ngoài ra, tôi tự hỏi liệu có bất kỳ điều gì với security.jail.param.allow.sysvipc không? Bởi vì, trong máy chủ, tôi không được phép đặt nó. (security.jail.param.allow.sysvipc 0-> 0)

+0

Bạn đang sử dụng phiên bản FreeBSD nào? Phiên bản PostgreSQL nào? –

+0

Ngoài ra, điều này có gây ra cho bạn một vấn đề cụ thể không? Bạn chỉ muốn cải thiện cách ly liên tù? Bạn đang gặp vấn đề bắt đầu Pg up trong một nhà tù? Nền là gì? Bao gồm các lệnh bạn chạy và các lỗi mà chúng tạo ra, giống như bạn có cho giải pháp đã thử mà bạn đã viết. Vui lòng cập nhật câu hỏi của bạn. –

+0

Cùng một vấn đề ở đây, với FreeBSD-9.1, được biên dịch cách đây hai ngày .. – drumfire

Trả lời

3

Tôi đã tìm thấy vấn đề sau khi sự giúp đỡ của đồng đội.

Vì tôi sử dụng /etc/jail.conf, tôi phải thêm dòng "allow.sysvipc" để bật bộ nhớ chia sẻ hệ thống.

trong máy chủ,

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

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

Sysctl security.jail.sysvipc_allowed phải được đặt trên máy chủ , không phải trong nhà tù. Nhưng nếu bạn đặt jail_sysvipc_allow="YES" trong máy chủ của rc.conf, bạn nên đặt nó cho bạn, xem /etc/rc.d/jail.

Bạn nên kiểm tra máy chủ lưu trữ nếu giá trị của security.jail.sysvipc_allowed thay đổi thành 1 nếu bạn bắt đầu nhà tù. Nếu không, có lẽ có gì đó sai trong rc.conf của bạn. Thử đặt security.jail.sysvipc_allowed theo cách thủ công trên máy chủ .

17

Giải pháp được tìm thấy. Sau đây không làm việc cho tôi. Trên chủ, làm:

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

Tìm JID đúng, 3 trong ví dụ của tôi. Sau đó, trên chủ, vấn đề:

jail -m jid=3 allow.sysvipc=1

6

Có một số tính năng mới cho tù trong granularity đặc biệt, chúng ta cần cho phép thay đổi sysvipc_allowed cho mỗi tù đặt này trong /etc/rc.conf:

jail_example_parameters="allow.sysvipc=1" 
0

hệ thống yêu cầu tôi modding /etc/rc.conf trước khi khởi động lại nhà tù, nếu không nó sẽ đặt cả máy chủ và tù đến 0. tôi đã làm không cần phải thiết lập security.jail.sysvipc_allowed = 1 trong/etc/sysctl.conf.

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