2012-09-13 11 views
7

My log lỗi apache là đầy đủ củaLàm thế nào để xác định file apache "không thể mở để đọc" trong nhật ký lỗi

Error opening file for reading: Permission denied 
Error opening file for reading: Permission denied 
Error opening file for reading: Permission denied 

, vv

Làm thế nào tôi có thể xác định các tập tin hoặc thư mục của file đó là gây ra lỗi quyền này? Không có mối quan hệ trực tiếp giữa các lỗi xuất hiện và yêu cầu access_log.

Googling suggests tôi nên sử dụng strace nhưng khi tôi làm

strace apache2 

hoặc

strace -etrace:open apache2 

phản ứng là verbose và kể từ khi tôi đã không thực sự sử dụng công cụ này thành công trước đó, tôi không chắc chắn nên tìm gì. Dưới đây là một dấu vết của những gì xuất hiện.

..... 
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3 
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3 
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 
apache2: bad user name ${APACHE_RUN_USER} 

Dòng cuối cùng là thứ duy nhất có vẻ là nguyên nhân, nhưng máy chủ web của tôi đang xử lý hình ảnh và tất cả các loại đĩa sẽ là vấn đề nếu người dùng apache không đủ.

Cảm ơn.

Trả lời

2

Tôi không hiểu nhiều về strace, nhưng tôi nghĩ bạn sẽ cần phải thực hiện một vài thứ khác để Apache chạy theo ý bạn.

Nếu bạn chỉ chạy nhị phân apache2, chương trình của bạn sẽ dừng (như bạn đã lưu ý) với tên người dùng xấu vì thường tên người dùng/nhóm apache được đặt làm cấu phần (trong/etc/apache2/envvars trên Cài đặt Ubuntu 12.04).

Điều tôi thấy dễ nhất là tìm tập lệnh apachectl trên máy của tôi và tìm kiếm "bắt đầu)". Bạn sẽ tìm thấy một dòng giống như:

$HTTPD ${APACHE_ARGUMENTS} -k $ARGV

bạn có thể thêm strace bạn ở đây để nó trông giống như:

strace -etrace:open -f $HTTPD ${APACHE_ARGUMENETS} -k $ARGV

Bạn cần phải bao gồm các tùy chọn -f như apache sẽ đẻ trứng một số quy trình và bạn muốn theo dõi tất cả các khả năng nhất, ít nhất đây là những gì đã làm việc cho tôi :)

+0

Xin chào Chris, cảm ơn câu trả lời của bạn. Tôi bỏ bê để bỏ phiếu vào thời điểm đó, và không thể thành thật nhớ những gì vấn đề, cũng không phải là giải pháp bây giờ !! –

0

Bạn cần tìm kiếm các cuộc gọi đến open() dẫn đến trả lại giá trị -1, errno == EACCES.

tôi phải tinh chỉnh dòng sau strace lệnh trên ubuntu (trong/usr/sbin/apachectl):

strace -o /tmp/strace.log -e trace=open -f $HTTPD ${APACHE_ARGUMENTS} -k $ARGV 

Các -o cửa hàng đầu ra trong một tập tin. Sử dụng một thư mục đích thích hợp nếu bạn lo lắng về việc rò rỉ tên tập tin trong một khu vực có thể đọc được bởi tất cả mọi người.

Tôi đang theo đuổi một lỗi tương tự với chương trình python đang chạy trong apache mod wsgi. Tôi đang tìm những ...

3556 open("/proc/self/auxv", O_RDONLY) = -1 EACCES (Permission denied) 

Tôi nghĩ rằng lỗi của tôi đã làm với thực tế là quá trình lao động wsgi giảm đặc quyền từ root sang user thường xuyên chạy các ứng dụng, nhưng sau khi thả đặc quyền, /proc/self/auxv vẫn đọc được các quy trình thông thường. -- có lẽ.