Czy powinienem podszywać się pod PHP za pomocą FastCGI?


16

Instaluję najnowszą wersję PHP na IIS 7.5 za pośrednictwem FastCGI, a wszystkie instrukcje mówią, że FastCGI powinien personifikować klienta wywołującego, ustawiając

 fastcgi.impersonate = 1

Jeśli moja witryna będzie miała tę konfigurację

  • dedykowana pula aplikacji
  • tożsamość puli aplikacji ApplicationPoolIdentity
  • tylko anonimowe uwierzytelnianie (jako IUSR)

dlaczego chcę się podszywać?

Pochodzę z środowiska ASP.NET, w którym IUSR otrzymuje uprawnienia tylko do odczytu, a tożsamość puli aplikacji - wszelkie uprawnienia do zapisu. Udzielenie dostępu do zapisu do IUSR zwykle otwiera drzwi do luk w zabezpieczeniach WebDAV. Dlatego waham się, czy PHP może działać jako IUSR.

Nie mogę znaleźć wielu ludzi zadających to pytanie ( 1 | 2 ), więc myślę, że czegoś mi brakuje. Czy ktoś może mi to wyjaśnić?

Odpowiedzi:


17

13 miesięcy później chciałem wrócić do mojego pytania. W tym czasie przeniosłem pół tuzina stron internetowych z IIS 6 do IIS 7.5 i skonfigurowałem je według mojej preferowanej metody. Wszystko, co mogę powiedzieć, to to, że strony działają, nie miały żadnych problemów z bezpieczeństwem (nie dlatego, że są to popularne strony), a moim zdaniem konfiguracja jest bezpieczniejsza niż to, co zaleca learn.iis.net.

Dla potomnych, oto odpowiednie ustawienia. W PHP INI:

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

W IIS:

  • Pula aplikacji> Tożsamość> ApplicationPoolIdentity
  • Strona internetowa> Uwierzytelnianie> Uwierzytelnianie anonimowe> Określony użytkownik: IUSR

Uprawnienia NTFS i miejsce ich zastosowania:

  • IUSR - Grant Read, Deny Write
    • Katalog główny witryny IIS. Na przykład w projekcie Zend Framework byłby to katalog / public.
    • Jeśli aplikacja przesyła pliki i zapisuje je w katalogu publicznym, musisz zastosować to uprawnienie do katalogu tymczasowego przesyłania. Wynika to z faktu, move_uploaded_fileże zachowane zostaną uprawnienia do katalogu przesyłania. Jest to największa wada tego ustawienia uprawnień, jakie znalazłem.
  • ApplicationPoolIdentity (IIS AppPool\<<YourApplicationPoolName>> ) - Grant Read & List
    • Katalog główny aplikacji PHP. Na przykład w projekcie Zend Framework byłby to cały projekt.
    • Wszelkie biblioteki zewnętrzne (Zend, Doctrine itp.) Zawarte w aplikacji, które nie znajdują się w folderze aplikacji.
  • ApplicationPoolIdentity - Grant Modify
    • Wszelkie miejsca, w którym aplikacja będzie pisać takie jak upload_tmp_dir, session.save_pathorazerror_log .
    • Czasami muszę dodać to uprawnienie do katalogu głównego aplikacji PHP w moim środowisku programistycznym, aby obsługiwać takie rzeczy, jak automatyczne generowanie serwerów proxy Doctrine .
  • ApplicationPoolIdentity - Lista przydziałów
    • Jeśli Twoja aplikacja znajduje się w katalogu wirtualnym, musisz dodać to uprawnienie do katalogu głównego witryny. Dzięki temu aplikacja może odczytać swój nadrzędny plik web.config. Na przykład jeśli katalog główny aplikacji to http://example.com/MyPHPApp , ustaw to uprawnienie w katalogu internetowym example.com. W szczególności należy zastosować tylko „Ten folder i pliki”, „tylko w tym kontenerze”.

