Máy chủ web chế độ hạt nhân: Tối ưu hóa thông minh hay cơn ác mộng bảo mật?


28

Tôi đã đọc một chủ đề Hacker News nơi một người dùng đăng một liên kết từ năm 2011 giải thích rằng IIS nhanh hơn nhiều so với hầu hết các máy chủ web (* nix) khác. Một người dùng khác trả lời, giải thích rằng IIS có được lợi thế đó bằng cách có một mô-đun hạt nhân gọi là HTTP.sys . Theo hiểu biết của tôi, hầu hết các máy chủ web phổ biến khác trong năm 2015 không làm điều này.

Tôi sẽ không bao giờ muốn viết một máy chủ web chế độ kernel, bởi vì tôi không bao giờ có thể tin tưởng bản thân mình để làm cho nó không bị khai thác bảo mật (sẽ ít nghiêm trọng hơn khi chạy trong vòng bảo vệ thấp hơn).

Từ quan điểm của kỹ sư phần mềm (trái ngược với khách hàng cho các máy chủ web), việc chạy trong chế độ kernel có phải là một quyết định hiệu suất thông minh? Những lo ngại về bảo mật có thể được giảm thiểu trong việc phát triển ứng dụng đến mức làm cho máy chủ chế độ kernel trở thành lợi nhuận ròng cho người tiêu dùng không?


5
"Lỗi máy chủ là trang web câu hỏi và trả lời cho quản trị viên hệ thống và mạng." Sysadmin và quản trị viên mạng không viết máy chủ web; họ cài đặt và bảo trì chúng. Tôi nghĩ rằng câu hỏi về chế độ kernel / chế độ người dùng có liên quan nhiều hơn tại thời điểm phát triển so với thời gian cài đặt. Tôi không phiền khi câu hỏi được chuyển đi đâu đó phù hợp hơn, nhưng tôi cảm thấy như Server Fault sẽ không tìm thấy nó trong chủ đề.
James Mishra

Ok, đọc lại câu hỏi một lần nữa, tôi đoán nó có thể được hiểu là một câu hỏi kiến ​​trúc phần mềm chung, và không phải là một câu hỏi về ưu và nhược điểm của các máy chủ web hiện tại, vì vậy đã rút lại phiếu bầu chặt chẽ của tôi. Nhưng bạn có thể cân nhắc chỉnh sửa câu hỏi của mình để làm nổi bật khía cạnh kiến ​​trúc phần mềm chung.
Doc Brown

2
Bất cứ ai nghĩ rằng máy chủ web chế độ kernel có thể cải thiện hiệu suất vì nó không phải chuyển đổi ngữ cảnh nên đọc: Số độ trễ mà mọi lập trình viên nên biết . Chuyển đổi ngữ cảnh đầy đủ trong Linux có giá khoảng 3000ns ( nguồn ), nhưng nhiều tòa nhà không thực sự cần chuyển đổi ngữ cảnh đầy đủ và có thể xuống tới 50ns, tôi không có số cho Windows. Đây là một nơi nào đó dọc theo cột 2/3. Kết luận: giảm thiểu yêu cầu mạng và đĩa, đừng lo lắng về chuyển đổi ngữ cảnh.
Lie Ryan

Câu trả lời:


24

Http.sys không phải là một máy chủ web như một công cụ chuyển tiếp proxy. Nó được thiết kế để cho phép nhiều máy chủ web cùng tồn tại trên một hộp Windows, do đó bạn có thể có IIS chạy một trang web, nhưng cũng có một số dịch vụ WCF chạy với giao diện http / REST hoặc SOAP, tất cả đều có trên cổng tiêu chuẩn 80. (đây là lý do tại sao bạn không thể chạy Apache trên Windows mà không có một chút lộn xộn, Apache đã không được sửa đổi để hoạt động với hệ thống đăng ký này, xấu hổ vì nó không được minh bạch hơn cho các ứng dụng và yêu cầu một số sửa đổi khá phức tạp để nối vào nó).

Cách thức hoạt động là bạn đăng ký URL với nó và ứng dụng tương ứng, ans khi yêu cầu http được thực hiện trên cổng 80, http.sys chấp nhận nó nhưng sau đó chuyển yêu cầu tới bất kỳ ứng dụng nào được đăng ký để xử lý mục tiêu URL đó.


Tôi nghi ngờ một máy chủ web chế độ nhân có ý nghĩa - ngay cả khi hiệu suất của socket có thể được cải thiện theo cách này, để thực hiện bất kỳ công việc hữu ích nào, logic ứng dụng vẫn sẽ được thực thi trong không gian người dùng, do đó luôn có sự chuyển đổi - bạn ' ve chỉ cần di chuyển nó dọc theo cửa sổ một chút.


11
Lợi ích chính của một máy chủ đầy đủ trong chế độ kernel là trong việc phục vụ các tệp tĩnh: điều này có thể được thực hiện mà không cần chuyển sang chế độ người dùng. Cache cũng có thể.
Jules

3
Tôi nghĩ HTTP.sys là từ thời kỳ mà chu kỳ CPU khan hiếm hơn rất nhiều ... Ngay cả khi phục vụ các tệp tĩnh nhỏ (đó là trường hợp thuận lợi nhất cho HTTP.sys), máy chủ HTTP ở chế độ người dùng hoàn toàn có thể sẽ tối đa hóa hầu hết các mạng .
usr

4
@usr Http.sys là một điều tương đối mới, được giới thiệu trong Windows Server 2003. Tôi khá chắc chắn rằng nó có thể chạy nhiều dịch vụ API web nghe trên cổng 80 cùng một lúc.
gbjbaanb

