Tidak dapat membaca file konfigurasi karena izin yang tidak memadai

354

Saya baru-baru ini mengalami kesalahan saat mencoba meng-host situs asp.net saya dengan IIS. Saya telah menemukan solusi yang disumpah oleh banyak orang.

Larutan:

  1. Tambahkan IIS_IUSRS dengan izin Baca pada file di folder
  2. Ubah metode otentikasi IIS ke BasicAuthentication
  3. menyegarkan situs web. Itu akan berhasil

( http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html )

Apa yang saya tambahkan ke file web.config saya? Saya belum pernah mengeditnya sebelumnya. Berikut isinya saat ini:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

Kesalahan saya adalah:

Kesalahan Konfigurasi: Tidak dapat membaca file konfigurasi karena izin yang tidak memadai
File Konfigurasi: \? \ C: \ Pengguna ***** \ Dokumen \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
sumber
9
Silakan lihat modul install rewrite.
hematlah
Solusi saya adalah menjalankan perintah dari baris perintah yang dibuka dengan hak administrator. Untuk melakukan ini, cari prompt perintah, klik kanan, dan klik jalankan dengan hak administrator.
David Waddington
Selain jawaban lain, perhatikan bahwa mengenkripsi sistem file (EFS) juga dapat mengganggu IIS.
G-Wiz
Saya melakukan iklan ini sekarang tuan rumah lokal meminta kata sandi, terdekat saya sudah sejauh ini bekerja berkat ini
Paul Ledger
1
Bagi saya tidak ada IIS_IUSR, saya melakukan hal yang sama untuk Pengguna yang Diotentikasi dan berhasil
Bhanu Chhabra

Jawaban:

544

Tidak ada masalah dengan web.config Anda . Situs web Anda berjalan dalam proses. Di iis Anda dapat menentukan identitas proses itu. The identitas bahwa situs web Anda kolam aplikasi berjalan sebagai ( Layanan Jaringan, sistem lokal , dll), harus memiliki izin untuk mengakses dan membaca file web.config.

Memperbarui:

Jawaban yang diperbarui ini sama seperti di atas, tetapi sedikit lebih lama dan lebih sederhana dan lebih baik.

Pertama-tama : Anda tidak perlu mengubah apa pun di file konfigurasi Anda. Tidak apa-apa . Masalahnya dengan izin file windows .

Masalah ini terjadi karena aplikasi Anda tidak dapat mengakses dan membaca file web.config .

Jadikan file dapat diakses oleh grup IIS_IUSRS . Hanya klik kanan web.config dan klik properties , di bawah keamanan tab, tambahkan IIS_IUSRS .

Jadi apa masalahnya IIS_IUSRS ini?

Anda situs web adalah seperti sebuah exe file yang. Sama seperti file exe apa pun, itu harus dimulai oleh pengguna dan berjalan sesuai dengan izin yang ditetapkan untuk pengguna itu.

Ketika situs Anda dimulai di IIS , Application Pool situs web Anda dikaitkan dengan pengguna ( Layanan Jaringan, Sistem Lokal , dll.) (Dan dapat diubah di IIS)

Jadi ketika Anda mengatakan IIS_IUSRS , itu berarti setiap pengguna ( Layanan Jaringan, Sistem Lokal , Dll ...) yang menjalankan situs Anda.

Dan seperti @Seph disebutkan dalam komentar di bawah ini : Jika komputer Anda menggunakan domain , ingat bahwa grup IIS_IUSRS adalah grup lokal . Juga pastikan bahwa ketika Anda mencoba untuk menemukan pengguna ini memeriksa lokasi itu harus diatur ke komputer lokal dan bukan domain perusahaan.

Afshin Gh
sumber
79
Bagi yang lain, ada baiknya menunjukkan bahwa standar biasanya adalah IIS_IUSRSdan untuk memastikan bahwa ketika Anda mencoba untuk menemukan pengguna ini memeriksa lokasi itu harus diatur ke komputer lokal dan bukan domain perusahaan.
Seph
3
Jawaban yang bagus, dan inilah tip tambahan - menjalankan IIS7 di Win7 di domain, Anda mungkin tidak menemukan IIS_IUSRS di grup lokal jika Anda mencoba mencari dengan 'Periksa Nama ...'. Jangan khawatir - cukup ketik IIS_IUSRS secara penuh dan tekan OK, dan semuanya akan baik-baik saja.
Eight-Bit Guru
2
Bagaimana jika Anda memiliki drive yang dibagikan untuk jalur situs? Apakah ini berpengaruh? Bagaimana Anda membuatnya bekerja dengan drive bersama?
Kevin
2
Saya harus melakukan ini untuk IUSR. IIS_IUSRS tidak berfungsi untuk saya karena alasan tertentu.
Todd
13
Saat mencoba menyiapkan situs web ASP.Net baru dari awal di IIS 7 dan seterusnya setelah Anda memperbaiki kesalahan yang sedang dibahas di utas ini, Anda mungkin menghadapi kesalahan otorisasi "Kesalahan HTTP 401.3 - Tidak Resmi" sebagai rintangan Anda berikutnya. Untuk memperbaikinya jika Anda telah mengaktifkan otentikasi anonim, maka ubah identitas pengguna anonim dari "IUSR" (ditetapkan sebagai default oleh IIS) ke identitas kumpulan aplikasi. Untuk mendapatkan jendela edit untuk pengaturan ini gunakan aksi "Edit" dari panel Tindakan di tampilan fitur IIS untuk fitur "Otentikasi" IIS.
RBT
72

