Apache có thể được cấu hình để chỉ phục vụ các tệp có thể đọc được không?


1

Tôi đang chạy một máy chủ web Apache thử nghiệm chỉ để giải trí. Một phần của ý tưởng đằng sau máy chủ này là nó nên được mở một cách bất thường cho công chúng; ví dụ, hệ thống tập tin gốc nên được mở cho bất kỳ ai duyệt. (Thật vậy, đây là: http://sylvester.s.zbasu.net/rootfs/ ) Hậu quả là an ninh sẽ ngồi ở ghế sau.

Điều đó nói rằng, có những thứ mà Apache sẽ có thể truy cập, nhưng công chúng thì không. Ví dụ mà tôi đang chạy vào là một trang web Django. Tập tin settings.py phải được đọc bởi Apache, nếu không Django sẽ không hoạt động. Nhưng settings.py công chúng không thể đọc được, vì nó chứa một khóa bí mật. Vì vậy, tập tin nên được sở hữu bởi www-data, nhưng Apache vẫn nên từ chối phục vụ nó.

Một giải pháp khả thi (nhờ ellipsis753 trên Freenode) là tạo một lệnh đặc biệt, có lẽ trong một .htaccess tệp, bảo Apache không phục vụ tệp này. Tuy nhiên, tôi cho rằng nếu một tệp không thể đọc được bởi tất cả người dùng thì có lẽ nó cũng không nên được phục vụ bởi Apache.

Tôi có thể nói với Apache rằng nếu một tệp không thể đọc được trên thế giới thì nó không nên được phục vụ?

Câu trả lời:


1

Nếu bạn chạy ứng dụng Django của mình trong FastCGI hoặc trong chế độ Daemon của mod_wsgi, thì bạn có thể chạy nó với tư cách người dùng khác với người dùng Apache đang chạy. Sau đó, bạn hoàn toàn có thể xóa quyền của Apache và Thế giới để đọc bất kỳ tệp nào bạn không muốn phục vụ.

Ví dụ: lưu ý rằng tập tin mật khẩu của bạn /etc/shadow đã không thể truy cập được vì Apache không có quyền trên đó và nó không thể đọc được trên thế giới. Nếu bạn tạo một người dùng mới, hãy nói web-apps ví dụ và thêm WSGIDaemonProcess myapp user=web-apps ... với cấu hình Apache, sau đó bạn có thể sở hữu ứng dụng Django web-apps người dùng, với tệp cấu hình của nó không thể đọc được trên thế giới, như shadow tập tin đã có.


Yup, hoạt động. Tất nhiên, tôi cần thêm một WSGIProcessGroup Chỉ thị là tốt. Vì một số lý do, tôi cũng phải chỉnh sửa wsgi.py để thêm thư mục dự án vào sys.path, như được mô tả trong câu trả lời StackOverflow này: stackoverflow.com/a/4750766/1108505 Tôi không biết tại sao điều này lại cần thiết khi sử dụng WSGIDaemonProcess nhưng không cần thiết khác.
Tanner Swett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.