PHP'yi FastCGI aracılığıyla taklit etmeli miyim?


16

PHP'nin en son sürümünü FastCGI aracılığıyla IIS 7.5'e yüklüyorum ve tüm talimatlar FastCGI'nin arayan istemciyi ayarlayarak taklit etmesi gerektiğini söylüyor

 fastcgi.impersonate = 1

Web sitem bu yapılandırmaya sahip olacaksa

  • özel uygulama havuzu
  • ApplicationPoolIdentity uygulama havuzu kimliği
  • yalnızca anonim kimlik doğrulama (IUSR olarak)

neden taklit etmek istiyorum?

IUSR'nin salt okunur izinleri aldığı ve uygulama havuzu kimliğinin yazma izinlerini aldığı bir ASP.NET arka planından geliyorum. IUSR'ye yazma erişimi vermek genellikle WebDAV güvenlik açıklarının kapısını açar. Bu yüzden PHP'nin IUSR olarak çalışmasına izin vermekten çekinmeyin.

Bu soruyu soran pek çok insan bulamıyorum ( 1 | 2 ) bu yüzden bir şeyleri kaçırmam gerektiğini düşünüyorum. Birisi bunu benim için açıklayabilir mi?

Yanıtlar:


17

13 ay sonra kendi sorumu tekrar gözden geçirmek istedim. O zamanlar IIS 6'dan IIS 7.5'e yarım düzine web sitesi aktardım ve tercih ettiğim yöntemle yapılandırdım. Söyleyebileceğim tek şey, web sitelerinin çalıştığı, herhangi bir güvenlik sorunu yaşamadıkları (bunlar popüler siteler değil) ve bence kurulum learn.iis.net'in önerdiğinden daha güvenli.

Posterity için, ilgili ayarlar. PHP INI'de:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

IIS'de:

  • Uygulama Havuzu> Kimlik> ApplicationPoolIdentity
  • Web sitesi> Kimlik Doğrulama> Anonim Kimlik Doğrulama> Belirli Kullanıcı: IUSR

NTFS izinleri ve bunların nereye uygulanacağı:

  • IUSR - Hibe Okuma, Yazmayı Reddet
    • IIS web sitesinin kök dizini. Örneğin, bir Zend Framework projesinde bu / public dizini olur.
    • Uygulamanız dosyaları yüklüyor ve genel bir dizine kaydediyorsa, bu izni geçici yükleme dizinine uygulamanız gerekir. Bunun nedeni move_uploaded_file, yükleme dizininin izinlerini koruyacağıdır. Bulduğum bu izin kurulumunun en büyük dezavantajı bu.
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - Okuma ve Liste Verme
    • PHP uygulamanızın kökü. Örneğin, bir Zend Framework projesinde bu tüm projedir.
    • Uygulamanız tarafından dahil edilen ve uygulama klasöründe olmayan tüm harici kütüphaneler (Zend, Doctrine vb.)
  • ApplicationPoolIdentity - Değişiklik Ver
    • Başvurunuz gibi yazacak hiçbir yer upload_tmp_dir, session.save_pathve error_log.
    • Bazen bu izni, Doctrine'in vekil sunucu oluşturma gibi şeyleri desteklemek için geliştirme ortamımdaki PHP uygulamasının kök dizinine eklemem gerekir .
  • ApplicationPoolIdentity - Hibe Listesi
    • Uygulamanız sanal bir dizindeyse, bu izni web sitesinin kök dizinine eklemeniz gerekir. Bu, uygulamanızın üst web.config dosyasını okumasına izin verir. Örneğin, uygulama kökünüz http://example.com/MyPHPApp ise , bu izni example.com web dizininde ayarlayın. Özellikle sadece "Bu klasör ve dosyalar", "yalnızca bu kapsayıcı içinde" başvurmanız gerekir.

Umarım bu learn.iis.net talimatlarının ideal olmadığına karar veren herkese yardımcı olur.