Saya memiliki apa yang tampaknya menjadi masalah izin yang sama pada web.configfile.
Namun, masalah saya disebabkan oleh IIS gagal memuat file konfigurasi karena mengandung aturan penulisan ulang URL dan saya belum menginstal modul penulisan ulang URL IIS pada server baru.

Solusi: Instal modul penulisan ulang.
Berharap itu menyelamatkan seseorang beberapa jam.

Jarrod
sumber
Ya. Server sebelumnya saya menggunakan ini pada penulisan ulang rute non ssl ke ssl .. begitu banyak untuk pesan kesalahan besar dari IIS. error::) +1 Karena alih-alih membutuhkan SSL, saya menulis ulang URL untuk HTTPS memetikan seseorang yang terhubung tanpa https. Sebuah teka-teki.
Piotr Kula
Terima kasih!!! telah faffing tentang dengan izin selama berjam-jam dan akhirnya pada akhirnya ini!
Carl Woodhouse
Bagaimana cara menginstal modul penulisan ulang URL IIS?
B. Clay Shannon
2
Ini adalah masalah saya juga - terima kasih! Untuk menginstal modul penulisan ulang, unduh dari halaman ini: iis.net/downloads/microsoft/url-rewrite tutup IIS, instal, mulai ulang IIS (hanya untuk aman).
Tyler Forsythe
2
@ B.ClayShannon menggunakan Penginstal Platform Web, cari IIS Rewrite
enorl76
64

Catatan editor: Melakukan apa yang dikatakan jawaban ini adalah BERBAHAYA ! Akun LocalSystem adalah ...

Akun yang sepenuhnya tepercaya, lebih dari akun administrator. Tidak ada pada satu kotak yang tidak dapat dilakukan akun ini, dan memiliki hak untuk mengakses jaringan sebagai mesin (ini membutuhkan Direktori Aktif dan memberikan izin akun mesin untuk sesuatu)


Mengubah Identity dari ApplicationPoolIdentity ke LocalSystem melakukan pekerjaan;).

Saya menggunakan win7 64 dengan IIS 7.5

lebih lanjut tentang Application Pool Identity di IIS 7.5 dan win 7

masukkan deskripsi gambar di sini

amd
sumber
Jawaban yang berguna untuk IIS 6 juga. Temukan informasi lebih lanjut tentang cara mengubah Application Pool Identity di situs web Microsoft di sini: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
Manuel Alvarez
22
Membuat perubahan ini adalah risiko keamanan karena akses yang Anda berikan pada layanan ini: msdn.microsoft.com/en-us/library/windows/desktop/…
WhiteKnight
Ini tampaknya menjadi masalah saya di sini dan mengubah App Pool Identity ke LocalSystem berfungsi seperti yang dijelaskan!
Vasily Hall
21
Turunkan suara ini karena lubang keamanan yang menganga ini berada di server. Anda TIDAK PERNAH menjalankan layanan yang menghadap publik seperti IIS di bawah akun sistem lokal !!!! Anda pada dasarnya menyerahkan kunci ke kerajaan untuk siapa saja yang dapat meretas server. Serius JANGAN MELAKUKAN INI.
Dimesio
5
OMG Jawaban ini SANGAT TIDAK SESUAI untuk keamanan. Intervensi moderasi diperlukan. Ini adalah ide yang MENGERIKAN. Bayangkan setiap akses file yang ditentukan pada querystring ... boom ... siapa pun dapat MEMBACA web.config dan IIS akan dengan senang hati menyajikannya kepada dunia. JANGAN GUNAKAN JAWABAN INI.
enorl76
47