2
@gbjbaanb một máy chủ chế độ người dùng cũng có thể cho phép điều đó. Windows có khả năng chia sẻ bộ nhớ (cho bộ đệm) và chuyển một tay cầm ổ cắm sang một quy trình khác.
usr

1
@JamesMishra Trong suy nghĩ của tôi, vâng. Trước đó, CPU có thể mạnh hơn> 10 lần. Ngoài ra, tư duy bảo mật đã không thực sự ở đó. Hôm nay nó chỉ là một cuộc gọi xấu.
usr

14

Http.sys không phải là máy chủ web chế độ nhân duy nhất có sẵn: trong Linux cũng có tux . Như bạn đã xác định chính xác, bảo mật là mối quan tâm với các loại máy chủ này, điều này dẫn đến tux không được đưa vào kernel linux dòng chính (và tôi tin rằng không được cập nhật cho các phiên bản kernel mới hơn).

Một giải pháp tốt hơn sẽ là sử dụng một hệ điều hành không dựa vào bảo vệ phần cứng để thực thi bảo mật quy trình, ví dụ như điểm kỳ dị của Microsoft: một hệ thống như vậy sẽ cho phép tăng hiệu quả của máy chủ chế độ kernel mà không gặp rủi ro bảo mật. Thật không may, không có hệ điều hành sẵn sàng sản xuất nào dựa trên nguyên tắc này có sẵn vào năm 2015 và AFAIK không ai làm việc nghiêm túc cả (dự án Singularity đã bị hủy).


Vấn đề lớn với cách tiếp cận của Singularity là nó có nghĩa là một nhưng trong JITter có thể dễ dàng dẫn đến sự leo thang đặc quyền.
CodeInChaos

2
Bài viết trên Wikipedia là một bài đọc thú vị. Thục có thể chuyển tiếp các yêu cầu HTTP cho nội dung không tĩnh đến một máy chủ web "thực" như Apache, nghe có vẻ giống như những gì mà http.sys được sử dụng cho. Tôi không thể biết liệu Thục có hoạt động như http.sys hay không, nhưng dựa trên những gì tôi đọc được, có vẻ như các nhà phát triển nhân Linux sẽ không đồng ý với quyết định của Microsoft.
James Mishra

10

Http.sys có rủi ro thấp, vì nó không thể chạy bất kỳ đối phó nào được cung cấp bởi bên thứ 3.

Http.sys thực hiện một vài nhiệm vụ.

  • Nó hoạt động như một trình chuyển tiếp proxy, do đó cho phép nhiều quá trình phản hồi để yêu cầu các phần khác nhau của không gian tên HTTP. gbjbaanb câu trả lời bao gồm điều này tốt.

  • Nó phục vụ các tệp tĩnh, trực tiếp từ bộ đệm của tệp windows. Điều này cung cấp một tốc độ tuyệt vời cho các tệp nhỏ tệp tĩnh, vì không có chuyển đổi ngữ cảnh.

  • Nó sẽ lưu trữ đầu ra từ bất kỳ ứng dụng nào mà nó chuyển tiếp yêu cầu HTTP đến và trả về kết quả đã đổi thành tiền mặt. Ứng dụng này hoàn toàn kiểm soát thời gian (nếu có) bộ nhớ đệm kéo dài.

Http.sys được thiết kế để thực hiện các tác vụ đơn giản RẤT nhanh chóng, trong khi chuyển mọi thứ khác sang một quy trình trong không gian người dùng.

Đáp lại bình luận

"Rủi ro thấp, vì nó không thể chạy bất kỳ mã nào do bên thứ 3 cung cấp" - Đó là những gì họ luôn nói, và nó gần như không bao giờ đúng.

Vấn đề là bạn phải tin tưởng Microsoft viết mã hạt nhân phức tạp để đặt câu hỏi này, nếu không bạn quyết định không sử dụng windows cho lưu trữ web . Http.sys thêm rất ít vào nguy cơ lỗi kernel, do dù sao thì kernel cũng phức tạp.

Nếu bất cứ điều gì http.sys làm giảm rủi ro, vì có một sự phân tách rõ ràng như vậy bên dưới mã phục vụ và mã ứng dụng web cấp độ thấp.

Trong một thiết lập được thiết kế tốt, máy (hoặc máy chủ ảo) chạy máy chủ web có quyền truy cập rất hạn chế vào phần còn lại của mạng, vì đây là mục tiêu rủi ro cao. Nó rất khác nhau nếu kernel hoặc máy chủ web ở chế độ người dùng bị hack, vì máy chủ không nên có thêm bất kỳ quyền nào trên mạng, sau đó quá trình chế độ người dùng máy chủ web cần thực hiện công việc của nó.


1
Các ứng dụng Usermode thường được viết bằng các ngôn ngữ an toàn loại trừ hầu hết các lỗi dựa trên tham nhũng bộ nhớ (đây thường là những lỗi dẫn đến thực thi mã từ xa).
CodeInChaos

3
Tôi không chắc chắn nếu tôi mua lập luận rằng nếu tôi tin tưởng Microsoft viết mã hạt nhân, thì đó là một bước nhảy nhỏ để tin tưởng họ viết mã máy chủ web chế độ kernel. Tôi khá ngây thơ từ góc độ bảo mật thông tin, nhưng tôi tưởng tượng việc vũ khí hóa bộ đệm tràn trong http.sys sẽ dễ dàng hơn nhiều so với trình điều khiển thiết bị hoặc một phần khác của hạt nhân cách xa Internet.
James Mishra
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.