Çekirdek modu web sunucuları: Akıllı bir optimizasyon veya güvenlik kabusu?


28

Bir kullanıcının 2011'den beri, IIS'nin diğer birçok (* nix) web sunucusundan çok daha hızlı olduğunu açıklayan bir bağlantı gönderdiği bir Hacker News dizisi okuyordum . Başka bir kullanıcı yanıt verir, IIS'nin HTTP.sys adlı bir çekirdek modülüne sahip olarak bu avantajı elde ettiğini açıklar . Bildiğim kadarıyla, 2015'teki diğer popüler web sunucuları bunu yapmıyor.

Asla bir çekirdek modu web sunucusu yazmak istemem, çünkü güvenlik açıklarından kurtulmak için kendime asla güvenemem (bu, daha düşük bir koruma halkasında çalışmanın daha az ciddi olmasını sağlar).

Yazılım mühendisinin bakış açısından (web sunucuları için bir müşterinin aksine), çekirdek modunda akıllı bir performans kararı mı çalışıyor? Uygulama geliştirilmesinde çekirdek modu sunucusunu tüketici için net bir kar haline getirme noktasına kadar güvenlik endişeleri azaltılabilir mi?


5
"Sunucu Hatası, sistem ve ağ yöneticileri için bir soru ve cevap sitesidir." Sysadmins ve ağ yöneticileri web sunucuları yazmaz ; onları kurar ve bakımını yaparlar. Çekirdek modu / kullanıcı modu sorununun geliştirme aşamasında kurulum zamanından daha önemli olduğunu düşünüyorum. Sorunun daha alakalı bir yere taşınmasını umursamıyorum, ancak Sunucu Arızasının da konuyu bulamayacağını düşünüyorum.
James Mishra

Tamam, soruyu tekrar okuduğumda, genel bir yazılım mimarisi sorusu olarak yorumlanabileceğini ve mevcut web sunucularının artıları ve eksileri hakkında bir soru olarak yorumlanamayacağını düşünüyorum, bu yüzden yakın oylamam geri çekildi. Ancak, genel yazılım mimarisi yönünü vurgulamak için sorunuzu düzenlemeyi düşünebilirsiniz.
Doktor Brown

2
Çekirdek modu web sunucusunun bağlam anahtarını kullanması gerekmediğinden performansı artırabileceğini düşünen herkes şunları okumalıdır: Gecikme numaraları her programcının bilmesi gereken . Linux'taki tüm içerik bağlamı 3000ns civarındadır ( kaynak ), ancak çoğu sistem aslında tam içerik anahtarına ihtiyaç duymaz ve 50ns kadar düşebilir, Windows için numaralarım yok. Bu, 2. / 3. sütun boyunca bir yerlerde. Sonuç: ağ talebini ve diski en aza indirin, bağlam anahtarları hakkında endişelenmeyin.
Yalan Ryan

Yanıtlar:


24

Http.sys bir proxy ileticisi olarak pek bir web sunucusu değil. Birçok web sunucusunun bir Windows kutusunda bir arada bulunmasına izin vermek üzere tasarlanmıştır, böylece IIS'nin bir web sitesini çalıştırmasını, aynı zamanda http / REST veya SOAP arabirimleriyle çalışan çeşitli WCF servislerini (tümü standart bağlantı noktası 80'de bulabilirsiniz.) Apache'yi Windows'ta bir miktar titreme olmadan çalıştıramazsınız, Apache bu kayıt sistemiyle çalışacak şekilde değiştirilmedi , utanç vermesi, uygulamalar için daha şeffaf hale gelmemesi ve buna bağlı olarak oldukça karmaşık bazı değişiklikler gerektirmesi nedeniyle).

Çalışma şekli, bir URL'yi ve buna karşılık gelen bir uygulamayı kaydetmenizdir; 80 numaralı bağlantı noktasında bir http isteği yapıldığında, http.sys bunu kabul eder ancak daha sonra bu URL hedefini ele almak için hangi uygulamanın kayıtlı olduğu isteğini iletir.


Bir çekirdek modu web sunucusunun bir anlam ifade ettiğinden şüpheliyim - soket performansı bu şekilde geliştirilebilse bile, herhangi bir faydalı çalışma yapmak için, uygulama mantığı hala kullanıcı alanında yürütülecektir, yani her zaman bir geçiş var - siz ' az önce görüşme dolabı boyunca kaydırdım.


11
Tam bir sunucunun çekirdek modundaki birincil yararı statik dosyalar sunmaktır: bu kullanıcı moduna geçmeden yapılabilir. Önbellekleme de mümkündür.
Jules

3
Bence HTTP.sys CPU çevrimlerinin çok daha az olduğu bir zamandan beri ... Küçük statik dosyalara hizmet verirken (HTTP.sys için en avantajlı durum), tamamen kullanıcı modlu bir HTTP sunucusu muhtemelen çoğu ağdan yararlanabilir .
usr

4
@ usr Http.sys, Windows Server 2003'te tanıtılan nispeten yeni bir şey. Aynı zamanda 80 numaralı bağlantı noktasını dinleyen birçok web API hizmetini çalıştırabileceğinizden eminim.
gbjbaanb