Saya memiliki masalah yang sama ketika saya mencoba untuk berbagi folder root situs dengan pengguna lain. Beberapa folder kehilangan izin. Jadi saya mengikuti langkah-langkah untuk menambahkan izin ke grup IIS_IUSRS seperti yang disarankan oleh Afshin Gh. Masalahnya adalah grup ini tidak tersedia untuk saya. Saya menggunakan windows 7.

Apa yang saya lakukan saya baru saja mengubah beberapa langkah:

  1. Klik kanan pada folder induk (yang kehilangan izin),
  2. Properti => Keamanan => Dalam "Grup atau nama pengguna:",
  3. Klik Edit ...
  4. Jendela "Izin untuk folder Anda" akan dibuka.
  5. Di "Grup atau nama pengguna:" tekan ADD ... btn,
  6. Ketik Authen dan tekan Periksa Nama,
  7. Anda akan melihat nama grup lengkap " Pengguna yang Diotentikasi "
  8. Tekan ok => terapkan.
  9. Ini harus mengaktifkan hak istimewa lagi.

Itu berhasil bagi saya.

zwitterion
sumber
2
Ini berhasil untuk saya. Ini harus menjadi jawaban yang diterima. Saya mencoba metode lain, mereka tidak berhasil.
GunWanderer
1
Mencoba semua solusi lain tidak akan berfungsi sampai ini.
jenna_3108
1
Oke, saya pikir saya punya penjelasan mengapa ini berhasil. Beberapa dev meng-host kode mereka di C:\ ie C:\Devatau C:\Code, dll. Grup keamanan Authenticated Usersdiberikan pada C:\ dan disebarkan ke folder anak. Namun, pada C:\Usersfolder, propagasi ini berhenti. Jadi pengembang seperti saya yang meng-host kode mereka di dalam folder home harus memberikan akses ke Authenticated Usersfolder root IIS agar IIS dapat berfungsi.
Colin
ketika saya mengklik centang Nama, ia meminta saya kredensial. Saya tidak yakin kredensial pengguna mana yang diharapkan di sini. Apakah ada yang bisa membantu?
RSB
18

Anda tidak perlu mengubah apa pun di web.config Anda.

Masalahnya adalah izin sistem file. Izin file Anda tidak memungkinkan pengguna IIS_IUSRS untuk mengakses web.config (atau mungkin salah satu file). Ubah izin file mereka di windows untuk memungkinkan akun IIS_IUSRS mengaksesnya.

