Akses tulis ke SEMUA ORANG berfungsi, IUSR, IIS_IUSRS, DefaultAppPool tidak berfungsi. Mengapa?

10

Baik. Di sini kami mencoba untuk membuat situs web Classic ASP di IIS 7.5 di Windows Server 2008 R2. Ada folder bernama dbc di bawah root situs web dan memiliki file yang digunakan untuk membaca dan menulis informasi tertentu saat setiap halaman diproses.

Masalahnya adalah, jika saya memberikan Izin Menulis IUSR, dan Izin Menulis IIS_IUSRS, atau Izin DefaultAppPool, saya mendapatkan "Akses ke jalur 'E: .. \ websiteroot \ dbc \ filename.txt' ditolak"

Tetapi jika saya memberikan SEMUA ORANG Akses tulis pada folder dbc itu, maka saya tidak mendapatkan kesalahan, semuanya tampak sempurna.

Info Lebih Lanjut: Situs web berjalan dalam mode Classic Pipeline, Anonymous Authentication Diaktifkan (mungkin itu satu-satunya otentikasi diaktifkan) .. Dan saya mencoba otentikasi Anonymous menggunakan akun IUSR dan juga, Application Pool Identity. Dalam kasus saya, ApplicationPoolIdentity adalah Identitas untuk Otentikasi situs web. Kami menggunakan COM + untuk file I / O. Dan Classic ASP Server.CreateObject untuk instantiate objek dari itu. COM + berjalan sebagai Layanan Jaringan.

Pikiran? Saya tidak ingin memberikan izin Menulis kepada SEMUA ORANG. Apakah saya melewatkan sesuatu?

ASK: Inilah yang saya lakukan.

Situs web saya bernama CipherDemo berjalan di bawah AppPoolIdentity di IIS 7.5, yang dapat ditemukan oleh Identity IIS AppPool \ CipherDemo. Saya menggunakan ICACLS untuk memberikan izin RW pada folder itu.

dan COM + yang benar-benar melakukan file I / O sedang berjalan di bawah Network Service Identity. Ketika saya menggunakan Monitor Proses untuk melacak Access Denied Error, ternyata Layanan Jaringan hanya memiliki izin Baca pada folder itu.

Saya menggunakan ICACLS "foldername" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T untuk memberikan akses tulis pada folder itu.

Dan memecahkannya.

Saya bermaksud bahwa karena situs web berjalan sebagai CipherDemo Identity, ini akan menjadi akun yang akan digunakan untuk mengakses file melalui COM +. Tetapi memalukan mengetahui bahwa COM + masih akan bekerja pada batas-batas Identitasnya sendiri.

gmaran23
sumber

Jawaban:

5

Di bawah IIS 7.5 (dan opsional di IIS 7) semua pekerja dijalankan dengan Application Pool Identity: pengguna "IIS AppPool * PoolName *".

Berikan akses ke pengguna itu daripada Semua Orang (Anda harus mengetikkan nama ke dalam dialog identitas pilih — itu tidak akan muncul di fungsi temukan).

Ada halaman yang sangat berguna di iis.net yang mencakup banyak hal dengan lebih detail.

Juga perhatikan: di bawah IIS7 (Server 2008):

  • Anda menetapkan identitas kumpulan aplikasi berdasarkan basis per aplikasi di pengaturan lanjutan.
  • Tidak ada dukungan GUI, jadi Anda akan memerlukan baris perintah untuk mengatur izin ( icacls.exe).

Akhirnya pemilihan identitas SQL Server tidak tahu tentang identitas kumpulan aplikasi: gunakan CREATE LOGINdan CREATE USERawalnya, setelah ini GUI dapat digunakan untuk memberikan peran dll.

Richard
sumber
@ Richard - Ya. Terima kasih atas tanggapan cepatnya. forum msdn sangat tidak berguna hari ini. Kembali lagi ... Saya telah mengganggu situs web IIS.net dan kesalahan server selama beberapa hari. Saya menggunakan identitas kumpulan aplikasi default di IIS 7.5 / Win server 2008 R2 saya. Jadi, saya telah memberikan izin IIS APPPOOL \ DefaultAppPool Wite pada folder 'dbc' saya. Ditambah lagi, saya telah memberikan izin IUSR dan IIS_IUSRS pada folder itu. Masih tidak akan berfungsi sampai saya memberi izin menulis SEMUA ORANG. Saya tahu ada sesuatu yang saya lewatkan .. Bisakah Anda membantu?
gmaran23
@ gmaran23: Jika langkah-langkah yang jelas tidak berhasil saya menggunakan Process Monitor untuk melihat apa yang gagal (dan sering kali file terbuka meminta terlalu banyak akses, saya gagal mengatur ACL dengan benar, atau sesuatu lain punya file terbuka).
Richard
@ Richard - Saya melakukan operasi Baca / Tulis dengan pembaca file di c # dengan FileMode.Open, FileAccess.ReadWrite. - Saya kira bagian itu bagus. Sesuatu yang lain membuka file - saya kira ini bisa dikesampingkan, karena tidak ada kemungkinan .. Ada sesuatu yang salah dengan ACL. Saya akan memeriksanya dan mempostingnya di sini. Juga akan mencoba Proses Monitor. Terima kasih atas bantuannya :)
gmaran23
@ gmaran23: Jika tidak berhasil jangan anggap Anda tahu selalu ada yang menguji. Saya telah membuang terlalu banyak waktu selama bertahun-tahun karena saya tahu ada sesuatu yang benar atau tidak benar - terlalu sering saya salah.
Richard
1
@ gmaran23: Gunakan alat untuk melihat apa yang sedang terjadi: Anda menebak dan tidak menyelesaikan masalah secara sistematis. (1) Gunakan Process Explorer untuk mengonfirmasi file tidak terbuka. (2) Gunakan Monitor Proses untuk melihat akses apa yang diminta dan dengan identitas apa (dan Anda memiliki file yang tepat). (3) Periksa ulang hasil # 2 terhadap ACL pada file (dan buka properti keamanan canggih untuk detail lengkap). (4) Sesuaikan satu hal dan lanjutkan ke # 1 sampai diperbaiki. Jika Anda masih macet setelah beberapa iterasi perluas Q dengan detail lengkap (dan lebih spesifik).
Richard
5

Anda dapat menambahkan akun melalui GUI NTFS dengan mengetiknya secara langsung. Nama ini dalam format IIS APPPOOL\<<app pool name>>, mis IIS APPPOOL\DefaultAppPool. (lihat artikel dukungan Microsoft ini )

Solusi alternatif: Saya telah menggunakan akun "Layanan Jaringan" sebagai pengguna kumpulan aplikasi yang memberinya izin menulis.

percikan
sumber
Benar, tip itu bagus, tapi aku sudah melakukannya. Saya menggunakan "ApplicationPoolIdentity" default untuk kumpulan aplikasi. Dan untuk folder 'dbc' saya sudah memberikan izin Tulis untuk IIS AppPool \ DefaultAppPool. Tetapi itu tetap tidak akan berhasil sampai saya memberikan izin menulis kepada SEMUA ORANG.
gmaran23
1

Jika Anda hanya ingin memberikan izin folder WRITE kepada pengguna tertentu, Anda juga harus mengubah 'identitas pengguna Anonim' situs menjadi 'Pengguna Spesifik', bukan 'Identitas kumpulan aplikasi'.

pengguna2147802
sumber