Haruskah saya meniru PHP melalui FastCGI?

16

Saya menginstal versi terbaru PHP ke IIS 7.5 melalui FastCGI, dan semua instruksi mengatakan bahwa FastCGI harus menyamar sebagai klien panggilan dengan mengatur

 fastcgi.impersonate = 1

Jika situs web saya akan memiliki konfigurasi ini

  • kumpulan aplikasi khusus
  • identitas kumpulan aplikasi ApplicationPoolIdentity
  • hanya otentikasi anonim (seperti IUSR)

mengapa saya ingin berkedok?

Saya berasal dari latar belakang ASP.NET, di mana IUSR mendapatkan izin hanya baca dan identitas kumpulan aplikasi mendapatkan izin menulis apa pun. Memberikan akses tulis ke IUSR biasanya membuka pintu untuk kerentanan WebDAV. Jadi saya ragu untuk membiarkan PHP berjalan sebagai IUSR.

Saya tidak dapat menemukan banyak orang yang menanyakan pertanyaan ini ( 1 | 2 ) jadi saya pikir saya pasti kehilangan sesuatu. Bisakah seseorang mengklarifikasi ini untuk saya?

Program Wimpy
sumber

Jawaban:

17

13 bulan kemudian, saya ingin meninjau kembali pertanyaan saya sendiri. Pada waktu itu saya telah mentransfer setengah lusin situs web dari IIS 6 ke IIS 7.5 dan mengkonfigurasinya dengan metode pilihan saya. Yang bisa saya katakan adalah bahwa situs web berfungsi, mereka tidak memiliki masalah keamanan (bukan bahwa ini adalah situs populer), dan menurut pendapat saya pengaturannya lebih aman daripada yang direkomendasikan learn.iis.net.

Untuk anak cucu, berikut adalah pengaturan yang relevan. Dalam PHP INI:

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

Dalam IIS:

  • Application Pool> Identity> ApplicationPoolIdentity
  • Situs web> Otentikasi> Otentikasi Anonim> Pengguna Tertentu: IUSR

Izin NTFS dan tempat untuk menerapkannya:

  • IUSR - Grant Read, Deny Write
    • Direktori root situs web IIS. Misalnya, dalam proyek Zend Framework ini akan menjadi direktori / publik.
    • Jika aplikasi Anda mengunggah file dan menyimpannya di direktori publik, Anda perlu menerapkan izin ini ke direktori unggahan sementara. Ini karena move_uploaded_fileakan mempertahankan izin direktori unggahan. Ini adalah kelemahan terbesar dari pengaturan izin yang saya temukan.
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - Grant Read & List
    • Akar aplikasi PHP Anda. Misalnya, dalam proyek Zend Framework ini akan menjadi keseluruhan proyek.
    • Pustaka eksternal apa pun (Zend, Doktrin, dll.) Yang disertakan oleh aplikasi Anda yang tidak ada dalam folder aplikasi.
  • ApplicationPoolIdentity - Grant Modify
    • Setiap lokasi di mana aplikasi Anda akan menulis seperti upload_tmp_dir, session.save_path, dan error_log.
    • Kadang-kadang saya perlu menambahkan izin ini ke root aplikasi PHP di lingkungan pengembangan saya untuk mendukung hal-hal seperti proksi generasi-otomatis Doctrine .
  • ApplicationPoolIdentity - Daftar Hibah
    • Jika aplikasi Anda ada di direktori virtual, Anda harus menambahkan izin ini ke root situs web. Ini memungkinkan aplikasi Anda membaca web.config induknya. Misalnya, jika root aplikasi Anda adalah http://example.com/MyPHPApp , tetapkan izin ini di direktori web example.com. Khususnya Anda hanya perlu menerapkan ke "Folder dan file ini", "hanya di dalam wadah ini".

Saya harap ini membantu orang lain yang memutuskan bahwa petunjuk learn.iis.net tidak ideal.

Program Wimpy
sumber
Terima kasih banyak untuk ini! Menambahkan skrip kumpulan untuk diotomatisasi. Bekerja dengan baik untuk instalasi saya.
Baginda
Anda harus mengaktifkan impersanasi dan mengatur Otentikasi> Akses Anonim> Edit ke Application Pool Identity. Maka hanya mengatur izin sistem file menggunakan IIS APPPOOL \ <Application Pool Name>.
Monstieur
@Kurian Ya, pendekatan itu lebih sederhana dan sesuai dengan instruksi learn.iis.net. Apakah itu menawarkan manfaat lain? Saya memilih sistem yang diuraikan di atas karena memisahkan izin aplikasi dari izin pengguna web.
WimpyProgrammer
Ini mencegah beberapa aplikasi mengakses data masing-masing. Tanpa ApplicationPoolIdentity jika satu aplikasi diretas, ini dapat digunakan untuk meretas aplikasi lain di server itu. Kedua memungkinkan Anda untuk memperlakukan FastCGI sama seperti ASP.NET sejauh menyangkut izin.
Monstieur
Saya setuju dengan bagian pertama. ApplicationPoolIdentity sangat bagus untuk aplikasi sandbox, itulah sebabnya saya juga menggunakannya di atas. Untuk poin kedua Anda, saya kira kami mengelola situs ASP.NET kami secara berbeda. Ketika saya menyiapkan situs ASP.NET, saya menggunakan IUSR untuk pengguna anonim dan ApplicationPoolIdentity untuk kumpulan aplikasi, dan izin terlihat sangat mirip dengan apa yang saya uraikan di atas.
WimpyProgrammer
1

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

Peniruan dan akses sistem file

Disarankan untuk mengaktifkan peniruan FastCGI di PHP saat menggunakan IIS. Ini dikendalikan oleh direktif fastcgi.impersonate dalam file php.ini. Ketika peniruan diaktifkan, PHP akan melakukan semua operasi sistem file atas nama akun pengguna yang telah ditentukan oleh otentikasi IIS.

Per dokumentasi, itu hanya memungkinkan fastcgi untuk bertindak atas nama klien menggunakan semua izin yang sama (dalam kasus Anda seperti apa yang tampak seperti akun IUSR). Dengan kata lain, untuk melakukan semua tindakan yang biasanya diizinkan untuk kredensial klien (atau anon) sendiri. Tidak lebih, tidak kurang. Tanpa set ini, saya membayangkan fastcgi yang buruk akan dibiarkan lumpuh.

bob-the-destroyer
sumber
Karena itu dalam situasinya akan mengakses berdasarkan akun tamu atau sesuatu.
Matt
Terima kasih atas jawaban Anda, Matt dan Bob! Saya mulai berpikir tidak ada yang mau menusuk.
WimpyProgrammer
2
Ketika PHP dijalankan tanpa peniruan, ia berjalan sebagai identitas kumpulan aplikasi. Ini memungkinkan saya memberikan hak baca-saja kepada pengguna langsung dan memberikan akses tulis ke identitas aplikasi. Jadi PHP tidak berdaya tanpa peniruan. Saya membuat tes yang mungkin menjelaskan. IUSR (anon): diberikan baca, ditolak tulis. identitas aplikasi: diberikan baca / tulis. Dengan peniruan off, saya masih bisa menulis file melalui kode. Dengan penyamaran aktif, saya tidak bisa. Tetapi saya tidak ingin IUSR memiliki akses tulis. Saya pikir saya akan mengajukan beberapa pertanyaan di forum lain dan kembali ke sini ketika saya tahu lebih banyak.
WimpyProgrammer