2
@gbjbaanb bir kullanıcı modu sunucusu da buna izin verebilir. Windows, belleği (arabellekleri) paylaşma ve bir soket tutamacını farklı bir işleme geçirme yeteneğine sahiptir.
usr

1
@JamesMishra Aklımda, evet. O zamanlar CPU'lar muhtemelen> 10 kat daha az güçlüydü. Ayrıca, güvenlik zihniyeti gerçekten orada değildi. Bugün sadece kötü bir çağrı.
usr

14

Http.sys kullanılabilir tek çekirdek modu web sunucusu değil: Linux altında da smokin var . Doğru bir şekilde tanımladığınız gibi, güvenlik ana hat linux çekirdeğine dahil edilmemesine yol açan bu tür sunucularla ilgili bir endişedir (ve daha yeni çekirdek sürümleri için güncellenmediğine inanıyorum).

Daha iyi bir çözüm, işlem güvenliğini güçlendirmek için donanım korumasına dayanmayan bir işletim sisteminin kullanılmasıdır, örneğin Microsoft'un tekilliği: böyle bir sistem, güvenlik riski olmadan çekirdek modu sunucusunun verimlilik kazanmasına izin verir. Ne yazık ki, bu prensibe dayanan üretime hazır işletim sistemleri 2015 itibariyle mevcut değildir ve AFAIK hiç kimse üzerinde ciddi bir şekilde çalışmamaktadır (Singularity projesi iptal edildi).


Tekillik yaklaşımındaki en büyük sorun, bunun bir JITter'de ayrıcalık yükselişine kolaylıkla yol açabileceği anlamına gelmesidir.
KodlarInChaos

2
Tux Wikipedia makalesi ilginç bir okumadır. Tux, statik olmayan içerik için HTTP isteklerini, Http.sys dosyasının kullanıldığı gibi ses çıkaran Apache gibi "gerçek" bir web sunucusuna iletebilir. Tux’un Http.sys kadar performans gösterip göstermediğini anlayamıyorum, fakat okuduklarımdan azına dayanarak, Linux çekirdeği devs’in Microsoft’un kararıyla kesinlikle aynı fikirde olmadığını düşünüyorum.
James Mishra,

10

Http.sys, 3. şahıslar tarafından sağlanan hiçbir başlıkla çalıştırılamadığından düşük risklidir.

Http.sys birkaç görev yapar.

  • Proxy ileticisi olarak işlev görür, bu nedenle birden çok işlemin HTTP ad alanının farklı bölümlerine istek vermesini sağlar. gbjbaanb cevabı bunu iyi kapsar.

  • Doğrudan Windows dosyaları önbelleğinden gelen statik dosyalar sunar. Bağlam anahtarı olmadığından, küçük dosyalar statik dosyaları için mükemmel bir hız sağlar.

  • Çıktıyı bir HTTP isteğini ilettiği herhangi bir uygulamadan önbelleğe alır ve kopyalanan sonucu döndürür. Uygulama (varsa) önbelleklemenin ne kadar süreceği üzerinde tam kontrol sahibidir.

Http.sys, her şeyi kullanıcı alanındaki bir işleme iletirken, ÇOK hızlı basit işleri yapmak için tasarlanmıştır.

Yoruma cevap olarak

"Düşük risk, 3. taraflarca verilen herhangi bir kodu çalıştıramadığından" - Her zaman söyledikleri budur ve neredeyse hiçbir zaman gerçek değildir.

Sorun, bu soruyu sormak için karmaşık çekirdek kodu yazmak için Microsoft'a güvenmeniz gerektiği, aksi halde web barındırma için hiç pencere kullanmamaya karar vermenizdir . Http.sys, çekirdeğin ne kadar karmaşık olduğu göz önüne alındığında, çekirdek hata riskine çok az katkıda bulunur.

Eğer herhangi bir şey Http.sys riski azaltıyorsa, “düşük seviyeli” web sunumu ve uygulama kodunun altında açık bir ayrım olduğu için.

İyi tasarlanmış bir kurulumda, web sunucusunu çalıştıran makine (veya sanal sunucu), yüksek riskli bir hedef olduğu için ağın geri kalanına çok sınırlı erişime sahiptir. Çekirdek veya bir kullanıcı modu web sunucusu hacklendiğinde, sunucu ağda daha fazla “hak” a sahip olmadığından, web sunucusu kullanıcı modu işleminin çalışması gerekir.


1
Usermode uygulamaları genellikle hafıza bozulmalarına dayalı hataların çoğunu dışlayan yazı tipi dillerinde yazılır (bunlar genellikle uzaktan kod yürütülmesine neden olanlardır).
KodlarInChaos,

3
Microsoft'a çekirdek kodu yazması konusunda güveniyorsam, çekirdek modu web sunucusu kodu yazma konusunda onlara güvenmek için küçük bir sıçrama olduğuna emin değilim. Bilgi güvenliği açısından oldukça safım ama Http.sys'de arabellek taşmasını silahlandırmanın bir aygıt sürücüsünden veya çekirdeğin başka bir bölümünden İnternet'ten daha kolay olduğunu hayal ediyorum.
James Mishra,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.