Mam nadzieję, że pomoże to każdemu, kto zdecyduje, że instrukcje learn.iis.net nie są idealne.


Wielkie dzięki za to! Dodano skrypt wsadowy do automatyzacji. Działa dobrze dla mojej instalacji.
Ojciec

Powinieneś włączyć impersanację i ustawić Uwierzytelnianie> Dostęp anonimowy> Edytuj na Tożsamość puli aplikacji. Następnie ustaw uprawnienia systemu plików tylko przy użyciu IIS APPPOOL \ <Nazwa puli aplikacji>.
Monstieur

@Kurian Tak, takie podejście jest prostsze i zgodne z instrukcjami learn.iis.net. Czy oferuje jakieś inne korzyści? Wybrałem system opisany powyżej, ponieważ oddziela on uprawnienia aplikacji od uprawnień użytkownika sieci.
WimpyProgrammer

Uniemożliwia to wielu aplikacjom wzajemny dostęp do danych. Bez ApplicationPoolIdentity, jeśli jedna aplikacja zostanie zhakowana, można jej użyć do zhakowania innych aplikacji na tym serwerze. Po drugie, pozwala traktować FastCGI tak samo jak ASP.NET, jeśli chodzi o uprawnienia.
Monstieur

Zgadzam się z pierwszą częścią. ApplicationPoolIdentity jest świetny do aplikacji typu sandboxing, dlatego też używam go powyżej. Po drugie, myślę, że inaczej zarządzamy naszymi stronami ASP.NET. Kiedy konfiguruję witrynę ASP.NET, używam IUSR dla anonimowego użytkownika i ApplicationPoolIdentity dla puli aplikacji, a uprawnienia wyglądają bardzo podobnie do tego, co opisałem powyżej.
WimpyProgrammer

1

Zobacz: http://www.php.net/manual/en/install.windows.iis6.php

Personifikacja i dostęp do systemu plików

Podczas korzystania z IIS zaleca się włączenie personifikacji FastCGI w PHP. Jest to kontrolowane przez dyrektywę fastcgi.impersonate w pliku php.ini. Gdy podszywanie się jest włączone, PHP wykona wszystkie operacje na systemie plików w imieniu konta użytkownika określonego przez uwierzytelnianie IIS.

Zgodnie z dokumentacją, po prostu pozwala fastcgi działać w imieniu klienta przy użyciu tych samych uprawnień (w twoim przypadku jest to coś, co wygląda jak konto IUSR). Innymi słowy, aby wykonać wszystkie czynności normalnie dozwolone dla własnych poświadczeń klienta (lub anonu). Nie więcej nie mniej. Bez tego zestawu wyobrażam sobie, że biedne fastcgi zostałyby kaleką.


Biorąc pod uwagę fakt, że w jego sytuacji dostęp byłby możliwy na podstawie konta gościa lub czegoś takiego.
Matt

Dzięki za odpowiedzi Matt i Bob! Zaczynałem myśleć, że nikt nie zadźgnie cię nożem.
WimpyProgrammer

2
Gdy PHP jest uruchamiane bez personifikacji, działa jako tożsamość puli aplikacji. To pozwala mi nadać prawa tylko do odczytu użytkownikowi anon i dać dostęp do zapisu tożsamości aplikacji. Więc PHP nie jest bezradny bez personifikacji. Stworzyłem test, który może wyjaśnić. IUSR (anon): przyznano odczyt, odmówiono zapisu. tożsamość aplikacji: przyznano odczyt / zapis. Po wyłączeniu personifikacji nadal mogę zapisywać pliki za pomocą kodu. Przy włączonym podszywaniu się nie mogę. Ale nie chcę, aby IUSR miał dostęp do zapisu. Myślę, że zadam kilka pytań na innych forach i wrócę tutaj, gdy dowiem się więcej.
WimpyProgrammer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.