Bunun için çok teşekkürler! Otomatikleştirmek için bir toplu komut dosyası eklendi. Kurulumum için iyi çalışıyor.
Sire

Kimliğe bürünmeyi etkinleştirmeli ve Kimlik Doğrulama> Anonim Erişim> Uygulama Havuzu Kimliğine Düzenle'yi ayarlamalısınız. Sonra yalnızca IIS APPPOOL \ <Uygulama Havuzu Adı> kullanarak dosya sistemi izinlerini ayarlayın.
Monstieur

@Kurian Evet, bu yaklaşım daha basittir ve learn.iis.net talimatlarına göre. Başka yararları var mı? Uygulamanın izinlerini web kullanıcısının izinlerinden ayırdığı için yukarıda belirtilen sistemi seçtim.
WimpyProgrammer

Birden fazla uygulamanın birbirinin verilerine erişmesini engeller. Bir uygulama saldırıya uğramışsa ApplicationPoolIdentity olmadan, o sunucudaki diğer uygulamaları kesmek için kullanılabilir. İkincisi, FastCGI'ye izinler açısından ASP.NET ile aynı şekilde davranmanıza izin verir.
Monstieur

İlk bölüme katılıyorum. ApplicationPoolIdentity kum havuzu uygulamaları için mükemmeldir, bu yüzden yukarıda da kullanıyorum. İkinci olarak, ASP.NET sitelerimizi farklı şekilde yönettiğimizi düşünüyorum. Bir ASP.NET sitesi kurduğumda, anonim kullanıcı için IUSR ve uygulama havuzu için ApplicationPoolIdentity kullanıyorum ve izinler yukarıda özetlediğimle çok benziyor.
WimpyProgrammer

1

Bkz. Http://www.php.net/manual/en/install.windows.iis6.php

Kimliğe bürünme ve dosya sistemi erişimi

IIS kullanırken PHP'de FastCGI kimliğe bürünme özelliğini etkinleştirmeniz önerilir. Bu php.ini dosyasındaki fastcgi.impersonate yönergesi tarafından denetlenir. Kimliğe bürünme etkinleştirildiğinde, PHP, IIS kimlik doğrulaması tarafından belirlenen kullanıcı hesabı adına tüm dosya sistemi işlemlerini gerçekleştirir.

Belgelere göre, fastcgi'nin aynı izinleri kullanarak istemcinizin adına hareket etmesine izin verir (sizin durumunuzda IUSR hesabına benzeyen şeydir). Başka bir deyişle, normalde müşterinin (veya anonun) kendi kimlik bilgilerine izin verilen tüm eylemleri gerçekleştirmek. Ne fazla ne az. Bu set olmadan, zavallı fastcgi'nin sakat bırakılacağını hayal ediyorum.


Bu durumda konuk hesabına veya başka bir şeye dayanarak erişiyordu.
Matt

Cevaplarınız için teşekkürler Matt ve Bob! Kimsenin bıçak atmayacağını düşünmeye başladım.
WimpyProgrammer

2
PHP kimliğe bürünme olmadan çalıştırıldığında, uygulama havuzu kimliği olarak çalışır. Bu, anon kullanıcısına salt okunur haklar vermeme ve uygulama kimliğine yazma erişimi vermeme izin veriyor. Yani PHP kimliğe bürünme olmadan çaresiz değildir. Açıklığa kavuşturabilecek bir test oluşturdum. IUSR (anon): okuma izni verildi, yazma engellendi. uygulama kimliği: okuma / yazma izni verildi. Kimliğe bürünme kapalıyken, yine de kod yoluyla dosya yazabilirim. Kimliğe bürünme ile yapamam. Ancak IUSR'nin yazma erişimine sahip olmasını istemiyorum. Sanırım diğer forumlarda bazı sorular soracağım ve daha fazla bilgi sahibi olduğumda buraya döneceğim.
WimpyProgrammer
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.