2011-01-25 47 views
5

Đây là một vấn đề về Apache/Perl mà tôi đang gặp phải.Perl CGI Scripts không thể tìm thấy các mô-đun trong thư viện

Tôi đang sử dụng Mô-đun CPAN trong ứng dụng CGI perl của mình. Đó là bảng tính :: ParseExcel

Tôi đã cài đặt mô-đun cpan với các tệp tar.gz.

Tôi đã cài đặt các phụ thuộc.

Tuy nhiên, tôi đã làm như vậy với tư cách là người dùng không phải root. Thư viện chứa các tệp này nằm trong thư mục người dùng,/home/user/lib

Bây giờ, tôi đã định cấu hình thành công Apache2 trên hộp này. Thư mục html là/var/www/html và thư mục cgi là/var/www/html/cgi-bin. Tôi đã xác minh họ làm việc vì tất cả các kịch bản trong thư mục đó không yêu cầu các mô-đun đặc biệt làm việc trong trình duyệt firefox của tôi, tức là. xin chào thế giới, bãi dữ liệu, biểu mẫu đơn giản.

Tuy nhiên, khi tôi cố gắng chạy tập lệnh sử dụng "Bảng tính :: ParseExcel", tôi gặp lỗi khi không tìm thấy mô-đun trong @INC. Tuy nhiên, tôi có một tuyên bố "sử dụng lib" ở đầu tập lệnh để thêm thư viện.

Các tập lệnh có thể chạy trong PUTTY mà không gặp sự cố. Chỉ khi chạy kịch bản từ trình duyệt, tôi mới gặp phải vấn đề.

Ứng dụng web này được viết trên một hộp khác và hoạt động tốt trên hộp đó. Bởi vì tôi phát triển ở đó tất nhiên. Tôi đặt Apache2 trên máy Ubuntu cá nhân của mình và cài đặt ứng dụng web cũng như các mô-đun ở đây và nó hoạt động trên hộp địa phương của tôi.

Tôi đã đặt "chmod -R a + rx" thành thư mục thư viện người dùng, vì vậy tôi nghĩ Apache có quyền truy cập vào thư mục, trừ khi cài đặt của thư mục mẹ đang chặn thư mục đó? Tôi không phải chạy nó trên thư mục/home/user, hoặc tệ hơn, thư mục/home, phải không?

Mọi thông tin chi tiết về vấn đề này?

Cảm ơn tất cả vì đã dành thời gian của bạn!

Trả lời

1

Hai suy nghĩ ở đây:

  1. các @ INC nó nói trong các lỗi về việc thiếu module là gì, nó bao gồm đường dẫn mà bạn thêm vào thông qua use lib?
  2. Người dùng Apache có quyền truy cập vào thư mục này không? Thư mục nhà khá thường xuyên có quyền từ chối truyền tải bởi các tài khoản khác. Kiểm tra các điều khoản từ thư mục mô-đun tất cả các con đường lên, đảm bảo o có tại r-x ở mức tối thiểu cho tất cả các thư mục và tập tin vào mô-đun của bạn.
+0

Thư mục đầu tiên được liệt kê trong lỗi @INC, là thư mục thư viện được đề cập. Tôi không chắc chắn người dùng apache đang sử dụng để cố gắng truy cập các tệp 'không ai' hoặc 'người dùng www', nhưng tôi đang hướng tới vấn đề quyền. Có, toàn bộ thư viện có quyền r-x cho chủ sở hữu, nhóm và người dùng. – bleutyler

+0

Không chỉ là thư mục của mô-đun. Ví dụ, nếu module là /home/tydel/lib/perl/Net/BoogieTime.pm, mỗi thư mục từ/up sẽ yêu cầu o + rx ở mức tối thiểu.Điều này bao gồm/home,/home/tydel,/home/tydel/lib và/home/tydel/lib/perl,/home/tydel/lib/perl/Net và cuối cùng/home/tydel/lib/perl/Net /BoogieTime.pm sẽ cần o + r. Hy vọng rằng sẽ giúp. –

3

Người dùng Apache không thể truy cập/home/user/lib nếu người dùng không có quyền truy cập/home/user, ngay cả khi quyền trên/home/user/lib sẽ cho phép truy cập.

Ví dụ: nếu bạn sở hữu tệp trong/root, bạn vẫn không thể truy cập tệp nếu bạn không có quyền truy cập vào/root.

+0

Aha, tôi hiểu rồi. Cám ơn bạn vì đã chỉ ra điều này. Vì vậy, nó phải được tốt hơn để đặt thư viện cho các mô-đun perl trong một cái gì đó như/usr/local/lib! – bleutyler

+0

@ user589905: ... hoặc chỉ làm cho '/ home/user /' có thể đọc được/thế giới thực thi ('drwxr-xr-x'). Trong phần lớn các trường hợp, khả năng chia sẻ dữ liệu trong thư mục chính của bạn quan trọng hơn nhiều so với việc tạo mọi thứ có riêng tư nghiêm ngặt (đặc biệt là vì bạn có thể tạo một thư mục con riêng cho số lượng dữ liệu thường rất nhạy cảm). –

+0

Tôi đang đối mặt với một vấn đề tương tự, giải pháp này có hiệu quả với bạn không, bởi vì nó không dành cho tôi. Tôi đã kiểm tra tất cả quyền truy cập thư mục, quyền truy cập của người dùng nhưng tôi vẫn đang gặp sự cố này. –

Các vấn đề liên quan