2010-01-13 17 views
10

Tôi đang trong quá trình thiết lập máy chủ để chạy ứng dụng Ruby on Rails trên Fedora 12, sử dụng Hành khách.Hành khách/mod_rails không khởi tạo được trong Fedora 12 khi khởi động Apache

Tôi đang ở giai đoạn mà tôi đã cài đặt tải hành khách, thiết lập nó theo quy định, nhưng có được các lỗi sau đây khi tôi khởi động lại Apache:

[Wed Jan 13 15:41:38 2010] [notice] caught SIGTERM, shutting down 
[Wed Jan 13 15:41:40 2010] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 
[Wed Jan 13 15:41:40 2010] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Wed Jan 13 15:41:40 2010] [error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /tmp/passenger.25235/.guard: Permission denied (13) 
[Wed Jan 13 15:41:40 2010] [notice] Digest: generating secret for digest authentication ... 
[Wed Jan 13 15:41:40 2010] [notice] Digest: done 
[Wed Jan 13 15:41:40 2010] [error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /tmp/passenger.25235/.guard: Permission denied (13) 
[Wed Jan 13 15:41:40 2010] [error] python_init: Python version mismatch, expected '2.6', found '2.6.2'. 
[Wed Jan 13 15:41:40 2010] [error] python_init: Python executable found '/usr/bin/python'. 
[Wed Jan 13 15:41:40 2010] [error] python_init: Python path being used '/usr/lib/python26.zip:/usr/lib/python2.6/:/usr/lib/python2.6/plat-linux2:/usr/lib/python2.6/lib-tk:/usr/lib/python2.6/lib-old:/usr/lib/python2.6/lib-dynload'. 
[Wed Jan 13 15:41:40 2010] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads. 
[Wed Jan 13 15:41:40 2010] [notice] mod_python: using mutex_directory /tmp 
[Wed Jan 13 15:41:40 2010] [notice] Apache/2.2.14 (Unix) DAV/2 Phusion_Passenger/2.2.9 PHP/5.3.0 mod_python/3.3.1 Python/2.6.2 mod_ssl/2.2.14 OpenSSL/1.0.0-fips-beta3 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations 

Như bạn có thể thấy, có một vấn đề quyền khi hành khách đang cố gắng khởi tạo:

[Wed Jan 13 15:41:40 2010] [error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /tmp/passenger.25235/.guard: Permission denied (13) 

Khi Apache là bắt đầu, nó tạo ra một tập tin trong/tmp:

d-ws--x--x. 2 root root 4096 2010-01-13 16:04 passenger.26117 

Nếu thay vào đó tôi chạy ứng dụng bằng cách bắn lên lai trực tiếp với mongrel_rails start -e production, tôi thấy như sau:

ActiveRecord::StatementInvalid (Mysql::Error: Can't create/write to file '/tmp/#sql_5d3_0.MYI' (Errcode: 13): SHOW FIELDS FROM `users`): 

Một lần nữa những điểm lỗi đến các vấn đề cho phép với /tmp thư mục.

Tôi đang thua lỗ như giải pháp là gì. Tôi không chắc liệu nó có liên quan đến quyền truy cập thư mục đơn giản hay bảo mật SELinux của Fedora hay không.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn.

Trả lời

13

tôi đã làm giống như Fred, ngoại trừ việc thay vì làm nó trở thành một lỗi tại một thời điểm:

  1. Đi vào chế độ dễ dãi bằng cách chạy setenforce 0
  2. Khởi động lại apache, và nhấn trang web của bạn và sử dụng nó cho một thời gian như bình thường
  3. Run grep httpd /var/log/audit/audit.log | audit2allow -M passenger
  4. semodule -i passenger.pp
  5. Quay trở lại chế độ thực thi bằng cách chạy setenforce 1
  6. Khởi động lại apache và kiểm tra trang web của bạn - hy vọng nó nên tất cả được làm việc như trước đây!

Lưu ý rằng đây về cơ bản là ví dụ cụ thể về quy trình trên trợ giúp Centos SELinux - hãy kiểm tra.

2

Chạy setenforce 0 trước khi bắt đầu sẽ cho phép bạn kiểm tra nếu đó là SELinux. Đừng quên chạy setenforce 1 sau đó.

+0

Cảm ơn bạn. Có vẻ như nó là SELinux. Chạy 'setenforce 0' trước khi khởi động lại Apache dẫn đến ứng dụng đang chạy. Có cái gì tôi có thể nhìn vào để không vô hiệu hóa SELinux, mà tôi giả định không phải là một ý tưởng tốt để vô hiệu hóa, nhưng có được ứng dụng của tôi đang chạy, với nó được kích hoạt? – dbarros

+0

'audit2why' và' audit2allow' có thể giúp bạn đưa ra chính sách SELinux để cho phép truy cập, nhưng tôi sẽ xem xét việc đặt các tệp ở nơi khác, ví dụ:/var/run/hành khách, là tốt. –

+0

Bạn đang đề xuất có thể đặt _PassengerTempDir_ trong VirtualHost của ứng dụng trong conf của Apache thành _/var/run/passenger_? – dbarros

3

Tôi đang gặp vấn đề tương tự trong CentOS 5.4, SELinux cản trở hành khách.

Thiết PassengerTempDir đến/var/run/hành khách chỉ đơn giản là mang đến cho bạn những lỗi tương tự cho phép trong thư mục mới thay vì/tmp:

[Mon Feb 22 11:42:40 2010] [error] *** Passenger could not be initialized because of this error: Cannot create directory '/var/run/passenger/passenger.3686' 

tôi sau đó có thể thay đổi bối cảnh an ninh của/var/run/hành khách vượt qua lỗi này:

chcon -R -h -t httpd_sys_content_t /var/run/passenger/ 

... và cho phép hành khách tạo ra các thư mục tạm, nhưng không phải các tập tin trong thư mục đó:

[Mon Feb 22 12:07:06 2010] [error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /var/run/passenger/passenger.3686/.guard: Permission denied (13) 

Thật kỳ lạ, việc chạy lại chcon đệ quy một lần nữa không vượt qua được lỗi này, nó vẫn tiếp tục chết tại thời điểm này, và đây là nơi mà kiến ​​thức SELinux của tôi trở nên u ám.

Các phần Phusion Passenger guide 6.3.5 và 6.3.7 có một số suy nghĩ hữu ích, nhưng chúng dường như không giải quyết được hoàn toàn vấn đề.

+0

Ert: Đó chính là nơi tôi cũng đang ở. Cuối cùng, tôi đã tắt SELinux để làm việc. Không lý tưởng, nhưng nó sẽ làm ngay bây giờ. – dbarros

+0

Tôi đã đi đến cùng một kết luận. – Ert

3

Bạn cần nhiều hơn chỉ là quyền httpd_sys_content_t.Tôi sử dụng các kỹ thuật sau đây để có được những thứ bắt đầu:

  • bắt đầu một cái đuôi trên nhật ký kiểm toán: tail -f /var/log/audit/audit.log
  • tải lại apache: apachectl restart
  • Chuyển đến/tmp/thư mục: cd /tmp
  • Nếu chỉ 1 dòng được thêm vào sử dụng lệnh: tail -1 /var/log/audit/audit.log | audit2allow -M httpdfifo
  • Lưu ý rằng tên 'httpdfifo' chỉ là tên được chọn để phản ánh loại lỗi đã được quan sát.
  • Điều này sẽ tạo một tệp có tên 'httpdfifo.pp'. Để cho phép apache tạo FIFO từ đây sau khi bạn phải phát lệnh: semodule -i httpdfifo.pp
  • Tiếp tục thực hiện việc này cho đến khi tất cả các lỗi kiểm tra được giải quyết (Phải mất 4 loại quyền khác nhau trên hệ thống của tôi chạy CentOS 5.4)
0

tôi đã cố gắng những gì Dan Sketcher và Fred Appleman đề nghị, tức là lặp lại như sau:

yum install setroubleshoot 
echo > /var/log/audit/audit.log # clear irrelevant errors 
cd ~ 
service httpd restart # try booting passenger -- audit.log now shows the relevant permission errors 
tail -f /var/log/httpd/error_log # check that passenger is still failing due to permission errors 
sealert -a /var/log/audit/audit.log > selinux-diag.txt # translate the permission errors 
# read and check that you are happy with selinux-diag.txt 
# and either follow its specific advice, or if it just wants you to grep into audit2allow, then: 
cat /var/log/audit/audit.log | audit2allow -M mypol # grant everything just denied 
semodule -i mypol.p # commit new permissions 

Nhưng sau khi thực hiện điều này 5 hoặc 6 lần, tôi vẫn tiếp tục mọc lên chống lại các lỗi mới, một số giống nhau lỗi xuất hiện ngay cả sau khi tôi đã cố gắng cho phép chúng với "audit2allow".

Cuối cùng tôi chỉ tắt SELinux, với:

echo 0 >/selinux/enforce 
Các vấn đề liên quan