Erik Funkenbusch
sumber
1
Saya punya masalah serupa. Jika ada orang yang tidak dapat menemukan pengguna IIS_IUSRS, periksa lokasi. Milik saya default ke domain perusahaan, jadi saya tidak segera menemukannya karena saya lupa memeriksa untuk melihat di mana itu terlihat.
jgreep
@Mystere Man Saya punya masalah yang sama. Saya mengubah izin dan kemudian mencoba. Masih saya mendapatkan kesalahan yang sama. :(
Rauf
"(atau mungkin salah satu file)" berfungsi untuk saya, memungkinkan akses akun IIS_IUSRS ke web.config tidak cukup, saya perlu mengaktifkannya agar akses ke semua file di situs membantu.
Tuyen Nguyen
2
Saya harus melakukan ini untuk IUSR. IIS_IUSRS tidak bekerja untuk saya.
Todd
Terima kasih. Saya telah memberikan 'Semua Orang' dengan izin penuh pada folder aplikasi Web dan berfungsi.
Minh Nguyen
16

Jadikan file dapat diakses oleh grup IIS_IUSRS . Klik kanan web.config Anda, perluas properti, dan di bawah tab keamanan, tambahkan IIS_IUSRS. Berikan akses baca / tulis pada kelompok.

Ketika grup TIDAK tersedia, ganti IIS_IUSRS dengan ComputerName \ IIS_IUSRS

Kurt Van den Branden
sumber
+1 Tip bagus. Jawaban yang diterima baik, tetapi lupa menyebutkan bahwa Anda mungkin perlu menambahkan nama komputer Anda di depan 'IIS_IUSRS', yang membuat saya melewati ini.
Ralph Lavelle
Ini ("Ketika grup TIDAK tersedia") memiliki harapan saya, tetapi bahkan ketika saya menambahkan nama komputer ("IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS") saya masih mendapatkan kesalahan yang sama. Saya mencoba nama komputer lengkap, tetapi bahkan tidak mau menerimanya sebagai pengguna yang valid.
B. Clay Shannon
15

Buka folder induk, klik kanan dan pilih Properties . Pilih tab Keamanan , edit izin dan Tambah . Klik Tingkat Lanjut dan Temukan Sekarang . Pilih IIS_IUSRS dan klik OK dan OK lagi. Pastikan Anda telah memeriksa Tulis . Klik OK dan OK lagi.

Pekerjaan selesai!

Quinny
sumber
19
Ada apa dengan merekomendasikan Menulis akses ketika Baca adalah semua yang diperlukan? / downvoted
TristanK
2
Satu-satunya IIS * yang saya miliki adalah IIS_WPG
B. Clay Shannon
1
@ B.ClayShannon Me juga. Saya hanya punya IIS_WPG
Fortune
13

Ketika Anda memberikan izin kepada IIS_IUSRS Anda harus memeriksa bahwa di bagian IIS / Otentikasi Aplikasi Web Anda, Kredensial Otentikasi Anonim menggunakan Identitas Pool Aplikasi dan bukan IUSR.

masukkan deskripsi gambar di sini

Carlos
sumber
Di mana saya bisa mendapatkan antarmuka ini?
Pada tab Fitur Lihat di Aplikasi Web Anda: Otentikasi
Carlos
Jawaban ini harus menjadi bagian dari penyebab jawaban yang diterima tanpa ini, Anda juga perlu menambahkan IUSR dalam daftar akses folder situs web
Laurent S.
7

Untuk beberapa alasan, web.config Anda ditetapkan sebagai hanya baca. Hapus centang opsi readonly file web.config.

Luis
sumber
Jika izin Anda adalah akses penuh dan masih mendapatkan kesalahan, ini adalah jawaban yang benar (y).
Vasil Valchev
4

Saya menggunakan subt untuk membuat pemetaan dari D: ke C: untuk menjaga pengaturan yang sama dengan pengembang lain dalam tim. Ini juga memberi saya kesalahan yang sama seperti yang dijelaskan. Menghapus ini memperbaikinya bagi saya.

Sniipe
sumber
3

Solusi yang diterima bukan untuk saya. Saya menggunakan repo Git dan diklon ke folder berikut

c:\users\myusername\source\repos\myWebSite

Saya membuat situs web IIS baru dan mengarahkannya ke jalur. Yang tidak memiliki izin iis_iusrs disarankan dalam solusi yang diterima. Ketika saya menambahkan izin itu masih tidak berfungsi.

Itu hanya mulai berfungsi ketika saya memberikan izin berikut ke grup 'Pengguna' dan pewarisan mengalirkan izin ke web.config. Mungkin seharusnya menerapkannya hanya ke web.config untuk mengurangi area permukaan serangan.

Pemindahan Pengguna

Tom McDonald
sumber
Memiliki situasi yang sama persis. Ini membantu.
Roemer
2

Kami memiliki situs web yang berjalan dengan identitas tertentu di apppool, hanya setelah memberikan pengguna itu akses baca ke folder yang berisi web.config akan berfungsi. Kami melacak ini setelah menambahkan pengguna 'semua orang' dengan baca dan semuanya bekerja dengan baik.

rampok
sumber
2

Bagi saya kesalahan muncul selama Debugging pada mesin lokal saya dan ternyata terkait dengan basis web.config, yang diprakarsai oleh .NET Framework saat menyusun situs web. C saya: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ File config \ web.config memiliki elemen yang tidak dikenal (folderLevelBuildProviders). Memperbaiki ini memperbaiki kesalahan 500.19.

Lihat ini: IIS Manager tidak dapat mengonfigurasi .NET Compilation pada .NET 4 Applications

Rafael Emshoff
sumber
2

Mengubah Identitas Model Proses ke LocalSystem memperbaiki masalah ini untuk saya. Anda dapat menemukan pengaturan ini jika Anda mengklik kanan pada kumpulan aplikasi dan memilih "Pengaturan Lanjut". Saya menjalankan IIS 7.5.

jshoaf
sumber
2

Klik kanan Web.Config => Tab Security => Tombol Edit => Tombol Tambah => Tombol Lanjut => Tombol Temukan Sekarang => Dalam hasil Pencarian pilih grup Anda (dalam kasus kami "IIS_IUSRS") => Ok => Ok => Baik

Igor Levkivskiy
sumber
2

Ini terjadi pada kami ketika aplikasi IIS memiliki Direktori Virtual dengan Path Fisik yang berisi garis miring /bukan garis miring terbalik\ . Ini secara tidak sengaja dilakukan menggunakan API manajemen PowerShell untuk IIS selama proses pengiriman berkelanjutan kami.

Contoh Konfigurasi Buruk - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

Pastikan physicalPathatribut tidak mengandung garis miring ke depan/ , hanya garis miring terbalik\

Contoh Konfigurasi Terkoreksi - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>
SliverNinja - MSFT
sumber
1
Dalam kasus saya jalur fisik memiliki garis miring ganda misalnya C:\inetpub\MySite\\MyService. Mengubahnya menjadi satu back slash berhasil
Ben Anderson
2

Saya telah memecahkan ini dengan menambahkan izin baca ke folder untuk pengguna kumpulan aplikasi (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Sedikit latar belakang: Server kami telah diretas menggunakan kesalahan klasik di mana pengguna aplikasi memiliki lebih banyak izin yang seharusnya (admin lokal).

Untuk memperbaikinya kami membuat pengguna domain baru yang hanya memiliki izin pada folder aplikasi, dengan hak minimal yang diperlukan dan menetapkannya sebagai pengguna kumpulan aplikasi. daripada kita mengenai masalah ini dan ini adalah solusi untuk masalah kita.

ludens
sumber
2

Pindahkan proyek Anda ke beberapa drive selain C: Bekerja untuk saya dengan kesalahan yang sama.

Talha Imam
sumber
2

Ini bisa terjadi jika aplikasi Anda berada di direktori virtual dan jalur ke file adalah drive yang dipetakan.

Jika Anda mengubah path ke file ke drive lokal, ini akan menyelesaikannya, jika memang itu masalah Anda.

UKentris
sumber
2

Semua jawaban yang diberikan valid dan berfungsi dalam situasi yang berbeda.

Bagi saya, memulai ulang Visual Studio berfungsi.

Doruk
sumber
1

Saya menerima "Tidak dapat membaca file konfigurasi karena izin yang tidak memadai" juga. Ternyata Pembatasan ISAPI dan CGI di IIS untuk ASP.NET 4.0 32bit dan 64bit ditetapkan untuk ditolak. Menandai keduanya untuk Diizinkan perbaiki masalah saya.

Pangeran
sumber
1

Jawaban di atas sangat membantu, tetapi dalam kasus ini membantu siapa pun - Saya punya masalah yang tepat ini, dan ternyata saya (windows networking) berbagi folder root tempat situs itu di-host. Kami membunuh bagian itu, dan menambahkan izin Pengguna untuk membaca / mengeksekusi dan itu berfungsi dengan baik.

Saya menduga bagian itu mengacaukannya.

Michael
sumber
0

Punya masalah ini dengan Aplikasi Virtual. Semua izin ditetapkan. IIS_IUSRS, AppPoolIdentity dan kemudian memberikan akses penuh ke Semua Orang. Tidak ada yang berhasil. Apppool, situs, dan IIS yang telah dimulai kembali tetapi Tidak pergi.

Menghapus aplikasi virtual dan menambahkannya lagi dari awal dan mulai berfungsi.

Seandainya aku tahu apa yang menyelesaikannya.

gbs
sumber
0

periksa apakah file tidak ditandai sebagai hanya-baca , terlepas dari izin IIS_IUSRS itu akan menampilkan pesan yang sama.

Syed Umar Ahmed
sumber
0

Saya memiliki pesan kesalahan ini yang ternyata disebabkan oleh folder fisik saya yang berada di drive jaringan yang bertentangan dengan drive lokal. Tampaknya izin pada drive tersebut secara default dapat berbeda. Misalnya, sementara lokasi drive lokal memberi izin kepada pengguna komputer lokal, lokasi jaringan tidak.

Selanjutnya, jawaban yang diterima tidak berfungsi untuk kasus seperti itu. Pengguna lokal atau pengguna IIS tidak tersedia untuk menetapkan izin. Solusinya adalah memindahkan folder fisik ke drive lokal.

Kat
sumber
0

Saya memiliki masalah yang sama dan setelah melakukan semua hal yang ditulis di sini sebagai jawaban, masih direproduksi. Bagian kedua dari masalah ini adalah kenyataan bahwa .NET dimatikan di bawah "Aktifkan atau matikan fitur Windows"

Bogdan Mates
sumber
0

Kadang-kadang jika itu adalah server baru Anda perlu mengkonfigurasi atau menginstal fitur ASP.NET pada IIS agar dapat membaca file web.config Anda.

Dalam kasus saya ini adalah alasannya.

SanthoshM
sumber
0

Dalam kasus saya, saya mencoba meng-host halaman dari drive yang dipetakan (subst). Masalahnya adalah bahwa subst dijalankan di bawah akun saya dan pengguna IIS tidak dapat melihat drive yang sama

Dinesh Rajan
sumber
0

Saya memberi izin dan menggunakan ICACLS.exe tetapi tidak berhasil. Kemudian saya mengubah jalur fisik dan itu berhasil.

(IIS 8.5 windows 2012 R2)

Adem Aygun
sumber